Configuración Remota con Firebase
Toda la información oficial de Firebase la pueden encontrar aquí.
El código completo para este Post lo pueden encontrar en Github
Introducción
Hay veces que necesitamos modificar algunos valores de nuestra aplicación sin tener que publicar una nueva versión solamente para eso. O también en algunas ocasiones necesitamos mostrar cierto contenido para algún grupo de usuarios que cumplan con ciertas reglas (por ejemplo, que el dispositivo esté en algún idioma en específico o que se encuentre en algún país, o también que el sistema operativo sea de alguna versión/tipo). Para estos casos Firebase nos proporciona la opción de Configuración Remota.
Configuracion Remota se conforma por un par de elementos:
- Una lista de parámetros, de la forma Llave - Valor.
- Una lista de condiciones, las cuales se pueden aplicar a los parametros.
En nuestra aplicación podemos hacer uso de estos parámetros. Por defecto, en la aplicación necesitamos definir estos parámetros con un valor inicial. Si obtenemos los valores que definimos en la Configuración Remota de Firebase, la aplicación va a utilizar estos valores en lugar de los predefinidos en la app.
Definiendo Parámetros
Vamos a iniciar definiendo algunos parámetros para nuestra aplicación de prueba. Estos parámetros se podrán configurar para mostrar o no un texto, cambiar el color de un texto y definir un texto que se quiera mostrar. En la consola de Firebase entramos a nuestra aplicación y seleccionamos la opción de Configuración Remota en el menú. Nos abre una pantalla donde podemos añadir nuestro primer parámetro.

Al presionar el botón Añade Tu Primer Parámetro, nos aparece un diálogo donde podemos agregar nuestro parámetro. Como llave (o clave, como aparece en Firebase) pondremos la cadena titulo_bienvenida, y como valor podemos poner cualquier texto, en este caso, como se muestra en la imagen, el texto será “Este valor se cambió en la consola”.

Podemos agregar otro parámetro, en este caso lo llamaremos color_subtítulo. A este parámetro lo dejaremos SIN valor. Al hacer esto, la aplicación utilizará el valor para este parámetro definido dentro de la app.

Agregando Condiciones
Al momento de definir un parámtro, también se nos da la opción de definir una condición para este parámetro. Una condición nos permite agregar ciertas reglas que se deben de cumplir, para que el valor del parámetro se utilice. Para agregar una nueva condición, en el diálogo donde se define el parámetro, necesitamos presionar el texto Añadir valor de condición. Al hacer esto, aparecerá otro diálogo donde podemos definir la condición o agregar alguna condición existente.

Si queremos definir una condición nueva, se abrirá un nuevo diálogo donde podremos definir la condición. Podemos asignarle un nombre, un color para identificarla, y podemos agregar varias reglas que se deben de cumplir para que el valor del parámetro se utilice.

Vamos a crear una condición. Esta condición se aplicará cuando el Sistema Operativo del dispositivo sea Android, el país sea México y el idioma del dispositivo sea Inglés.

Al crear la condición la podemos agregar a nuestro parámetro. Si se cumple esta condición, podemos asignarle un valor. En nuestro caso, a nuestra condición anterior que llamamos Inglés-Android-Mexico, si se cumple, tendremos el valor El dispositivo está en inglés, es Android y está en México. En caso de que la condición no se cumpla, vamos a mostrar el valor El texto a mostrar por default.

Podemos agregar varias condiciones. Habrá veces en que varias condiciones se puedan cumplir. Sin embargo, el valor que se utilizará será el primer valor donde la condición se cumpla, de arriba hacia abajo.
Al terminar de añaidr parámetros con sus valores y condiciones, estos cambios no serán publicados inmediatamente. Aparecerá la pantalla con la lista de tus parámetros y valores/condiciones y necesitamos presionar el botón de Aplicar Cambios en la parte superior de la pantalla para que los parámetros estén disponibles para nuestra aplicación.

En la sección de Configuración Remota en la consola, también podemos tener acceso a la lista de condiciones que tenemos definidas, las cuales podemos editar, así cómo la opción para crear una condición nueva. Para acceder a esta lista, debemos presionar la pestaña de Condiciones.

Agregando Configuración Remota
Para comenzar a utilizar la Configuración Remota de Firebase, necesitamos seguir los pasos de este Post. Posteriormente, necesitamos agregar la dependencia en el gradle de la aplicación.
compile 'com.google.firebase:firebase-config:10.0.1'
Utilizando Configuración Remota
Firebase nos proporciona un objeto FirebaseRemoteConfig para poder utilizar la Configuración Remota. Necesitamos crear una variable de este tipo para posteriormente asignarle la instancia correspondiente y poder comenzar a utilizarlo.
private FirebaseRemoteConfig configuracionRemota;
configuracionRemota = FirebaseRemoteConfig.getInstance();
Para que la Configuración Remota funcione, necesitamos crear un archivo xml con los valores predeterminados de nuestros parámetros. Estos valores se utilizarán cuando no haya algún parámetro en la consola de Firebase con el mismo nombre, o cuándo el parámetro no tenga un valor definido en la consola.
Crearemos el archivo valores_config_remota.xml donde debemos de crear una estructura como se muestra a continuación.
<defaultsMap>
<entry>
<key></key>
<value></value>
</entry>
</defaultsMap>
Llenando el archivo con los parámetros que definimos en la consola previamente, pero con el valor por defecto, nuestro archivo quedaría de la siguiente manera
<defaultsMap>
<entry>
<key>titulo_bienvenida</key>
<value>Aplicación de configuración remota</value>
</entry>
<entry>
<key>mostrar_subtitulo</key>
<value>true</value>
</entry>
<entry>
<key>color_subtitulo</key>
<value>#000000</value>
</entry>
<entry>
<key>texto_mostrar</key>
<value>Este es el texto a mostrar por defecto en la aplicación.</value>
</entry>
</defaultsMap>
Para que nuestra aplicación cargue los valores por defecto que definimos en nuestro archivo xml, necesitamos utilizar el método setDefaults() indicándole el archivo donde vendrán nuestros valores.
configuracionRemota.setDefaults(R.xml.valores_config_remota);
Una vez que se cargaron los valores por defecto, podemos obtenerlos del objeto FirebaseRemoteConfig y comenzar a utilizarlos.
private void mostrarValores() {
titulo.setText(configuracionRemota.getString(TITULO));
if (configuracionRemota.getBoolean(MOSTRAR_SUBTITULO)) {
subtitulo.setVisibility(View.VISIBLE);
} else {
subtitulo.setVisibility(View.GONE);
}
subtitulo.setTextColor(Color.parseColor(configuracionRemota.getString(COLOR_SUBTITULO)));
colorSubtitulo.setText("El color del subtitulo es " + configuracionRemota.getString(COLOR_SUBTITULO));
texto.setText(configuracionRemota.getString(TEXTO));
}
Para obtener los valores de Configuración Remota que están en Firebase, vamos a crear un botón para que cuando lo presionemos, obtenga estos valores.
botonConfigRemota.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
obtenerConfiguracionRemota();
}
});
Firebase permite hacer solamente 5 peticiones por hora. Si están en modo de desarrollador van a necesitar más de 5 para hacer sus pruebas. Firebase nos permite configurar el objeto FirebaseRemoteConfig en modo Debug para poder obtener más peticiones.
FirebaseRemoteConfigSettings opcionesConfiguracionRemota = new FirebaseRemoteConfigSettings.Builder()
.setDeveloperModeEnabled(BuildConfig.DEBUG)
.build();
configuracionRemota.setConfigSettings(opcionesConfiguracionRemota);
Con esto estamos listos para obtener nuestra configuración. Podemos agregarle un tiempo de expiración de los datos (que en el caso de ser desarrolladores y estar en modo Debug, podrá ser de 0 para cada vez que pidamos la configuración, nos traiga los últimos valores, con la finalidad de probar el código).
Utilizamos el método fetch() del objeto FirebaseRemoteConfig para obtener los datos. Una vez obtenidos, necesitamos activarlos para que puedan ser utilizados. Una vez obtenidos y activados los valores, podemos actualizar los TextViews con los nuevos valores:
private void obtenerConfiguracionRemota() {
long tiempoExpiracionDatos = 3600; // en segundos.
if (configuracionRemota.getInfo().getConfigSettings().isDeveloperModeEnabled()) {
tiempoExpiracionDatos = 0;
}
configuracionRemota.fetch(tiempoExpiracionDatos).addOnCompleteListener(this, new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> tarea) {
if (tarea.isSuccessful()) {
configuracionRemota.activateFetched();
}
mostrarValores();
}
});
}
Podemos ver los valores defecto, ANTES de sincronizar con Firebase.

Al presionar el botón, obtenemos la configuración remota.

Conclusión
La Configuración Remota de Firebase nos permite almacenar parámetros con la forma llave-valor, los cuales nos permiten cambiar algunos aspectos de nuestra aplicación sin tener que sacar una nueva versión. Para que esto funcione, necesitamos agregar los parámetros en la consola, agregar condiciones si es necesario para posteriormente obtener los parámetros dentro de la aplicación. En la aplicación, necesitamos un archivo con los valores por defecto de los parámetros. Para sincronizar con Firebase, necesitamos obtener los parámetros y posteriormente activarlos.
Las condiciones funcionarán de la siguiente manera: se pueden agregar varias condiciones, pero la primera condición que sea verdadera, será la que se utilice.
En caso de no tener parámetros con esa llave, o el parámetro en Firebase no tiene un valor, se utilizará el valor del archivo xml dentro de la aplicación. De igual manera se utilizarán los valores de ese archivo cuando no se haga la activación de los parámetros, una vez obtenidos.
Si hay parámetros con valor y se activaron, y cumplen con las condiciones (en caso de que existan), se utilizarán los valores de la consola de Firebase.
Deja un comentario