Artículo Notificaciones en Android con Firebase

El Backend para desarrolladores móviles

El próximo billón de personas que conozcan internet lo harán mediante un smartphone. De ahí, la inquietud de Google por disponibilizar herramientas que nos faciliten el desarrollo y crecimiento de nuestras aplicaciones. Ahora parte de Google, Firebase es un Backend as a Service; quiere decir que ya no tenemos que crear nuestra propia infraestructura ni desarrollar nuestro propio backend.

Además es totalmente compatible con Android, iOS y Web: solo te enfocas en desarrollar tu aplicación y acceder a todas esas funcionalidades por medio del SDK de Firebase.

Si eres desarrollador de aplicaciones móviles, notarás que esta es una increíble ventaja, ya que podrás crear prototipos rápidos o llevar tu aplicación al Store sin preocuparte por algo más, sobre todo si Java y Swift son los únicos lenguajes que conoces.

¿Qué hace Firebase?

Entre todo lo disponible en Firebase se encuentra:

  • Realtime database: Persistir datos y sincronizarlos en tiempo real con todos tus clientes. En un caso práctico, podemos hacer un chat en tiempo real de forma sencilla tal como lo haría socket.io con node.js.
    Authentication: Permitir registrarse y hacer login por medio de password u otros servicios como Facebook, Twitter, GitHub, etc. de una manera más sencilla, flexible, y unificada entre sí. Inclusive, puedes agregar funciones avanzadas como verificación por email y login de forma anónima.

  • Storage: Poder almacenar y disponer de archivos multimedia en cualquier momento, inclusive, llegando a Petabytes si así lo necesitas.

  • Cloud Messaging : Uno de mis favoritos, es poder enviar mensajes entre aplicaciones e implementar push notifications. Conocido como Firebase Cloud Messaging (FCM), es una evolución de lo antes visto en Google Cloud Messaging (GCM). Sin embargo, la personalización es muy intuitiva, llegando incluso a ser más eficiente en batería y prometiendo la entrega del 100% de los mensajes. Puedes segmentar mensajes de acuerdo al tipo de dispositivos y usuarios, todo de forma ilimitada y gratuita.

Para conocer más sobre lo que ofrece Firebase (así como planes y documentación) visita la documentación

Firebase Cloud Messaging en Android

Vamos a nuestro ejemplo, queremos implementar notificaciones push en nuestra aplicación Android. Iniciamos configurando nuestro entorno de trabajo.

Android Studio y SDK tools:

Necesitamos tener instalada la support Library y Play Services en su versión 30.0.0. Esto es muy fácil de hacer mediante el SDK manager:

Creando el proyecto

Creamos un nuevo proyecto en Android Studio, no importa el nombre de la aplicación pero sí recordaremos el nombre del paquete (lo necesitaremos más adelante). El nivel mínimo de SDK que te recomiendo es el API 15: Android 4.0.3, sin embargo, es compatible desde Android 2.2. Solo necesitamos iniciar con un Empty Activity.

Creando nuestra SHA1-Key

Para autenticar nuestra aplicación con Firebase, necesitamos crear nuestra clave SHA1, y dependiendo de tu sistema de operativo, es el comando que debemos ejecutar en la terminal:

Nos pedirá una contraseña, por defecto es android:

Si todo va bien, obtendremos como resultados las llaves que autentican nuestra aplicación. La que necesitamos es precisamente la que está en SHA1, y que, por motivos de seguridad, jamás debes compartir.

Si tienes alguna duda, te dejo la documentación donde explica como generar estas llaves: https://developers.google.com/android/guides/client-auth

Configurando nuestro proyecto en Firebase

Para darnos de alta en Firebase, solo necesitamos ingresar a https://firebase.google.com/ y autenticarnos con nuestra cuenta de Gmail en donde dice: “Get Started for free”. No te preocupes, no necesitamos ingresar ninguna información bancaria o tarjeta de crédito.

Creamos un nuevo proyecto. El nombre puede ser lo que quiera, pero la región no debe diferir de donde estás, ya que esto permite reducir la latencia de los servicios que consultamos.

Obteniendo nuestro google-services.json

En la siguiente pantalla, podemos obtener el archivo necesario de configuración que necesitamos en nuestra aplicación. Al seleccionar añadir Firebase a nuestra aplicación en Android nos pedirá los 2 datos que obtuvimos anteriormente: El nombre del paquete y nuestro llave SHA1.

Con ello, podemos descargar nuestro archivo google-services.json, además de ver las dependencias que necesitamos:

Por ahora no te preocupes de esto, en un momento agregamos estos elementos a nuestro proyecto en Android Studio.

Agregando nuestras dependencias

Regresamos a nuestro proyecto de Android Studio. Para entender mejor en donde va cada archivo o modificación, cambiamos de la vista normal “android” a la vista de “proyecto”:

Agregamos el siguiente classpath en el archivo build.gradle que se encuentra en la raíz del proyecto:

classpath ‘com.google.gms:google-services:3.0.0’

Ahora, vamos a copiar nuestro archivo google-services.json en la raíz de nuestra aplicación:

También vamos a agregar en ese build.gradle las siguientes dependencias tal como se muestra en la imagen de abajo:

compile ‘com.google.firebase:firebase-core:9.0.0’ compile ‘com.google.firebase:firebase-messaging:9.0.0’

apply plugin: ‘com.google.gms.google-services’

Ejecutamos nuestro proyecto para comprobar que las configuraciones estén bien:

Recibiendo notificaciones

Ahora, vamos a crear una nueva clase MyFirebaseMessagingService, que hereda de FirebaseMessagingService. Ya solo necesitamos sobreescribir el método onMessageReceived para empezar a recibir notificaciones.

Para obtener el cuerpo del mensaje, llamamos al método getBody() de getNotification() y que es parte del remoteMessage que recibimos como parámetro. Log.e sirve para mostrar ese mensaje en la consola.

public classMyFirebaseMessagingServiceextendsFirebaseMessagingService{
   @Override
   public void onMessageReceived(RemoteMessage remoteMessage) {
       Log.e("FIREBASE", remoteMessage.getNotification().getBody());
   }
}

Lo último es configurar ese nuestro servicio en nuestro archivo manifest.xml, debajo de la etiqueta </activity>. La estructura es muy sencilla:

<serviceandroid:name=".MyFirebaseMessagingService"><intent-filter><actionandroid:name="com.google.firebase.MESSAGING_EVENT"/></intent-filter></service>

Donde en android:name=”.MyFirebaseMessagingService ponemos el nombre de nuestra clase anteriormente creada.

![](Donde en android:name=”.MyFirebaseMessagingService ponemos el nombre de nuestra clase anteriormente creada.)

Enviando mensaje desde Firebase

Regresando a la consola de Firebase, notarás que en la parte inferior izquierda existe un apartado de notificaciones:

Creamos un nuevo mensaje:

Puedes ser tan creativo como necesites, mandar la notificación al instante o programarla para cierta hora, inclusive, entre más aplicaciones se instalen, más data de usuarios tenemos a disposición y así podemos fragmentar las notificaciones por idioma, género, tipo de OS, etc.

Enviamos el mensaje y en unos instantes aparecerá en tu dispositivo:

Y listo, tenemos con éxito notificaciones push en nuestra aplicación.

Por último, el repositorio de este tutorial lo encuentras en el siguiente enlace en GitHub