Notificaciones Push usando Firebase desde Java

Las notificaciones son parte esencial de los sistemas móviles. La tecnología push es una forma de comunicación a través de internet en la que la petición de envío tiene origen en el servidor, por oposición a la tecnología pull, en la que la petición tiene origen en el cliente, tal cual concepto lo hemos traído desde Wikipedia.

La tecnología por excelencia para poder hacer llegar mensajes de notificación a los dispositivos Android (el sistema operativo móvil más usado en el mercado) es Firebase, específicamente FCM (Firebase Cloud Message), el sucesor de GCM (Google Cloud Message).

Una parte importante, antes de iniciar es tener una cuenta en Google Cloud, para ello es requerido una tarjeta para el billing, aunque hay gran cantidad de mensajes push que son gratuitos y no te van a cobrar, pero la tarjeta es requerida.

Para crearse una cuenta, debe hacerlo a través de esta dirección de FCM.

El proceso de enviar mensajes a un móvil desde el punto de vista técnico sigue el siguiente flujo:

Pasos:

  1. El dispositivo móvil envía al backend correspondiente el identificador del dispositivo (Este id es generado por la librería de FCM correspondiente a la tecnología con que este programada la aplicación móvil).
  2. Una vez el backend tenga el id del dispositivo indica a FCM que le va enviar un mensaje a ese device Id. En el payload que envía el backend a FCM incluye el id junto con el mensaje.
  3. FCM envía el mensaje al dispositivo.

El paso 1 se realiza una sola vez, al no ser que se reinstale la aplicación.

Creación de un backend para enviar mensajes

Una vez se tenga la aplicación creada en FCM, y las credenciales de Google, que se obtienen desde la consola de FCM indicada en el link de la sección anterior, para crear el backend, usando maven, solo se requiere la dependencia

<dependency>
 <groupId>com.google.firebase</groupId>
 <artifactId>firebase-admin</artifactId>
 <version>${fcm.version}</version>
</dependency>

La versión actual es 6.13, pero puedes siempre buscar la última en el maven.

Una vez tengamos la dependencia incluida el proceso es bastante sencillo, se resumen al siguiente código:

public boolean sendPushViaFirebase(String token) {
Map<String, String> map = new HashMap<>();
map.put("llave", "valor");
        Notification notification = Notification.builder()
                .setTitle("Este es el título")
                .setBody("Este es el mensaje")
                .build();
        Message message = Message.builder()
                .putAllData(map)
                .putData("priority", "high")
                .setToken(token) // deviceId
                .setNotification(notification)
                .build();
        try {
            FirebaseApp firebaseApp = FirebaseApp.initializeApp("nombre-app-fcm");
            String response = FirebaseMessaging.getInstance(firebaseApp).send(message);
            logger.info("Push notification Message sended succesfully. Response {}", response);
            return true;
        } catch (FirebaseMessagingException e) {
          logger.error("Error trying send push notification via firebase to token {}, check details: {}", token, e.getMessage());
        }
        return false;
    }

Lo mas relevante del código anterior es la línea FirebaseApp.initializeApp(“nombre-app-fcm”); en la que debe especificarse el nombre de la app que se ha creado en la consola de FCM. El proceso de crear la aplicación en FCM es todo web, de forma gráfica.

El proceso de enviar las notificaciones lleva tener, del lado del dispositivo móvil una app que reciba las notificaciones y obtenga la información enviada.

Si quieres ver un ejemplo de una app en React Native que lee notificaciones Push puedes ver este ejemplo en GitHub.

Espero te sea útil el artículo.

1 thought on “Notificaciones Push usando Firebase desde Java

  1. Buenas, gracias por la información… Me puede guiar como llenar estos campos map.put(“llave”, “valor”); supongo que los saco de firebase, pero de donde?
    Y también FirebaseApp firebaseApp = FirebaseApp.initializeApp(“nombre-app-fcm”);
    ese es el nombre que se le da al proyecto y que firebase le agrega algo como esto “2d3b4”
    por ejemplo “proyecto-2d3b4”?
    Desde ya gracias

Comments are closed.