Implementación de Notificaciones en Blog con Firebase

Clase 29 de 32Curso de Firebase 5 para Web

Resumen

Integra notificaciones push en la web con seguridad y claridad. Aquí verás cómo activar Firebase Cloud Messaging (FCM) en un blog: agregar el script de messaging, configurar el manifest, registrar el service worker, pedir permisos, obtener el token y guardarlo en Firestore. Todo basado en la implementación mostrada, con pasos concretos y código práctico.

¿Cómo habilitar Firebase Cloud Messaging en la app web?

Para que tu aplicación web pueda recibir notificaciones, primero debes habilitar los servicios de messaging y preparar el entorno: script del SDK, archivo de service worker y manifest.json en la raíz del proyecto. Así el navegador y Firebase sabrán cómo gestionar mensajes en segundo plano.

  • Agrega el script de messaging en el index.
  • Crea el service worker con los imports necesarios.
  • Define el archivo manifest.json y enlázalo en el head.
  • Recuerda: el service worker permite ejecutar funciones en background, incluso sin la página abierta.

¿Qué script de messaging se agrega en el index?

Copia desde la documentación oficial el script de messaging y añádelo después de inicializar Firebase.

<!-- En index.html -->
<script src="URL_DE_FIREBASE_MESSAGING_JS"></script>

¿Qué incluye el archivo manifest.json para FCM?

El manifest expone metadatos de la app al navegador. Para messaging, añade el campo de remitente y no cambies su valor.

{
  "name": "Tu app",
  "gcm_sender_id": "NO_CAMBIAR_ESTE_NUMERO"
}

Enlázalo en el head del index:

<link rel="manifest" href="/manifest.json" />

¿Qué debe contener el service worker para notificaciones?

Crea notificaciones-sw.js en la raíz y carga los scripts globales que necesita el service worker para ejecutar funciones de messaging en background.

// notificaciones-sw.js
importScripts('URL_DE_FIREBASE_APP_JS');
importScripts('URL_DE_FIREBASE_MESSAGING_JS');

¿Cómo registrar el service worker y asociarlo a Messaging?

Debes registrar el service worker desde tu archivo JS principal y decirle a Firebase Messaging que lo use. Así, cuando lleguen notificaciones, se procesarán en background con el archivo indicado.

  • Registra el service worker con navigator.serviceWorker.register.
  • Indica a firebase.messaging() que use ese service worker con useServiceWorker.
  • Maneja la promesa: imprime confirmación o error en consola.

¿Cómo se registra el service worker en el navegador?

// general.js
if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/notificaciones-sw.js')
    .then(reg => {
      const messaging = firebase.messaging();
      messaging.useServiceWorker(reg);
      console.log('Service worker registrado.');
    })
    .catch(err => console.error('Error al registrar el service worker.', err));
}

Antes de solicitar permisos, registra las credenciales web de FCM (clave pública VAPID) para asociar los mensajes a tu proyecto.

const messaging = firebase.messaging();
messaging.usePublicVapidKey('TU_PUBLIC_VAPID_KEY');

¿Cómo solicitar permisos, obtener el token y guardarlo en Firestore?

Cuando el usuario entra a la app, solicita permiso para notificaciones. Si acepta, obtén el token del dispositivo y guárdalo en Firestore dentro de una colección de tokens. Esa arquitectura permite enviar notificaciones a todos los tokens registrados.

  • Pide permiso con requestPermission y confirma en consola.
  • Obtén el token con getToken.
  • Guarda el token en la colección "tokens" con id igual al token.
  • Configura Firestore con timestampsInSnapshots y maneja errores.

¿Cómo se piden permisos y se obtiene el token?

messaging.requestPermission()
  .then(() => {
    console.log('Permiso otorgado.');
    return messaging.getToken();
  })
  .then(token => {
    // Aquí ya tienes el token.
    // Guardar en Firestore (ver siguiente bloque).
  })
  .catch(err => {
    console.error('Error al solicitar permisos u obtener el token.', err);
  });

¿Cómo se guarda el token en Firestore?

const db = firebase.firestore();
db.settings({ timestampsInSnapshots: true });

function guardarToken(token) {
  return db
    .collection('tokens')
    .doc(token)
    .set({ token })
    .catch(err => {
      console.error('Error al insertar el token en la base de datos.', err);
    });
}

Habilidades y conceptos reforzados: configuración de service worker para background, definición de manifest y metadatos, uso de Firebase Cloud Messaging, manejo de promesas en JavaScript, registro de credenciales con usePublicVapidKey, solicitud de permisos del navegador, gestión de tokens y persistencia en Firestore con control de errores.

¿Tienes dudas sobre algún paso o te gustaría ver el manejo de notificaciones recibidas en background? Deja un comentario y cuéntame qué parte quieres profundizar.

      Implementación de Notificaciones en Blog con Firebase