Android — Firebase Realtime Database 101 (1)

Armando Picón
devStories
Published in
6 min readJun 17, 2016

Con el último Google I/O 2016, un Firebase renovado ha llegado para potenciar nuestros desarrollos. Para los que escuchan de esto por primera vez, Firebase es una plataforma que integra múltiples servicios y que funcionan como un Backend as a Service (BaaS). En este artículo nos enfocaremos principalmente en el uso del servicio de Base de datos en tiempo real.

Nuevo logo de Firebase

Junto con las nuevas características y una renovada apariencia, una de las mejores cosas con estos nuevos cambios es lo didáctico que resulta integrar nuestras aplicaciones Android con dicho servicio.

En esta ocasión, basándome en la documentación existente, les mostraré cómo efectuar esta integración.

Creación de la Base de Datos

La creación de la base de datos en Firebase es sencilla. Asumiré que ya se registraron.

  • Ahora, entraremos a la opción Create new project.
  • A continuación, ingresaremos el nombre de nuestro proyecto, nuestro país y pulsaremos el botón Create Project.
  • Visualizaremos nuestro proyecto en un panel similar a este e ingresaremos a la opción Database:
Este es el HOME de nuestro proyecto
  • Visualizaremos la raíz de nuestra base de datos, la url de la misma (aquella que termina en *.firebaseio.com). Otro detalle que debemos tomar en consideración es que, por defecto, las reglas están configuradas para que solo tengan acceso aquellos usuarios que se encuentren autenticados. Para nuestro ejemplo vamos a modificar las reglas y desactivaremos dicha configuración, eso lo haremos en la opción RULES.
  • Cambiaremos los valores de las llaves read y write a true. Pulsaremos luego la opción Publish para aplicar los cambios.
No olvides pulsar Publish para aplicar los cambios.
  • Con esto hemos concluido con la creación de nuestra base de datos.

Creación de Nuestra Aplicación Android

Para este punto asumiré que saben crear una aplicación Android con Android Studio, entonces, solo me enfocaré en la creación de un layout simple que nos permita ingresar datos y visualizar el último dato ingresado en nuestra base de datos.

El Layout luciría así:

Integración de nuestro proyecto Android con Firebase

Firebase ofrece una documentación super simple y clara al respecto (dejaré los enlaces al final del artículo). Pero aquí lo haremos paso a paso con algunas ayudas visuales.

  • En la vista inicial de nuestro proyecto pulsaremos sobre la opción Add Firebase to your Android app. Esto nos abrirá un asistente que nos guiará por los pasos iniciales para efectuar la integración.
Debemos pulsar sobre la opción Add Firebase to your Android app para iniciar el asistente
  • Vamos a ingresar los datos correspondientes al nombre del paquete (que encontraremos en nuestro archivo build.gradle) y la cadena correspondiente al SHA-1 de nuestro certificado de debug (se consigue con una simple línea de código si tienes el JAVA_HOME como parte de tu PATH).
El nombre del paquete lo encontraré en su archivo build.gradle
A través de la sentencia: keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore conseguiremos visualizar y obtener la cadena SHA-1 que necesitamos. Por cierto, la clave por defecto del almacen es “android
  • Al pulsar sobre Add App, automáticamente nos generará un archivo google-services.json. Este archivo deberemos agregarlo a la raíz de nuestro módulo “app”.
El archivo google-services.json debemos agregarlo a la raíz de nuestro módulo “app”.
  • Como tercer paso, agregaremos las dependencias en los archivos build.gradle de nuestra aplicación para poder leer el archivo que copiamos en el paso anterior.
Hay que seguir las instrucciones y copiar dichos bloques en los archivos build.gradle correspondientes.
  • Esta línea va al build.gradle del proyecto…
buildscript {
dependencies {
// Add this line
classpath 'com.google.gms:google-services:3.0.0'
}
}
  • …y esta otra va en el build.gradle del módulo.
...
// Add to the bottom of the file
apply plugin: 'com.google.gms.google-services'
  • Ahora, nos resta agregar las dependencias para hacer uso de la base de datos. La documentación también nos recomienda agregar la dependencia “core” que permite trabajar la parte de analítica.
com.google.firebase:firebase-core:9.0.2
com.google.firebase:firebase-database:9.0.2
  • Ya tenemos todo listo para empezar a programar.

Let’s code!

Lo que haremos con el código que les comparto a continuación es generar una instancia que nos permitirá interactuar con la base de datos del proyecto que creamos anteriormente. Para los que usaron la versión anterior de Firebase, notarán que ya no necesitamos explícitamente hacer la referencia a ella; de hecho, toda esa información se encuentra en el archivo google-services.json que agregamos en nuestro proyecto previamente.

El código dentro de la implementación del OnClickListener contiene la creación de una referencia a un nodo hijo llamado “message”. Mediante la función “setValue” nos permitirá asignar un valor al nodo hijo que mencioné anteriormente.

Este sería el resultado de la ejecución del código anterior, al ingresar un texto y pulsar el botón Enviar, esto provocará la creación del elemento con llave: “message” que no existía al principio y, además, la asignación del valor de dicho elemento.

Ahora, estamos usando una Base de datos en tiempo real; entonces, es momento de agregar la implementación necesaria para poder recibir la actualización del elemento “message”. Entre los cambios que he introducido están: saqué la referencia al elemento “message” fuera de la implementación del OnClickListener y lo establecí como final. A continuación, a dicha referencia le agregamos una implementación del ValueEventListener, la cual dentro del método onDataChange haremos, primero, una validación y luego obtendremos el valor que ha sido cambiado en la base de datos.

// Se obtiene referencia a los elementos de la UI
final Button button1 = (Button) findViewById(R.id.button1);
final EditText editText1 = (EditText) findViewById(R.id.editText1);
final TextView textView2 = (TextView) findViewById(R.id.textView2);


// Se genera una referencia hacia el nodo o elemento que guardará el dato que
// enviaremos a la base de datos y desde el cual lo leeremos
final DatabaseReference messageReference = database.getReference().child(MESSAGE_CHILD);

messageReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.getValue() != null){
textView2.setText(dataSnapshot.getValue(String.class));
}
}

@Override
public void onCancelled(DatabaseError databaseError) {
Log.d(TAG, "Fallo al leer el valor : " + databaseError.toException());

}
});


button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String valor = editText1.getText().toString();
Log.d(TAG,"El valor recibido es:" + valor);
messageReference.setValue(valor);
editText1.setText("");
}
});

Con este cambio podremos ver como, al ingresar el dato y enviarlo, se actualiza el TextView que colocamos para la visualización del texto obtenido desde la base de datos.

Los listeners permitirán a la aplicación recibir las actualizaciones hechas en la base de datos.

Y bueno, hasta aquí llegamos con este artículo que espero les sea de utilidad. En una próxima entrega agregaré la implementación para que, en lugar de setear un valor, podamos agregar varios valores dentro del elemento al que hacemos referencia. Les estoy dejando varios enlaces que corresponden a las referencias que seguí para la elaboración de este artículo y también la url de mi repositorio con este ejemplo.

Referencias:

Puedes revisar otros post:

Si te gustó el posts, puedes compartirlo y recomendar:

--

--

Armando Picón
devStories

lifelong learner • 👨🏽‍💻 Android eng (ex: @uber ) • 🇵🇪 @ 🇨🇱 • @gdgopen • content creator @devpicon | @primosauda