Vue Academy · Lección

Notificaciones push en una PWA de Vue

Push API, Notification API, claves VAPID, suscripción de usuarios y envío desde el servidor

Lección 4 de 413 pasos

Notificaciones push en una PWA de Vue es una lección gratuita de Vue Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Vue Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Vue Academy incluye 4 lecciones en total.

Notificaciones push en una PWA

Web Push permite que su servidor envíe notificaciones a un usuario incluso cuando la aplicación está cerrada. Combina las API Notification y Push con un service worker, y todo ello se basa en el consentimiento explícito del usuario.

Solicitar permiso

Debe solicitar permiso antes de suscribirse. Notification.requestPermission() devuelve una promesa que se resuelve en "granted", "denied" o "default".

const permission = await Notification.requestPermission();
if (permission === "granted") {
  // proceed to subscribe
}

Activar desde una acción del usuario

Los navegadores exigen que el cuadro de solicitud de permiso aparezca después de una acción del usuario, como hacer clic en un botón. Nunca lo solicite al cargar la página: se ignorará o molestará a los usuarios.

<button @click="enableNotifications">
  Enable notifications
</button>

Obtener el registro del service worker

Las suscripciones push se almacenan en el registro del service worker activo. Espere a navigator.serviceWorker.ready para obtenerlo.

const registration = await navigator.serviceWorker.ready;

The applicationServerKey

Push utiliza claves VAPID. El servidor guarda la clave privada; el cliente se suscribe con la clave pública, convertida en un Uint8Array.

function urlBase64ToUint8Array(base64) {
  const padding = "=".repeat((4 - base64.length % 4) % 4);
  const raw = atob((base64 + padding).replace(/-/g, "+").replace(/_/g, "/"));
  return Uint8Array.from([...raw].map((c) => c.charCodeAt(0)));
}

pushManager.subscribe

Suscríbase mediante el pushManager del registro. Establezca userVisibleOnly: true y pase la applicationServerKey convertida.

const subscription = await registration.pushManager.subscribe({
  userVisibleOnly: true,
  applicationServerKey: urlBase64ToUint8Array(VAPID_PUBLIC_KEY)
});

Por qué se usa userVisibleOnly

userVisibleOnly: true garantiza que cada push muestre una notificación visible. Los navegadores lo exigen para evitar el seguimiento silencioso en segundo plano.

Enviar la suscripción a su servidor

El objeto de suscripción contiene el endpoint y las claves que necesita el servidor. Envíelo mediante POST a su backend para almacenarlo y utilizarlo en envíos posteriores.

await fetch("/api/subscribe", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify(subscription)
});

El servidor envía un push

Su backend utiliza una biblioteca de Web Push y la clave privada VAPID para enviar un payload al endpoint almacenado.

// Node backend (web-push library)
webpush.sendNotification(
  subscription,
  JSON.stringify({ title: "Hello", body: "New message" })
);

Recibir push en el service worker

El service worker gestiona el evento push y llama a showNotification para mostrar la notificación.

// service worker
self.addEventListener("push", (event) => {
  const data = event.data.json();
  event.waitUntil(
    self.registration.showNotification(data.title, {
      body: data.body,
      icon: "/pwa-192.png"
    })
  );
});

Gestionar los clics en las notificaciones

Responda a los clics mediante el evento notificationclick para enfocar o abrir la aplicación en la página adecuada.

self.addEventListener("notificationclick", (event) => {
  event.notification.close();
  event.waitUntil(clients.openWindow("/inbox"));
});

Comprobación rápida

¿Por qué se requiere userVisibleOnly: true al suscribirse a push?

Resumen

Web Push comienza con Notification.requestPermission() desde una acción del usuario y continúa con registration.pushManager.subscribe, usando userVisibleOnly: true y una applicationServerKey. Envíe la suscripción a su servidor, que enviará payloads que el service worker recibe en su evento push y muestra mediante showNotification.

Gratis para empezar

Aprende HTML con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
42
Lecciones
156

Preguntas frecuentes

¿La lección «Notificaciones push en una PWA de Vue» es gratis?

Sí — el texto completo de «Notificaciones push en una PWA de Vue» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Vue Academy, actualiza a CoddyKit PRO. El curso de Vue Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Notificaciones push en una PWA de Vue»?

Push API, Notification API, claves VAPID, suscripción de usuarios y envío desde el servidor Practicas Vue Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Vue Academy?

No se requiere experiencia previa. Vue Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Notificaciones push en una PWA de Vue»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Vue Academy?

Sí. Cada lección de Vue Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Configuración de vite-plugin-pwa
  2. Estrategias de Service Worker
  3. Compatibilidad sin conexión y sincronización en segundo plano
  4. Notificaciones push en una PWA de Vue
← Volver a Vue Academy