Push API
========

**Expérimental:** **Cette fonction est expérimentale**  
Puisque cette fonction est toujours en développement dans certains navigateurs, veuillez consulter le tableau de compatibilité pour les préfixes à utiliser selon les navigateurs.  
Il convient de noter qu'une fonctionnalité expérimentale peut voir sa syntaxe ou son comportement modifié dans le futur en fonction des évolutions de la spécification.

L' **API Push** donne aux applications web la possibilité de recevoir des messages qui leur sont poussés depuis un serveur, qu'il s'agisse ou non d'une application active au premier plan, ou même actuellement chargée, sur un agent utilisateur. Ceci permet aux développeurs de délivrer des notifications asynchrones et des mises-à-jour aux utilisateurs qui le choisissent, entrainant un meilleur engagement [de l'utilisateur] avec du nouveau contenu au moment opportun.

**Note :** Cette documentation couvre les spécifications W3C de l'API Push; si vous recherchez la documentation du système propriétaire de Push de Firefox OS, merci de vous reporter à Simple Push.

Concepts et usages de Push
--------------------------

**Attention :** Lors de la mise en œuvre des abonnements PushManager, il est d'une importance vitale de se protéger contre les problèmes de CSRF/XSRF dans votre application. Voir les articles suivants pour plus d'informations :

* Feuille de prévention contre les Cross-Site Request Forgery (CSRF)
* Prévention conte les attaques CSRF et XSRF

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

L'élément `PushSubscription` (en-US) qui en résulte inclut 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 démarré, comme nécessaire, pour réceptionner les messages Push, qui sont délivrés au gestionnaire d'évènement `ServiceWorkerGlobalScope.onpush`. Ceci permet aux applications de réagir au message Push reçu, par exemple en affichant une notification (en utilisant `ServiceWorkerRegistration.showNotification()`.)

Chaque souscription est unique à un service worker. Le point de terminaison de la souscription est une URL fonctionnelle unique: la connaissance du point de terminaison est tout ce qui est nécessaire pour envoyer un message à votre application. L'URL du point de terminaison doit cependant rester secrète, sinon d'autres applications seront capables d'envoyer des messages Push à votre application.

Activer un service worker pour délivrer un message Push peut accroître l'utilisation des ressources, particulièrement de la batterie. Les différents navigateurs ont des régimes différents pour gèrer ça — Il n'y a pas de mécanisme standard. Firefox permet à un nombre limité (quota) de messages Push d'être envoyé à une application, cependant les messages Push qui générent les notifications sont exempts de cette limite. La limite est rafraichie chaque fois que le site est visité. En comparaison, Chrome n'applique pas de limites mais nécessite que chaque message Push lance une notification pour pouvoir être affiché.

**Note :** Comme pour Gecko 44, le quota de messages Push par application n'est pas incrémenté quand une nouvelle notification se lance et qu'une autre est déjà visible, pendant une période de 3 secondes. Cela permet de gèrer le cas où une rafale de messages Push est reçue et qu'ils n'afficheraient pas tous une notification.

**Note :** Chrome nécessite actuellement de configurer un projet sur Google Cloud Messaging pour envoyer des messages Push et utilise le numero du projet associé ainsi que la clé durant l'envoi des messages Push. Il requiert aussi un manifeste applicatif avec des paramètres spéciaux pour utiliser ce service. Nous espérons que cette restriction sera supprimée dans le futur..

Interfaces
----------

`PushEvent`

Représente une action push envoyée à l'élément de portée global (en-US) (global scope) d'un `ServiceWorker`. Elle contient les informations envoyées depuis l'application à un `PushSubscription` (en-US).

`PushManager`

Fournit un moyen de recevoir des notifications de serveurs tiers ainsi que de demander les URL pour les notifications Push. Cette interface remplace les fonctionnalités obsolètes de l'interface `PushRegistrationManager`.

`PushMessageData` (en-US)

Fournit l'accès pour pousser des données transmises par un serveur et inclut des méthodes pour manipuler les données reçues.

`PushSubscription` (en-US)

Fournit une URL de point de terminaison et permet la désinscription à un service Push.

Complément au 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` (en-US) Lecture seule 

Retourne une référence de l'interface `PushManager` pour gèrer les souscriptions push incluant la souscription, récupèrer une souscription existante, et accèder au statut des permissions push. C'est le point d'entrée dans l'utilisation de la communication push.

`ServiceWorkerGlobalScope.onpush`

Un gestionnaire d'événement lancé chaque fois qu'un événement `push` (en-US) se produit ; c'est à chaque fois qu'un message push du serveur est reçu.

`ServiceWorkerGlobalScope.onpushsubscriptionchange`

Un gestionnaire d'événement lancé chaque fois qu'un événement `pushsubscriptionchange` (en-US) se produit; par exemple, quand une souscription push a été invalidée, ou va être invalidée (c.à.d. quand un service push définit une durée d'expiration).

Spécifications
--------------

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

Compatibilité des navigateurs
-----------------------------

### api.PushEvent

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

### api.PushMessageData

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Voir aussi
----------

* Using the Push API [EN] (en-US)
* Démo API Push, sur Github
* Push Notifications on the Open Web, Matt Gaunt
* API Service Worker