Primeros pasos con Firebase Remote Config en Android

Puedes usar Firebase Remote Config para definir parámetros en la 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 ella. 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.

Agrega Firebase a tu app

  1. Si aún no lo has hecho, agrega Firebase a tu proyecto de Android.

    Cuando instalas el SDK de Android, tienes la opción de agregar la dependencia para Analytics. Se requiere Analytics para la orientación condicional de las instancias de apps de Remote Config a las propiedades del usuario, los públicos y Firebase Predictions.

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:

Java

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

Kotlin

remoteConfig = FirebaseRemoteConfig.getInstance()val configSettings = FirebaseRemoteConfigSettings.Builder()
        .setMinimumFetchIntervalInSeconds(3600)
        .build()
remoteConfig.setConfigSettingsAsync(configSettings)

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

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.

Establece los valores de los parámetros predeterminados de 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.

  1. 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 muestra 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.
  2. Agrega estos valores al objeto de Remote Config mediante setDefaultsAsync(int), tal como se muestra a continuación:

Java

mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);

Kotlin

remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)

Obtén valores de parámetros para usarlos en la app

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

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

Con Firebase console o la API de REST 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 orientación a usuarios que desees. En esta sección, se explican los pasos que debes seguir en Firebase console para crear esos valores.

  1. Abre el proyecto en Firebase console.
  2. Selecciona Remote Config desde el menú para ver el panel de Remote Config.
  3. 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 los parámetros y las condiciones de Remote Config.

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. A fin de que los valores de parámetros recuperados queden disponibles para tu 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, de la siguiente manera:

    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();
                }
            });

    Kotlin

    remoteConfig.fetchAndActivate()
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    val updated = task.getResult()
                    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()
            }

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 la abra. Consulta las 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 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 actualizar y activar la configuración con mucha frecuencia (varias veces por hora) para que puedas iterar con rapidez mientras desarrollas y pruebas tu app. A fin de permitir iteraciones rápidas en un proyecto con hasta 10 desarrolladores, puedes configurar temporalmente un objeto FirebaseRemoteConfigSettings con un intervalo de recuperación mínimo bajo (setMinimumFetchIntervalInSeconds) en la 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 las configuraciones 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:

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

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

Pasos siguientes

Si aún no lo has hecho, explora los casos prácticos de Remote Config y revisa algunos de los conceptos clave y la documentación de estrategias avanzadas, en las que se incluye lo siguiente: