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
Promisethat resolves to aPushSubscriptionobject containing details of an existing subscription. If no existing subscription exists, this resolves to anullvalue. PushManager.permissionState()- Returns a
Promisethat 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
Promisethat resolves to aPushSubscriptionobject 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
Promisethat resolves to thePushPermissionStatusof 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.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
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
PushManager | Chrome Full support 42 | Edge
Full support
16
| Firefox
Full support
44
| IE No support No | Opera Full support 29 | Safari No support No | WebView Android No support No | Chrome Android Full support 42 | Firefox Android
Full support
48
| Opera Android Full support 29 | Safari iOS No support No | Samsung Internet Android Full support 4.0 |
getSubscription | Chrome Full support 42 | Edge
Full support
16
| Firefox
Full support
44
| IE No support No | Opera Full support 29 | Safari No support No | WebView Android No support No | Chrome Android Full support 42 | Firefox Android
Full support
48
| Opera Android Full support 29 | Safari iOS No support No | Samsung Internet Android Full support 4.0 |
hasPermission | Chrome Full support 42 | Edge
Full support
16
| Firefox
Full support
44
| IE No support No | Opera Full support 29 | Safari No support No | WebView Android No support No | Chrome Android Full support 42 | Firefox Android
Full support
48
| Opera Android Full support 29 | Safari iOS No support No | Samsung Internet Android Full support 4.0 |
permissionState | Chrome Full support 42 | Edge
Full support
16
| Firefox
Full support
44
| IE No support No | Opera Full support 29 | Safari No support No | WebView Android No support No | Chrome Android Full support 42 | Firefox Android
Full support
48
| Opera Android Full support 29 | Safari iOS No support No | Samsung Internet Android Full support 4.0 |
register | Chrome Full support 42 | Edge
Full support
16
| Firefox
Full support
44
| IE No support No | Opera Full support 29 | Safari No support No | WebView Android No support No | Chrome Android Full support 42 | Firefox Android
Full support
48
| Opera Android Full support 29 | Safari iOS No support No | Samsung Internet Android Full support 4.0 |
registrations | Chrome Full support 42 | Edge
Full support
16
| Firefox
Full support
44
| IE No support No | Opera Full support 29 | Safari No support No | WebView Android No support No | Chrome Android Full support 42 | Firefox Android
Full support
48
| Opera Android Full support 29 | Safari iOS No support No | Samsung Internet Android Full support 4.0 |
subscribe | Chrome
Full support
42
| Edge
Full support
16
| Firefox
Full support
44
| IE No support No | Opera Full support 29 | Safari No support No | WebView Android No support No | Chrome Android Full support 42 | Firefox Android
Full support
48
| Opera Android Full support 29 | Safari iOS No support No | Samsung Internet Android Full support 4.0 |
supportedContentEncodings | Chrome Full support 60 | Edge
Full support
16
| Firefox
Full support
44
| IE No support No | Opera Full support 47 | Safari No support No | WebView Android No support No | Chrome Android Full support 60 | Firefox Android
Full support
48
| Opera Android Full support 44 | Safari iOS No support No | Samsung Internet Android Full support 4.0 |
unregister | Chrome Full support 42 | Edge
Full support
16
| Firefox
Full support
44
| IE No support No | Opera Full support 29 | Safari No support No | WebView Android No support No | Chrome Android Full support 42 | Firefox Android
Full support
48
| Opera Android Full support 29 | Safari iOS No support No | Samsung Internet Android Full support 4.0 |
Legend
- Full support
- Full support
- No support
- No support
- Experimental. Expect behavior to change in the future.
- Experimental. Expect behavior to change in the future.
- See implementation notes.
- See implementation notes.
- User must explicitly enable this feature.
- User must explicitly enable this feature.
