Cómo integrar Remote Config en el codelab de Android

1. Introducción

Última actualización: 9/3/2021

¿Qué es Firebase Remote Config?

Firebase Remote Config es un servicio de nube que te permite cambiar el comportamiento y el aspecto de tu app sin que los usuarios tengan que descargar una actualización de la app sin costo. Cuando usas Remote Config, creas valores predeterminados en la app que controlan el comportamiento y el aspecto de tu app. Luego, puedes usar Firebase console o las APIs de backend de Remote Config para anular los valores predeterminados en la app, ya sea para todos los usuarios o para segmentos de tu base de usuarios. Tu app controla cuándo se aplican las actualizaciones y puede verificar con frecuencia si hay actualizaciones y aplicarlas, todo con un impacto insignificante en el rendimiento.

¿Cómo funciona?

Remote Config incluye una biblioteca cliente que maneja tareas importantes como la recuperación de valores de parámetros y su almacenamiento en caché, sin dejar de darte control sobre cuándo se activan los nuevos valores para que afecten la experiencia del usuario de tu app. De esta manera, puede controlar el momento de cualquier cambio para proteger su experiencia en la aplicación.

Los métodos get de la biblioteca cliente de Remote Config proporcionan un único punto de acceso para los valores de los parámetros. Tu app obtiene valores del servidor usando la misma lógica que usa para obtener los valores predeterminados en la app, de modo que puedas agregar las capacidades de Remote Config a tu app sin escribir mucho código.

Para anular los valores predeterminados en la app, usa Firebase console o las APIs de backend de Remote Config para crear parámetros con los mismos nombres que los parámetros que se usan en tu app. Para cada parámetro, puedes configurar un valor predeterminado del servidor para anular el valor predeterminado en la app, y también puedes crear valores condicionales para anular el valor predeterminado de la app en instancias de apps que cumplen con ciertas condiciones. En este gráfico, se muestra cómo se priorizan los valores de parámetros en el backend de Remote Config y en tu app:

61f12f33d2ac3133.png

Qué aprenderás

  • Cómo implementar Firebase Remote Config
  • Cómo usar Firebase Remote Config para cambiar valores sin actualizar tu app

Requisitos

  • La versión más reciente de Android Studio
  • Una cuenta de Firebase
  • Un dispositivo Android físico para ejecutar tu app (recomendado, pero opcional)
  • Conocimientos básicos de Java o Kotlin

2. Cómo prepararte

Descarga el código de muestra(opcional)

En este codelab, compilarás tu propia app de prueba, pero si deseas ver y ejecutar la app de ejemplo existente, puedes descargar el código de muestra de la guía de inicio rápido.

Haz clic en el siguiente botón para descargar todo el código de este codelab:

Descargar código fuente

Descomprime el archivo zip descargado. Se descomprimirá una carpeta raíz llamada quickstart-android-master.

...o clonar el repositorio de GitHub desde la línea de comandos.

$ git clone https://github.com/firebase/quickstart-android.git

El repositorio contiene varias carpetas. Usaremos la carpeta android_studio_folder.png config.

Importa el código de muestra(opcional).

Inicia Android Studio y selecciona "Import project" en la pantalla de bienvenida. Luego, abre la carpeta descargada y selecciona la carpeta android_studio_folder.png config. Luego, haz clic en "Abrir".

5f90353b0b519642.png

Cómo crear un nuevo proyecto de Android

  1. En Android Studio, inicia un proyecto nuevo.
  2. Seleccionar actividad básica
  3. En la sección “Configura tu proyecto”, pantalla:
  4. Ponle un nombre al proyecto. El nombre del paquete y la ubicación de guardado se generarán automáticamente.
  5. Lenguaje: Java
  6. SDK 16 como mínimo

3. Agrega Firebase y Firebase Analytics a tu proyecto de Android

Crea un proyecto de Firebase

A fin de poder agregar Firebase a tu app para Android, debes crear un proyecto de Firebase y conectarlo a la app para iOS. Consulta la Información sobre los proyectos de Firebase para obtener más detalles sobre el tema.

  1. En Firebase console, haz clic en Agregar proyecto y, luego, selecciona o ingresa el Nombre del proyecto. 910158221fe46223.png

Si ya tienes un proyecto de Google Cloud Platform (GCP), puedes seleccionarlo del menú desplegable para agregarle recursos de Firebase.

  1. Si estás creando un proyecto nuevo, puedes editar el ID del proyecto (opcional).

Firebase asigna automáticamente un ID único a tu proyecto de Firebase. Consulta la sección Comprende los proyectos de Firebase para descubrir cómo usa Firebase el ID del proyecto.

  1. Haz clic en Continuar.
  2. Configura Google Analytics para tu proyecto, lo que te permitirá tener una experiencia óptima con cualquiera de los siguientes productos de Firebase:
  • Firebase Crashlytics
  • Firebase Predictions
  • Firebase Cloud Messaging
  • Firebase In‑App Messaging
  • Firebase Remote Config
  • Firebase A/B Testing

Cuando se te solicite, selecciona si quieres usar una cuenta de Google Analytics existente o crear una nueva. Si decides crear una cuenta nueva, selecciona la ubicación de los informes de Analytics y, luego, acepta la configuración de uso compartido de datos y las condiciones de Google Analytics para tu proyecto.

1282a798556779ab.png

48ade68c8de27d2.png

  1. Haz clic en Crear proyecto (o Agregar Firebase si usas un proyecto de GCP existente).

Firebase aprovisiona recursos automáticamente para tu proyecto. Cuando finalice, verás la página de descripción general del proyecto en Firebase console.

Registra tu app en Firebase

Cuando tengas un proyecto de Firebase, podrás agregarle tu app para Android.

Consulta la Información sobre los proyectos de Firebase para obtener detalles sobre las prácticas recomendadas y las consideraciones para agregar apps a un proyecto de Firebase, incluido cómo manejar diversas variantes de compilación.

  1. Ve a Firebase console.
  2. En la parte superior de la página Descripción general del proyecto, haz clic en el ícono de Android para iniciar el flujo de trabajo de configuración. Si ya agregaste una app a tu proyecto de Firebase, haz clic en Agregar app para que se muestren las opciones de plataforma.
  3. Ingresa el nombre del paquete de tu app en el campo Nombre del paquete de Android.
  4. Ingresa el Sobrenombre de la app (opcional).
  5. Deja en blanco el campo SHA-1, ya que no se requiere SHA-1 para este proyecto.
  6. Haz clic en Registrar app.

Agrega el archivo de configuración de Firebase

A continuación, se te pedirá que descargues un archivo de configuración con todos los metadatos de Firebase necesarios para tu app. Haz clic en Descargar google-services.json a fin de obtener el archivo de configuración de Firebase para Android (google-services.json).

bc8ec7d3c9a28d75.png

a99b7415462dfc8b.png

Agrega reglas para incluir el complemento Gradle de los servicios de Google en el archivo Gradle a nivel de proyecto (build.gradle). Además, revisa que tengas el repositorio Maven de Google.

Archivo build.gradle a nivel de proyecto (<project>/build.gradle):

buildscript {

  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository
  }

  dependencies {
    // ...

    // Add the following line:
    classpath 'com.google.gms:google-services:4.3.5'  // Google Services plugin
  }
}

allprojects {
  // ...

  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository
    // ...
  }
}

En el archivo Gradle (generalmente app/build.gradle) del módulo (nivel de app), aplica el complemento Gradle de los servicios de Google:

Archivo build.gradle de nivel de app (<project>/<app-module>/build.gradle):

Aplicar complemento: 'com.android.application'

// Agrega la siguiente línea:

apply plugin: ‘com.google.gms.google-services’ // Complemento de Google Services

android {

// ...

}

Agrega el SDK de Firebase a tu app para Android

En el caso de Remote Config, se requiere Google Analytics para la segmentación condicional de las instancias de apps a las propiedades del usuario y los públicos. Asegúrate de habilitar Google Analytics en tu proyecto.

(Esto ya se hace en el código de la guía de inicio rápido de muestra).

Con la BoM de Firebase para Android, declara la dependencia de la biblioteca de Android de Remote Config en el archivo Gradle (generalmente app/build.gradle) de tu módulo (nivel de app). Si usas la BoM de Firebase para Android, tu app siempre utilizará versiones compatibles de las bibliotecas de Firebase para Android.

Además, como parte de la configuración de Analytics, debes agregar el SDK de Firebase para Google Analytics a tu aplicación. En dependencias, agrega el siguiente código:

app/build.gradle

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:26.6.0')

    // Declare the dependencies for the Remote Config and Analytics libraries
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-config'
    implementation 'com.google.firebase:firebase-analytics'
}

Sincroniza tu proyecto con archivos de Gradle

A fin de asegurarte de que todas las dependencias estén disponibles para tu app, sincroniza el proyecto con archivos de Gradle seleccionando File > Sincroniza el proyecto con archivos de Gradle.

4. Revisa los componentes principales de Remote Config

Ahora revisaremos los pasos para usar Remote Config en una app. Estos pasos ya se completaron en el código del codelab de la guía de inicio rápido. Usa esta sección mientras revisas el código del codelab de la guía de inicio rápido para comprender lo que sucede.

1. Obtén el objeto singleton de Remote Config

Obtén una instancia de objeto de Remote Config y establece el intervalo de recuperación mínimo para permitir actualizaciones frecuentes:

MainActivity.java

mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
        .setMinimumFetchIntervalInSeconds(3600)
        .build();
mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);

El objeto singleton se usa para almacenar los valores de parámetros predeterminados en la app, recuperar los valores de parámetros actualizados desde el backend y controlar cuándo están disponibles los valores obtenidos para la app.

Durante el desarrollo, se recomienda establecer un intervalo de recuperación mínimo relativamente bajo. Consulta la sección Regulación para obtener más detalles.

2. Configura los valores de parámetros predeterminados en la app

Puedes configurar los valores de parámetros predeterminados del objeto de Remote Config para que la app se comporte según lo previsto antes de que se conecte al backend de Remote Config y para que los valores predeterminados estén disponibles si no hay ninguno configurado en el backend.

Puedes definir un conjunto de nombres de parámetros y valores de parámetros predeterminados con un objeto Map o un archivo de recursos XML almacenado en la carpeta res/xml de tu app. La app de muestra del inicio rápido de Remote Config usa un archivo XML para definir los valores y nombres de los parámetros predeterminados. Debes crear tu propio archivo en formato XML de la siguiente manera:

  1. Crea una carpeta xml en la carpeta res.

4b8a2a637a626e94.png

  1. Haz clic con el botón derecho en la carpeta xml recién creada y crea un archivo.

358b4ba740120ece.png

  1. Configura los valores predeterminados. En la siguiente sección, intentarás cambiar los valores predeterminados en el archivo XML de la guía de inicio rápido de Remote Config.
  2. Agrega estos valores al objeto de Remote Config con setDefaultsAsync(int), como se muestra a continuación:

MainActivity.java

mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);

3. Obtén los valores de los parámetros para usarlos en tu app

Ahora puedes obtener valores de parámetros desde el objeto de Remote Config. Si configuras valores en el backend, los recuperas y luego los activas, esos valores estarán disponibles para tu app. De lo contrario, puedes configurar los valores de los parámetros en la app con setDefaultsAsync(int). Para obtener estos valores, llama al método que se indica a continuación, que aplica asignaciones al tipo de datos que espera la app y proporciona la clave de parámetro como argumento:

4. Recupera y activa valores

  1. Para recuperar valores de los parámetros del backend de Remote Config, llama al método fetch(). Todos los valores que estableces en el backend se recuperan y almacenan en el objeto de Remote Config.
  2. Para hacer que los valores de parámetros recuperados estén disponibles en la app, llama al método activate(). Para los casos en los que desees recuperar y activar valores en una sola llamada, puedes usar una solicitud fetchAndActivate() a fin de recuperar valores desde el backend de Remote Config y hacer que estén disponibles para la app:

MainActivity.java

mFirebaseRemoteConfig.fetchAndActivate()
        .addOnCompleteListener(this, new OnCompleteListener<Boolean>() {
            @Override
            public void onComplete(@NonNull Task<Boolean> task) {
                if (task.isSuccessful()) {
                    boolean updated = task.getResult();
                    Log.d(TAG, "Config params updated: " + updated);
                    Toast.makeText(MainActivity.this, "Fetch and activate succeeded",
                            Toast.LENGTH_SHORT).show();

                } else {
                    Toast.makeText(MainActivity.this, "Fetch failed",
                            Toast.LENGTH_SHORT).show();
                }
                displayWelcomeMessage();
            }
        });

Dado que estos valores de parámetros actualizados afectan el comportamiento y el aspecto de tu app, debes activar los valores recuperados en un momento en el que se garantice una experiencia fluida para el usuario, como la próxima vez que abra la app. Consulta Estrategias de carga de Remote Config para obtener más información y ejemplos.

Regulación

Si una app realiza recuperaciones muchas veces en poco tiempo, se regulan las llamadas de recuperación y el SDK muestra FirebaseRemoteConfigFetchThrottledException. Antes de la versión 17.0.0 del SDK, el límite eran 5 solicitudes de recuperación en un período de 60 minutos (las versiones más recientes tienen límites más permisivos).

Durante el desarrollo de la app, te recomendamos recuperar y activar la configuración con mucha frecuencia (varias veces por hora) para que puedas iterar con rapidez mientras desarrollas y pruebas tu app. Para permitir iteraciones rápidas en un proyecto que cuenta con un máximo de 10 desarrolladores, puedes configurar de manera temporal un objeto FirebaseRemoteConfigSettings con un intervalo de recuperación mínimo bajo (setMinimumFetchIntervalInSeconds) en tu app.

El intervalo de recuperación mínimo predeterminado para Remote Config es de 12 horas, lo que significa que los parámetros de configuración no se recuperarán desde el backend más de una vez en un período de 12 horas, independientemente de cuántas llamadas de recuperación se realicen. Específicamente, el intervalo de recuperación mínimo se determina en el siguiente orden:

  1. El parámetro de fetch(long)
  2. El parámetro de FirebaseRemoteConfigSettings.setMinimumFetchIntervalInSeconds(long)
  3. El valor predeterminado de 12 horas

Para establecer el intervalo de recuperación mínimo en un valor personalizado, usa FirebaseRemoteConfigSettings.Builder.setMinimumFetchIntervalInSeconds(long).

5. Cambia el comportamiento de la app con Remote Config

Cambia los parámetros predeterminados en la app

Abre res/xml/remote_config_defaults.xml y cambia los valores predeterminados por otro.

res/xml/remote_config_defaults.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- START xml_defaults -->
<defaultsMap>
    <entry>
        <key>loading_phrase</key>
        <value>Fetching config...</value>
    </entry>
    <entry>
        <key>welcome_message_caps</key>
        <value>false</value>
    </entry>
    <entry>
        <key>welcome_message</key>
        <value>Welcome to my awesome app!</value>
    </entry>
</defaultsMap>
    <!-- END xml_defaults -->

Verifica el cambio de valor predeterminado en la app

  1. Ejecuta el proyecto en un emulador o con un dispositivo de prueba para confirmar el comportamiento.
  2. Haz clic en Abrir en la versión de Java o Kotlin.

c1582b989c25ced.png

  1. Revisa el mensaje de bienvenida en la vista principal.

4c838bf5a629d5b8.png

Configura valores de parámetros en el backend de Remote Config

Ahora probemos el envío de valores con Remote Config. Con Firebase console o las APIs de backend de Remote Config, puedes crear nuevos valores predeterminados del servidor que anulen los valores integrados en la app según la lógica condicional o la segmentación a usuarios que desees. En esta sección, se describen los pasos que se deben seguir en Firebase console para crear los valores.

  1. Abre Firebase console y abre tu proyecto.
  2. Selecciona Remote Config en el menú lateral izquierdo en la sección Engage para ver el panel de Remote Config.
  3. En Agregar un parámetro, ingresa Parameter key.. En Default value, agrega el texto que desees. Luego, haz clic en Agregar parámetro. En este codelab, usaremos las claves de parámetros en el archivo res/xml/remote_config_defaults.xml. Consulta la siguiente tabla para obtener más detalles:

Clave del parámetro

Valor predeterminado (remote_config_defaults.xml)

Descripción

loading_phrase

Recuperando configuración...

String; Se muestra cuando se recuperan los valores de Remote Config.

welcome_message_caps

falso

Booleano; Si esta preferencia se establece como "true", se cambiará el_mensaje de bienvenida a mayúsculas.

welcome_message

¡Te damos la bienvenida a mi increíble aplicación!

String; Mensaje de bienvenida

Captura de pantalla de ejemplo:

28fa48f18da43002.png

  1. Cuando hayas terminado de agregar los parámetros, haz clic en "Publicar cambios".
  2. Vuelve a ejecutar tu app en un emulador o dispositivo, y haz clic en "Fetch Remote Welcome" esta vez.

cfe900477549adb7.png

  1. El mensaje de bienvenida debe actualizarse según tus valores y parámetro de Remote Config.

6. Felicitaciones

¡Felicitaciones! Usaste Remote Config correctamente para cambiar el mensaje de bienvenida. Hay muchas más formas de usar Remote Config para cambiar y personalizar apps. Consulta los siguientes recursos adicionales: