Saltar al contenido

API Push y notificaciones en JavaScript

Introducción a la API Push en JavaScript

La API Push en JavaScript es una herramienta esencial para los desarrolladores que buscan mejorar las aplicaciones web con notificaciones en tiempo real. Esta API, combinada con la API de Service Workers, permite que las aplicaciones web reciban mensajes enviados desde un servidor, incluso cuando la aplicación web no está abierta en el navegador. Esta funcionalidad es crucial para captar la atención de los usuarios con actualizaciones oportunas y comunicación interactiva.

Implementación de notificaciones push

Configuración de Service Workers

Primero, necesitamos registrar un service worker que se encargue de las tareas en segundo plano de enviar notificaciones:


javascript
// Registering a service worker
if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('/service-worker.js')
        .then(function(registration) {
            console.log('Service Worker registered with scope:', registration.scope);
        }).catch(function(error) {
            console.log('Service Worker registration failed:', error);
        });
}

Solicitar permiso para las notificaciones

Antes de enviar notificaciones, es necesario solicitar permiso al usuario:


html
<button id="enable-notif-btn">Enable Notifications</button>
<script>
    // Asking user permission for notifications
    function requestPermission() {
        Notification.requestPermission().then(function(permission) {
            console.log('Notification permission:', permission);
        });
    }
    document.getElementById('enable-notif-btn').addEventListener('click', requestPermission);
</script>

Suscribirse a notificaciones push

Después de obtener el permiso, la aplicación puede suscribirse a las notificaciones push:


html
<button id="subscribe-btn">Subscribe to Push Notifications</button>
<script>
    function subscribeToPush() {
        navigator.serviceWorker.ready.then(function(registration) {
            // Modern browsers require userVisibleOnly: true to prevent background-only subscriptions
            registration.pushManager.subscribe({
                userVisibleOnly: true,
                applicationServerKey: 'YOUR_VAPID_PUBLIC_KEY' // Replace with your actual VAPID public key
            })
            .then(function(subscription) {
                console.log('Push subscription:', subscription);
            }).catch(function(error) {
                console.log('Failed to subscribe to push:', error);
            });
        });
    }
    document.getElementById('subscribe-btn').addEventListener('click', subscribeToPush);
</script>

Este script gestiona el proceso de suscripción. Se recomienda establecer explícitamente userVisibleOnly: true para garantizar un comportamiento coherente entre navegadores y cumplir con los estándares de privacidad.

Nota: Para la entrega real de mensajes, subscribe() normalmente requiere un applicationServerKey (tu clave pública VAPID). La clave privada correspondiente es utilizada por tu servidor backend para autenticarse con el Push Service.

Gestión de mensajes push entrantes

Para gestionar los mensajes entrantes, el service worker escucha los eventos push:


javascript
// Inside service-worker.js
self.addEventListener('push', function(event) {
    var options = {
        body: 'New notification.',
        icon: 'icon.png',
        vibrate: [100, 50, 100],
        data: { primaryKey: 1 }
    };

    event.waitUntil(
        self.registration.showNotification('Push Notification', options)
    );
});

self.addEventListener('notificationclick', function(event) {
    event.notification.close();
    event.waitUntil(
        clients.openWindow('https://example.com')
    );
});

self.addEventListener('pushsubscriptionchange', function(event) {
    console.log('Subscription changed, re-subscribing...');
    // Re-subscribe using the same parameters
    event.registration.pushManager.subscribe({
        userVisibleOnly: true,
        applicationServerKey: 'YOUR_VAPID_PUBLIC_KEY'
    }).then(function(newSubscription) {
        console.log('Re-subscribed:', newSubscription);
    }).catch(function(error) {
        console.error('Re-subscription failed:', error);
    });
});

Nota: La entrega de mensajes push requiere un servidor backend para enviar solicitudes HTTP al Push Service usando claves VAPID. Este tutorial se centra en la implementación del lado del cliente.

Este fragmento de código proporciona un ejemplo básico de recepción, visualización y gestión de la interacción del usuario con notificaciones push, que puede personalizarse aún más según los requisitos de la aplicación.

Mejores prácticas para las notificaciones push

  • Participación del usuario: Diseña las notificaciones para que sean oportunas, relevantes y precisas.
  • Cumplimiento de la privacidad: Asegúrate siempre de obtener el consentimiento del usuario antes de enviar notificaciones.
  • Rendimiento: Gestiona la frecuencia y el momento de las notificaciones para evitar abrumar al usuario.
  • Renovación de la suscripción: Las suscripciones push expiran periódicamente. Implementa lógica del lado del cliente para comprobar el estado de la suscripción y volver a suscribirse cuando sea necesario, o gestiona los eventos de expiración desde el service worker.

Conclusión

La API Push abre un canal de interacción directa con los usuarios, proporcionando una herramienta potente para la participación. Al aprovechar esta API, los desarrolladores pueden ofrecer una experiencia de usuario más dinámica y receptiva. Una implementación adecuada de las notificaciones push puede mejorar significativamente la funcionalidad y el atractivo de las aplicaciones web, manteniendo a los usuarios informados y comprometidos.

Practice

What are the capabilities and requirements of the JavaScript Push API?

¿Te resulta útil?

Vista previa dual-run — compárala con las rutas Symfony en producción.