[mensaje-curso]
Firebase Cloud Messaging (FCM) es sin duda otro de los servicios estrella que nos ofrece la plataforma Firebase. Es posible que hayáis oído hablar de este servicio con otros nombres, como mensajería en la nube o mensajería push, pero todos se refieren a lo mismo. Incluso puede que os suene el servicio Google Cloud Messaging (GCM), que no es más que la «versión anterior» de este servicio de mensajería de Google, recientemente trasladado a la plataforma Firebase.
Si has llegado hasta aquí quiero suponer que ya sabes en qué consiste un servicio de este tipo, pero aún así voy a intentar describirlo muy brevemente. Firebase Cloud Messaging permite el envío de mensajes entre un servidor de aplicaciones en la nube y un dispositivo Android (en nuestro caso particular , aunque también podría ser iOS o Web). Aunque en la actualidad también soporta el envío de mensajes en sentido ascendente (desde el dispositivo hacia el servidor), son los mensajes descendentes, de servidor a cliente, los que más nos van a interesar. Estos mensajes nos van a permitir implementar funcionalidades de todo tipo, por ejemplo el envío de notificaciones de usuario a un dispositivo o grupo de dispositivos, o el envío de notificaciones internas (no visibles para el usuario) para «avisar» a nuestra aplicación de que tiene nueva información disponible para descargar. Por ejemplo esto último es muy interesante para evitar que nuestras aplicaciones deban estar constantemente accediendo a la red para comprobar si hay nueva información disponible y así reducir enormemente el gasto de energía.
Durante los próximos artículos iremos descubriendo poco a poco las distintas posibilidades que nos ofrece Firebase Cloud Messaging. En este primer artículo veremos los primeros pasos a seguir, la creación de un proyecto muy sencillo en Android Studio, y enviaremos nuestro primer mensaje.
Al igual que ocurría con muchos de los servicios de Google Play Services o con la base de datos de Firebase que ya conocemos, antes de ponernos a trabajar en nuestro proyecto de Android Studio tendremos dirigirnos a la consola de desarrolladores, en esta ocasión la Consola de Firebase, para crear y configurar el nuevo proyecto y asociar a él nuestra aplicación.
Si es la primera vez que accedemos a la consola de Firebase, nos aparecerá un mensaje de bienvenida que directamente nos invita a empezar a crear un nuevo proyecto.
Si pulsamos la opción de «CREAR NUEVO PROYECTO» el sistema nos solicitará un nombre identificativo y la región a la que perteneces.
Con estos simples datos quedaría creado el nuevo proyecto de Firebase. El siguiente paso será asociar una aplicación a dicho proyecto, en nuestro caso una aplicación Android, para lo que pulsaremos en la opción correspondiente a dicho sistema.
Esto iniciará un pequeño asistente donde se nos solicitarán algunos datos que ya deberían sonarnos de artículos anteriores. Tendremos que indicar el paquete java principal de nuestra aplicación Android, yo usaré net.sgoliver.android.fcm, y la huella digital SHA-1 del certificado con el que se firmará la aplicación, en principio usaremos como siempre la correspondiente al certificado de pruebas (tienes más información sobre cómo obtener este dato por ejemplo en el primer artículo sobre mapas), pero recuerda cambiarlo por el certificado de producción si subes tu aplicación a Google Play.
En el segundo paso podrás descargar un fichero de configuración, en formato JSON, que tendremos que añadir a la aplicación Android una vez creemos el proyecto en Android Studio. Al pulsar el botón CONTINUAR se descargará el fichero, más adelante veremos qué hacer con él (aunque ya hicimos algo muy similar cuando tratamos el tema de autenticación mediante Google Sign-In).
En el tercer y último paso se ofrecen una serie de indicaciones sobre cómo configurar todas las dependencias necesarias en el proyecto de Android Studio. Esto lo veremos más adelante, por lo que ya podemos FINALIZAR el asistente.
Con esto ya tendríamos configurado todo lo necesario en la consola de Firebase. En este momento deberíamos estar viendo tanto nuestro proyecto (en la parte superior izquierda) como nuestra aplicación Android asociada (en la parte central). No debemos confundir una entidad con otra. Un mismo proyecto de Firebase puede tener asociadas varias aplicaciones, que además pueden ser de Sistemas distintos (Android, IOS o Web).
Finalizados todos los preparativos en la consola de Firebase, podemos disponernos ya a crear nuestro proyecto en Android Studio. Crearemos un proyecto estándar, con API mínima 15 y utilizando la plantilla Empty Activity.
Creado el proyecto lo primero que vamos a hacer es colocar el fichero de configuración «google-services.json» que hemos descargado antes en su ubicación correcta. Debemos copiarlo a la carpeta «/app» situada dentro de la carpeta de nuestro proyecto. En mi caso particular he llamado al proyecto «android-fcm-1», por lo que el fichero de configuración debe ir colocado en la carpeta «\android-fcm-1\app».
El siguiente paso será añadir todas las dependencias necesarias a nuestros ficheros build.gradle. Tendremos que modificar tanto el fichero build.gradle situado a nivel de proyecto, como el de nuestro módulo principal (¿no sabes cuáles son estos ficheros? Consúltalo aquí).
Empezaremos por el build.gradle de proyecto. Aquí tendremos que añadir a la sección de dependencias la referencia al plugin de Google Play Services para Gradle.
buildscript { repositories { jcenter() } dependencies { //... classpath 'com.google.gms:google-services:3.0.0' } }
Por su parte, en el build.gradle del módulo principal, tendremos por un lado que aplicar dicho plugin al final del fichero, y por otro añadir la referencia a los servicios de Firebase que vayamos a utilizar. En nuestro caso utilizaremos la funcionalidad de mensajería en la nube o Firebase Cloud Messaging (FCM), por lo que añadiremos tan solo su librería correspondiente (puedes consultar el listado completo de librerías disponibles en la documentación oficial).
//... dependencies { //... compile 'com.google.firebase:firebase-messaging:9.8.0' } apply plugin: 'com.google.gms.google-services'
Después de modificar cada fichero de Gradle recordad que es necesario sincronizar los cambios con el proyecto. Para ello, podemos utilizar la opción «Sync Now» que aparece en la zona superior derecha del editor cuando modificamos cualquier fichero de configuración de Gradle.
Y listo, ya está todo, hemos terminado…
… Bueno, vale, no hemos terminado aún, quedan muchas cosas por explicar, pero lo sorprendente del asunto es que sólo con lo que acabamos de hacer, y sin escribir aún ni una sola línea de código, ya seríamos capaces de enviar notificaciones sencillas a nuestra aplicación. ¿No os lo creéis? Veamos cómo hacerlo.
Quienes recuerden la anterior versión de los servicios de notificaciones push (Google Cloud Messaging o GCM) sabrán que para el envío de mensajes debíamos construir por nosotros mismos una aplicación web que corriera sobre un servidor de aplicaciones independiente al de la mensajería de Google, y que contuviera la lógica necesaria para dicha tarea. Aunque con la mudanza de estos servicios a la plataforma de Firebase esto sigue siendo válido, y de hecho será lo normal (más adelante lo veremos), Firebase también nos ofrece en su propia consola una utilidad que nos permite el envío de mensajes sin necesidad de implementar ninguna aplicación adicional. Podemos acceder a dicha utilidad entrando en la consola y pulsando la opción de «Notifications» del menú lateral.
Si es la primera vez que accedemos a esta opción, nos aparecerá una breve descripción de la utilidad de esta herramienta y un botón para comenzar a configurar y enviar notificaciones.
Si pulsamos el botón de «ENVIA TU PRIMER MENSAJE» acccderemos al formulario de envío, donde se nos solicitarán una serie de datos. En primer lugar introduciremos el texto de la notificación y un identificador interno que nos podrá servir posteriormente para diferencias los distintos mensajes que enviemos. También podremos elegir entre enviar el mensaje inmediatamente o programarlo para algún otro momento.
La siguiente opción que podremos elegir será a quién enviar el mensaje, pudiendo seleccionar entre enviarlo a un usuario determinado, a un tema, o a un segmento de usuarios. Por ahora, dado que aún no sabemos lo que es un tema ni sabemos identificar dispositivos concretos, dejaremos seleccionada la opción de «Segmento de usuarios», más adelante hablaremos de las otras dos opciones. Y dado que hemos seleccionado la opción de segmento, tendremos que indicar qué condiciones deberán cumplirse para determinar los usuarios que deben recibir el mensaje. Para este primer ejemplo no nos complicaremos y seleccionaremos todos los usuarios cuya aplicación se corresponda con nuestra aplicación.
El resto de opciones del formulario nos permiten dar un título a la notificación, añadir datos personalizados al mensaje, cambiar la prioridad, habilitar el sonido, o asignarle una fecha de caducidad, pero por ahora las dejaremos con sus valores por defecto.
Pues bien, configurado el mensaje ya solo nos quedaría pulsar «ENVIAR MENSAJE», pero antes debemos tener instalada nuestra aplicación. Mi recomendación es este caso es que la aplicación se pruebe en un dispositivo real, y no en el emulador, ya que de este modo deben aparecer menos problemas. Ejecutaremos la aplicación desde Android Studio y, esto es importante, NO debemos dejarla ejecutándose en primer plano. Para ello podemos pulsar el botón Atrás o Home del dispositivo para que simplemente no aparezca en pantalla. Más adelante explicaremos por qué es esto necesario (por el momento).
Ahora sí podemos enviar el mensaje pulsando el botón «ENVIAR MENSAJE», y tras una pantalla de confirmación/revisión del mensaje éste se enviará a todos los dispositivos con nuestra aplicación instalada.
Si todo ha ido bien, debería llegar casi de inmediato a nuestro dispositivo la notificación enviada:
Si desplegamos la bandeja del sistema podremos ver el mensaje que hemos configurado (como título de la notificación aparece por defecto el nombre de la aplicación, en mi caso «Firebase CM«):
Finalmente, si pulsamos sobre la notificación, el comportamiento por defecto del sistema será abrir nuestra aplicación de forma que aparezca en primer plano.
¿No os parece fantástico todo esto teniendo en cuenta que aún no hemos escrito nada de código? Sin duda lo es, pero tampoco debemos engañarnos, hemos encontrado varias limitaciones por el camino, entre las más destacables:
- No hemos podido enviar mensajes a usuarios concretos. Ya sabemos que la opción existe en la consola, pero ¿como identificamos a cada usuario?
- Si la aplicación Android hubiera estado en primer plano en el momento de enviar el mensaje la notificación no habría aparecido en la barra de estado ni en la bandeja del sistema.
- Si hubiéramos añadido datos personalizados al mensaje éstos no habrían aparecido por ningún sitio, tan sólo veríamos el título y el texto de la notificación.
- Para el envío de mensajes hemos utilizado la consola de Firebase, que aunque útil y práctica, no deja de ser una utilidad independiente y de terceros no integrada con nuestro sistema.
En los próximos artículos iremos viendo poco a poco cómo resolver todos estos problemas o limitaciones.
Puedes consultar y/o descargar el código completo de los ejemplos desarrollados en este artículo accediendo a la página del curso en GitHub.
[mensaje-curso]
11 comentarios
Excelente!
Hola, excelente guía como cada una de las que publican.
Tengo inconvenientes, si bien la notificación llega el «Texto del mensaje» no aparece.
Saludos y gracias!
[…] En este nuevo artículo sobre notificaciones push con Firebase Cloud Messaging (FCM) vamos a intentar dar solución a algunos de los problemas o limitaciones que encontramos al final del capítulo anterior. […]
[…] Firebase Cloud Messaging en Android (1) [Diciembre 2016] […]
[…] los artículos anteriores ya hemos resuelto dos de los problemas planteados en el primer capítulo. Por un lado hemos aprendido a identificar usuarios individuales para poder dirigir mensajes a […]
Excelente aportación, habrás resuelto como enviar notificaciones sin la consola a un dispositivo especifico?
Excelente! solo una pregunta, ¿en emulador es normal que no llegue la notificación?
hola me gustaria saber cual es el limite de notificaciones para la cuenta gratuita, ya sea para un dispositivo o todos los dispositivos, el total de notificaciones gratis. ya revise los planes de firebase pero no entendi mucho. gracias
Hola, tengo una pregunta, ya he subido la app a play store, pero el certificado hasta ahora veo que existe uno de producción, de razón nunca me funcionaba el mapa cuando era descargado de play store, por lo que lo solucioné con un mapa modo web, pero ahora le quiero agregar firebase a esta app y quiero saber si puedo cambiar la huella digital a la de producción y que despues de esto permita actualizar a los usuarios?
hola, tengo una pregunta sobre la manera de implementar el firebase para notificaciones internas,
tendras algun link o informacion de como hacer ese precedimiento?
[…] Revisa : Notificaciones Push en Android: Firebase Cloud Messaging […]