API Push

Note : Cette fonctionnalité est disponible via les Web Workers.

L'API Push permet aux applications web de recevoir des messages poussés depuis un serveur, que l'application soit active au premier plan, chargée, ou non. Ceci permet de fournir des notifications asynchrones et des alertes/mises à jour pour les personnes qui souhaitent en recevoir, créant l'opportunité d'être au courant rapidement.

Concepts et usages de Push

Attention : Lorsqu'on implémente des abonnements via PushManager, il est primordial de se protéger contre les attaques CSRF/XSRF. Pour plus d'informations, voir les articles suivants :

Pour qu'une application web puisse recevoir des messages push, elle doit disposer d'un service worker actif. Quand le service worker est actif, on peut souscrire aux notifications push en utilisant PushManager.subscribe().

Cet abonnement fournira un objet PushSubscription contenant toutes les informations dont l'application a besoin pour transmettre un message push : un point de terminaison et la clé de chiffrement nécessaire à l'envoi des données.

Le service worker sera alors démarré pour réceptionner les messages push via le gestionnaire d'évènement onpush. Ainsi, l'application peut réagir aux messages push reçus, par exemple en affichant une notification avec ServiceWorkerRegistration.showNotification().

Chaque abonnement est propre à un service worker. Le point d'accès correspondant pour l'abonnement est une URL fonctionnelle (capability URL) unique. Il suffit de connaître ce point d'accès pour envoyer un message à votre application. L'URL du point d'accès doit donc rester secrète, afin d'éviter que d'autres applications puissent envoyer des messages push vers votre application.

L'activation d'un service worker nécessaire à la réception du message push peut accroître l'utilisation des ressources, particulièrement de la batterie. Chaque navigateur adopte une stratégie différente pour gérer cette consommation, sans qu'il y ait actuellement de mécanisme standard. Firefox impose un quota de messages push pouvant être envoyés à une application (cependant, les messages push utilisés pour les notifications sont exempts de cette limite). Le quota est réinitialisé à chaque visite sur le site. Chrome n'impose pas de limite particulière.

Interfaces

PushEvent

Représente une action push envoyée à la portée globale d'un ServiceWorker. Elle contient les informations envoyées depuis le serveur d'application vers l'objet PushSubscription responsable du traitement.

PushManager

Permet de recevoir des notifications de serveurs tiers et de demander les URL pour les notifications push.

PushMessageData

Fournit l'accès aux données transmises par le serveur, incluant des méthodes pour manipuler les données reçues.

PushSubscription

Fournit l'URL de l'abonnement au point d'accès et permet également le désabonnement.

PushSubscriptionOptions

Représente les options associées à l'abonnement.

Ajouts à l'API Service Worker

Les ajouts à l'API Service Worker suivants ont été spécifiés dans l'API Push, pour fournir un point d'entrée à l'utilisation de messages Push pour surveiller et répondre aux évènements de changement liés aux messages Push et aux souscriptions.

ServiceWorkerRegistration.pushManager Lecture seule

Fournit une référence à l'interface une référence de l'interface PushManager permettant de gérer les abonnements push (créer un nouvel abonnement, obtenir l'abonnement existant, connaître l'état des permissions, se désabonner). Il s'agit du point d'entrée vers l'API Push.

onpush

Un gestionnaire d'événement déclenché à chaque évènement push ; c'est-à-dire à chaque message push reçu depuis le serveur.

onpushsubscriptionchange

Un gestionnaire d'événement déclenché à chaque évènement pushsubscriptionchange ; par exemple, quand un abonnement push a été invalidé, ou va l'être (par exemple, quand un service push définit une durée d'expiration).

Exemples

Le livre de recettes pour les service workers contient différents exemples d'utilisation de l'API Push.

Spécifications

Specification
Push API
# pushevent-interface
Push API
# pushmessagedata-interface

Compatibilité des navigateurs

api.PushEvent

BCD tables only load in the browser

api.PushMessageData

BCD tables only load in the browser

Voir aussi