This is an experimental technology
Check the Browser compatibility table carefully before using this in production.
The PushManager
interface of the Push API provides a way to receive notifications from third-party servers as well as request URLs for push notifications.
This interface is accessed via the ServiceWorkerRegistration.pushManager
property.
Note: This interface replaces functionality previously offered by the obsolete PushRegistrationManager
interface.
Properties
PushManager.supportedContentEncodings
- Returns an array of supported content codings that can be used to encrypt the payload of a push message.
Methods
PushManager.getSubscription()
- Retrieves an existing push subscription. It returns a
Promise
that resolves to aPushSubscription
object containing details of an existing subscription. If no existing subscription exists, this resolves to anull
value. PushManager.permissionState()
- Returns a
Promise
that resolves to the permission state of the currentPushManager
, which will be one of'granted'
,'denied'
, or'prompt'
. PushManager.subscribe()
- Subscribes to a push service. It returns a
Promise
that resolves to aPushSubscription
object containing details of a push subscription. A new push subscription is created if the current service worker does not have an existing subscription.
Deprecated methods
PushManager.hasPermission()
- Returns a
Promise
that resolves to thePushPermissionStatus
of the requesting webapp, which will be one ofgranted
,denied
, ordefault
. Replaced byPushManager.permissionState()
. PushManager.register()
- Subscribes to a push subscription. Replaced by
PushManager.subscribe()
. PushManager.registrations()
- Retrieves existing push subscriptions. Replaced by
PushManager.getSubscription()
. PushManager.unregister()
- Unregisters and deletes a specified subscription endpoint. In the updated API, a subscription is unregistered by calling the
PushSubscription.unsubscribe()
method.
Example
this.onpush = function(event) { console.log(event.data); // From here we can write the data to IndexedDB, send it to any open // windows, display a notification, etc. } navigator.serviceWorker.register('serviceworker.js').then( function(serviceWorkerRegistration) { serviceWorkerRegistration.pushManager.subscribe().then( function(pushSubscription) { console.log(pushSubscription.subscriptionId); console.log(pushSubscription.endpoint); // The push subscription details needed by the application // server are now available, and can be sent to it using, // for example, an XMLHttpRequest. }, function(error) { // During development it often helps to log errors to the // console. In a production environment it might make sense to // also report information about errors back to the // application server. console.log(error); } ); });
Specifications
Specification | Status | Comment |
---|---|---|
Push API The definition of 'PushManager' in that specification. |
Working Draft | Initial definition. |
Browser compatibility
Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|---|
Basic support | 42 | (Yes) | 44.0 (44.0)[1] | No support | 29 | No support |
supportedContentEncodings property |
60 | (Yes) | ? | No support | 47 | No support |
Feature | Android Webview | Chrome for Android | Edge | Firefox Mobile (Gecko) | Firefox OS | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|---|---|
Basic support | 42 | 42 | (Yes) | 48.0 (48)[2] | No support | No support | 29 | No support |
supportedContentEncodings property |
60 | 60 | (Yes) | ? | No support | No support | 47 | No support |
- [1] Push (and Service Workers) have been disabled in the Firefox 45 and 52 Extended Support Releases (ESR.)
- [2] Push has been enabled by default on Firefox for Android version 48.