Aller au contenu

API Push JavaScript et Notifications

Introduction à l'API Push en JavaScript

L'API Push en JavaScript est un outil essentiel pour les développeurs souhaitant enrichir leurs applications web avec des notifications en temps réel. Cette API, combinée à l'API Service Workers, permet aux applications web de recevoir des messages poussés depuis un serveur, même lorsque l'application n'est pas ouverte dans le navigateur. Cette fonctionnalité est cruciale pour engager les utilisateurs avec des mises à jour opportunes et une communication interactive.

Implémentation des notifications Push

Configuration des Service Workers

Tout d'abord, nous devons enregistrer un service worker qui gère les tâches en arrière-plan pour l'envoi des notifications :


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);
        });
}

Demande d'autorisation pour les notifications

Avant d'envoyer des notifications, il est nécessaire de demander la permission à l'utilisateur :


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>

Abonnement aux notifications Push

Une fois la permission obtenue, l'application peut s'abonner aux notifications 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>

Ce script gère le processus d'abonnement. Il est recommandé de définir explicitement userVisibleOnly: true pour garantir un comportement cohérent entre les navigateurs et se conformer aux normes de confidentialité.

Remarque : Pour la livraison effective des messages, subscribe() nécessite généralement une applicationServerKey (votre clé publique VAPID). La clé privée correspondante est utilisée par votre serveur backend pour s'authentifier auprès du Push Service.

Gestion des messages Push entrants

Pour gérer les messages entrants, le service worker écoute les événements 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);
    });
});

Remarque : La livraison des messages push nécessite un serveur backend pour envoyer des requêtes HTTP au Push Service en utilisant les clés VAPID. Ce tutoriel se concentre sur l'implémentation côté client.

Cet extrait de code fournit un exemple basique de réception, d'affichage et de gestion de l'interaction utilisateur avec les notifications push, qui peut être personnalisé davantage en fonction des besoins de l'application.

Bonnes pratiques pour les notifications Push

  • Engagement utilisateur : Concevez des notifications opportunes, pertinentes et précises.
  • Conformité à la vie privée : Assurez-vous toujours d'obtenir le consentement de l'utilisateur avant d'envoyer des notifications.
  • Performance : Gérez la fréquence et le moment des notifications pour éviter de submerger l'utilisateur.
  • Renouvellement de l'abonnement : Les abonnements push expirent périodiquement. Implémentez une logique côté client pour vérifier le statut de l'abonnement et se réabonner si nécessaire, ou gérez les événements d'expiration depuis le service worker.

Conclusion

L'API Push ouvre un canal d'interaction directe avec les utilisateurs, offrant un outil puissant pour l'engagement. En exploitant cette API, les développeurs peuvent offrir une expérience utilisateur plus dynamique et réactive. Une implémentation appropriée des notifications push peut considérablement améliorer la fonctionnalité et l'attrait des applications web, en gardant les utilisateurs informés et engagés.

Pratique

Quelles sont les capacités et les exigences de l'API Push JavaScript ?

Trouvez-vous cela utile?

Aperçu dual-run — comparez avec les routes Symfony en production.