Puedes usar Firebase Remote Config para definir los parámetros en tu app y actualizar sus valores en la nube, lo que te permite modificar el aspecto y el comportamiento de la app sin distribuir una actualización de esta. En esta guía se explican los pasos que debes seguir para comenzar y se proporciona código de muestra que puedes clonar o descargar desde el repositorio firebase/quickstart-android de GitHub.
Paso 1: Agrega Firebase y el SDK de Remote Config a tu app
Si aún no lo has hecho, agrega Firebase al proyecto de 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.
En el archivo Gradle del módulo (nivel de app) (generalmente
<project>/<app-module>/build.gradle
), agrega la dependencia de la biblioteca de Android de Remote Config. Te recomendamos usar la BoM de Firebase para Android para controlar las versiones de las bibliotecas.Además, como parte de la configuración de Analytics, debes agregar el SDK de Firebase para Google Analytics a tu app.
Kotlin+KTX
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:32.1.0') // Add 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-ktx' implementation 'com.google.firebase:firebase-analytics-ktx' }
Si usas la BoM de Firebase para Android, tu app siempre utilizará versiones compatibles de las bibliotecas de Firebase para Android.
(Alternativa) Agrega dependencias de la biblioteca de Firebase sin usar la BoM
Si eliges no usar la BoM de Firebase, debes especificar cada versión de la biblioteca de Firebase en su línea de dependencia.
Ten en cuenta que, si usas múltiples bibliotecas de Firebase en tu app, es muy recomendable que utilices la BoM para administrar las versiones de las bibliotecas para garantizar que todas las versiones sean compatibles.
dependencies { // Add the dependencies for the Remote Config and Analytics libraries // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-config-ktx:21.4.0' implementation 'com.google.firebase:firebase-analytics-ktx:21.3.0' }
Java
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:32.1.0') // Add 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' }
Si usas la BoM de Firebase para Android, tu app siempre utilizará versiones compatibles de las bibliotecas de Firebase para Android.
(Alternativa) Agrega dependencias de la biblioteca de Firebase sin usar la BoM
Si eliges no usar la BoM de Firebase, debes especificar cada versión de la biblioteca de Firebase en su línea de dependencia.
Ten en cuenta que, si usas múltiples bibliotecas de Firebase en tu app, es muy recomendable que utilices la BoM para administrar las versiones de las bibliotecas y garantizar que todas las versiones sean compatibles.
dependencies { // Add the dependencies for the Remote Config and Analytics libraries // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-config:21.4.0' implementation 'com.google.firebase:firebase-analytics:21.3.0' }
Paso 2: 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:
Kotlin+KTX
val remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig val configSettings = remoteConfigSettings { minimumFetchIntervalInSeconds = 3600 } remoteConfig.setConfigSettingsAsync(configSettings)
Java
FirebaseRemoteConfig 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 estos valores estarán disponibles 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.
Paso 3: Configura los valores de parámetros predeterminados en la app
Puedes configurar los valores de parámetros predeterminados en la app en el objeto de Remote Config, de modo que la app se comporte según lo previsto antes de conectarse al backend de Remote Config y para que los valores predeterminados estén disponibles si no hay ninguno configurado en el backend.
Define 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 ejemplo de la guía de inicio rápido de Remote Config usa un archivo XML para definir los valores y nombres de los parámetros predeterminados.Si ya configuraste los valores de los parámetros de backend de Remote Config, puedes descargar un archivo en formato XML generado que incluya todos los valores predeterminados y guardarlo en el directorio
res/xml
de la app:REST
curl --compressed -D headers -H "Authorization: Bearer token -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig:downloadDefaults?format=XML -o remote_config_defaults.xml
Firebase console
En la pestaña Parámetros, abre el Menú y selecciona Descargar valores predeterminados.
Cuando se solicite, habilita .xml para Android y haz clic en Descargar archivo.
Agrega estos valores al objeto de Remote Config mediante
setDefaultsAsync(int)
, como se muestra a continuación:Kotlin+KTX
remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
Java
mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);
Paso 4: 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,
estos valores estarán disponibles para la app. De lo contrario, obtendrás los valores
de parámetros configurados en la app con
setDefaultsAsync(int)
.
Para obtener estos valores, llama al método siguiente, que aplica asignaciones al tipo de datos que espera la app y proporciona la clave de parámetro como un argumento:
Paso 5: Configura valores de parámetros en el backend de Remote Config
Con Firebase console o las APIs de backend de Remote Config, puedes crear nuevos valores predeterminados del servidor que anulen los valores de la app según la lógica condicional o la segmentación de usuarios que desees. En esta sección, se describen los pasos que se deben seguir en Firebase console para crear los valores.
- Abre el proyecto en Firebase console.
- Selecciona Remote Config desde el menú para ver el panel de la función.
- Define parámetros que tengan los mismos nombres que los que definiste en tu app. Para cada parámetro, puedes definir un valor predeterminado (que, en última instancia, anulará el valor predeterminado de la app) y valores condicionales. Para obtener más información, consulta Parámetros y condiciones de Remote Config.
Paso 6: Recupera y activa valores
- 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. Para 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()
y recuperar valores desde el backend de Remote Config y hacer que estén disponibles para la app, de la siguiente manera:Kotlin+KTX
remoteConfig.fetchAndActivate() .addOnCompleteListener(this) { task -> if (task.isSuccessful) { val updated = task.result Log.d(TAG, "Config params updated: $updated") Toast.makeText( this, "Fetch and activate succeeded", Toast.LENGTH_SHORT, ).show() } else { Toast.makeText( this, "Fetch failed", Toast.LENGTH_SHORT, ).show() } displayWelcomeMessage() }
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 influyen en el comportamiento y el aspecto de la 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 las estrategias de carga de Remote Config para obtener más información y ejemplos.
Paso 7: Escucha actualizaciones en tiempo real
Después de recuperar los valores de los parámetros, puedes usar Remote Config en tiempo real para escuchar actualizaciones del backend de Remote Config. Remote Config en tiempo real envía señales a los dispositivos conectados cuando hay actualizaciones disponibles y recupera de forma automática los cambios después de que publicas una nueva versión de Remote Config.
Las actualizaciones en tiempo real son compatibles con la versión 21.3.0 (y versiones posteriores) del SDK de Firebase para Android (versión 31.2.4, o versiones posteriores, de la BoM de Firebase).
En tu app, usa
addOnConfigUpdateListener()
para comenzar a detectar actualizaciones y recuperar automáticamente los valores de parámetros nuevos. Implementa la devolución de llamadaonUpdate()
para activar la configuración actualizada.Kotlin+KTX
remoteConfig.addOnConfigUpdateListener(object : ConfigUpdateListener { override fun onUpdate(configUpdate : ConfigUpdate) { Log.d(TAG, "Updated keys: " + configUpdate.updatedKeys); if (configUpdate.updatedKeys.contains("welcome_message")) { remoteConfig.activate().addOnCompleteListener { displayWelcomeMessage() } } } override fun onError(error : FirebaseRemoteConfigException) { Log.w(TAG, "Config update error with code: " + error.code, error) } })
Java
mFirebaseRemoteConfig.addOnConfigUpdateListener(new ConfigUpdateListener() { @Override public void onUpdate(ConfigUpdate configUpdate) { Log.d(TAG, "Updated keys: " + configUpdate.getUpdatedKeys()); mFirebaseRemoteConfig.activate().addOnCompleteListener(new OnCompleteListener
() { @Override public void onComplete(@NonNull Task task) { displayWelcomeMessage(); } }); } @Override public void onError(FirebaseRemoteConfigException error) { Log.w(TAG, "Config update error with code: " + error.getCode(), error); } }); La próxima vez que publiques una versión nueva de Remote Config, los dispositivos que ejecutan tu app y detectan cambios llamarán a
ConfigUpdateListener
.
Regulación
Si una app realiza recuperaciones muchas veces en poco tiempo, se regulan las llamadas de recuperación y el SDK muestra el estado 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. Las actualizaciones de Remote Config en tiempo real omiten la
caché de forma automática cuando se actualiza la configuración en el servidor. Para permitir iteraciones rápidas
en un proyecto con un máximo de 10 desarrolladores, puedes configurar de manera temporal un objeto
FirebaseRemoteConfigSettings
con un intervalo de recuperación mínimo
(setMinimumFetchIntervalInSeconds
) en tu app.
Según la configuración predeterminada, el intervalo de recuperación mínimo de Remote Config es de 12 horas, lo que significa que los parámetros de configuración se recuperarán desde el backend solo una vez cada 12 horas, sin importar cuántas llamadas se realicen. Específicamente, el intervalo de recuperación mínimo se determina en el siguiente orden:
- El parámetro de
fetch(long)
- El parámetro de
FirebaseRemoteConfigSettings.setMinimumFetchIntervalInSeconds(long)
- El valor predeterminado de 12 horas
Para establecer un valor personalizado en el intervalo de recuperación mínimo, usa FirebaseRemoteConfigSettings.Builder.setMinimumFetchIntervalInSeconds(long)
.
Próximos pasos
Si aún no lo has hecho, explora los casos de uso de Remote Config y revisa algunos de los conceptos clave y la documentación de estrategias avanzadas, en las que se incluye lo siguiente: