Skip to content

Instantly share code, notes, and snippets.

@intelguasoft
Created April 30, 2020 02:15
Show Gist options
  • Save intelguasoft/0a483e3c6a82473fd023c94462393817 to your computer and use it in GitHub Desktop.
Save intelguasoft/0a483e3c6a82473fd023c94462393817 to your computer and use it in GitHub Desktop.
Notificaciones Push de Firebase a Android con NodeJS

Notificaciones Push de Firebase a Android con NodeJS

Entonces, está desarrollando una aplicación móvil y se da cuenta de que necesita una forma de comunicarse con sus usuarios de una manera rápida y rentable. En este punto, estoy seguro de que has pensado en las notificaciones push. Ahí es donde entra Firebase Cloud Messaging (FCM).

Firebase Cloud Messaging (FCM) proporciona una conexión confiable y eficiente de la batería entre su servidor y dispositivos que le permite entregar y recibir mensajes y notificaciones en iOS, Android y la web sin costo alguno. Puedes leer más sobre esto aquí.

Ahora que hemos terminado con la introducción, vamos a sumergirnos en todo este vergueo.

Primero, debe iniciar sesión con su cuenta de Google en firebase. Luego haga clic en el enlace "Ir a la consola" que se encuentra junto al avatar de su cuenta y será redirigido a la consola del tablero de instrumentos, donde podrá ver todos sus proyectos.

Como en este momento no tenemos ningún proyecto, haga clic en "crear un proyecto"

Crear un proyecto

Escriba el nombre del proyecto y acepte los términos y condiciones, continúe con todos los pasos necesarios y, cuando haya terminado, se creará el proyecto y será redirigido al panel de control.


Entonces, ahora que tenemos una cuenta de Firebase, intentemos entender cómo funcionará.

Primero, las notificaciones push de Firebase necesitarán lo siguiente para que funcione correctamente.

  1. Un archivo JSON de configuración que se puede descargar desde la consola. Este archivo contiene los detalles del proyecto requeridos por firebase para la inicialización y la conexión segura a firebase. Veremos cómo generar el archivo en breve.

  2. Un token de registro. Piensa en ello un segundo. Si firebase necesita enviar un mensaje en particular a un dispositivo en particular (en nuestro caso, un dispositivo móvil en particular), entonces debemos informarle a qué dispositivo debe enviar. Ahí es donde entra el token de registro. El token de registro se genera desde la aplicación móvil y se enviará a través de API a nuestro backend NodeJS desde donde enviaremos la notificación real. Sin embargo, dado que en este tutorial no nos centraremos en crear la aplicación móvil, siga este enlace para ver cómo crear la aplicación móvil y obtener el token de registro para su dispositivo, que luego puede enviar a la API para que su dispositivo obtenga las notificaciones.

Archivo JSON de configuración

Para obtener este archivo, vaya a su consola y en el menú verá "Project Overview". Haga clic en el icono de engranaje de configuración justo al lado para revelar un submenú con dos elementos de menú (Project Settings, Users and permissions).

Project Settings

Haga clic en "Project Settings", luego en General. Desplácese hacia abajo hasta la sección "Tus apps". Haga clic en el ícono de Android. Esto nos permitirá registrar la aplicación móvil con firebase.

Token de aplicación

Para registrar la aplicación, complete todos los detalles requeridos y termine. Tenga en cuenta que puede omitir el paso 4 (ejecutar la aplicación para verificar la instalación) utilizando el enlace pequeño (omita este paso). Además, dado que ya agregó Firebase en la aplicación móvil, puede omitir los pasos 2 y 3.

Ahora que ya está hecho, navegue a la pestaña "Cuenta de servicio". En la sección "SDK de administración de Firebase", haga clic en el botón "Generar nueva clave privada" y confirme que desea descargarlo. Nuestro archivo JSON que necesitábamos ahora se creará y descargará. También en el fragmento de muestra de código proporcionado, copie la URL de la base de datos, ya que la necesitaremos en el siguiente paso.

SDK de Administración FCM

Configurando nuestro backend NodeJS

Así que ahora estamos listos en nuestras configuraciones de firebase. Vamos a crear nuestro backend que recibirá una solicitud de API y enviará una notificación real a un dispositivo.

El siguiente paso es instalar una dependencia que necesitaremos para enviar la notificación de Firebase, instalar la dependencia ejecutando npm i firebase-admin en su terminal. Puede encontrar los detalles de dependencia aquí

Ahora estamos bien con las dependencias. Dentro del mismo directorio, cree un archivo de configuración, que usaremos para inicializar firebase en nuestra aplicación. Tu código se verá así:

// firebase-config.js

let admin = require("firebase-admin");

let serviceAccount = require("./notificacion-conf.json");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://sample-project-e1a84.firebaseio.com",
});

module.exports.admin = admin;

Esto es lo que hace el código:

Primero importamos la dependencia que instalamos anteriormente "firebase-admin" y la asignamos a una variable admin.

Luego importamos el archivo JSON que descargamos de nuestra consola anteriormente e inicializamos nuestra aplicación, con la credencial como JSON y la URL de la base de datos que copiamos de nuestra consola anteriormente.

Luego exportamos nuestra variable admin para que podamos usarlo en el archivo que la requira para enviar nuestras notificaciones.

Ahora que hemos configurado Firebase, abramos el archivo que usara dicha configuración que funcionará como nuestro servidor.

El código que nos importa es el siguiente:

// ...
import { admin } from "./firebase-config";

// ...
// ...

const notification_options = {
  priority: "high",
  timeToLive: 60 * 60 * 24,
};

app.post("/firebase/notification", (req, res) => {
  const registrationToken = req.body.registrationToken;
  const message = req.body.message;
  const options = notification_options;

  admin
    .messaging()
    .sendToDevice(registrationToken, message, options)
    .then((response) => {
      res.status(200).send("Notification sent successfully");
    })
    .catch((error) => {
      console.log(error);
    });
});

// ...

Esto es lo que hace el código:

Importamos el valor de administración que exportamos desde nuestro archivo de configuración para firebase.

Luego inicializamos las prioridades para nuestras notificaciones:

  1. priority: “high”: los mensajes de alta prioridad se enviarán de inmediato y las notificaciones remotas se mostrarán sin demora.

  2. timeToLive: 60 * 60 * 24: este es el tiempo que tarda el mensaje en caducar.

A continuación, creamos una solicitud POST en nuestra API utilizando el endpoint "/firebase/notificación". Extraemos el mensaje, el token de registro (recibido de la aplicación móvil) y utilizamos los métodos messaging().sendToDevice() del paquete firebase-admin para enviar nuestra notificación. Pasamos nuestro token de registro, mensaje y opciones como parámetros.

Tenga en cuenta que el mensaje debe estar en el siguiente formato para que la notificación no se muestre como una notificación silenciosa sino como una notificación push real.

const message_notification = {
  notification: {
    title: enter_subject_of_notification_here,
    body: enter_message_here,
  },
};

Luego mostramos la respuesta y registramos el error en caso de que ocurra.

Conclusión

Por lo tanto, hemos creado nuestro propio servidor nodeJS, recibimos el token de registro de la aplicación móvil que realiza la llamada API y enviamos un mensaje personalizado utilizando la mensajería en la nube de Firebase.

¡Todo lo mejor en tu viaje de Firebase!

@intelguasoft
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment