Push API

这是 实验性技术
检查 浏览器兼容性表格 在生产中使用这之前。

Push API gives web applications the ability to receive messages pushed to them from a server, whether or not the web app is in the foreground, or even currently loaded, on a user agent. This lets developers deliver asynchronous notifications and updates to users that opt in, resulting in better engagement with timely new content.

Push concepts and usage

When implementing PushManager subscriptions, it is vitally important that you protect against CSRF/XSRF issues in your app. See the following articles for more information:

For an app to receive push messages, it has to have an active service worker . When the service worker is active, it can subscribe to push notifications, using PushManager.subscribe() .

结果 PushSubscription includes all the information that the application needs to send a push message: an endpoint and the encryption key needed for sending data.

The service worker will be started as necessary to handle incoming push messages, which are delivered to the ServiceWorkerGlobalScope.onpush event handler. This allows apps to react to push messages being received, for example, by displaying a notification (using ServiceWorkerRegistration.showNotification() .)

Each subscription is unique to a service worker.  The endpoint for the subscription is a unique capability URL : knowledge of the endpoint is all that is necessary to send a message to your application. The endpoint URL therefore needs to be kept secret, or other applications might be able to send push messages to your application.

Activating a service worker to deliver a push message can result in increased resource usage, particularly of the battery. Different browsers have different schemes for handling this, there is currently no standard mechanism. Firefox allows a limited number (quota) of push messages to be sent to an application, although Push messages that generate notifications are exempt from this limit. The limit is refreshed each time the site is visited. In comparison, Chrome applies no limit, but requires that every push message causes a notification to be displayed.

注意 : As of Gecko 44, the allowed quota of push messages per application is not incremented when a new notification fires, when another is still visible, for a period of three seconds. This handles cases where a burst of Push messages is received, and not all generate a visible notification.

注意 : Chrome versions earlier than 52 require you to set up a project on Google Cloud Messaging to send push messages, and use the associated project number and API key when sending push notifications. It also requires an app manifest, with some special parameters to use this service.

接口

PushEvent
Represents a push action, sent to the global scope of a ServiceWorker . It contains information sent from an application to a PushSubscription .
PushManager
Provides a way to receive notifications from third-party servers, as well as request URLs for push notifications. This interface has replaced the functionality offered by the obsolete PushRegistrationManager 接口。
PushMessageData
Provides access to push data sent by a server, and includes methods to manipulate the received data.
PushSubscription
Provides a subcription's URL endpoint, and allows unsubscription from a push service.

Service worker additions

The following additions to the Service Worker API have been specified in the Push API spec to provide an entry point for using Push messages. They also monitor and respond to push and subscription change events.

ServiceWorkerRegistration.pushManager 只读
Returns a reference to the PushManager interface for managing push subscriptions including subscribing, getting an active subscription, and accessing push permission status. This is the entry point into using Push messaging.
ServiceWorkerGlobalScope.onpush
An event handler fired whenever a push event occurs; that is, whenever a server push message is received.
ServiceWorkerGlobalScope.onpushsubscriptionchange
An event handler fired whenever a pushsubscriptionchange event occurs; for example, when a push subscription has been invalidated, or is about to be invalidated (e.g. when a push service sets an expiration time.)

范例

Mozilla's ServiceWorker Cookbook contains many useful Push examples.

规范

规范 状态 Comment
Push API 工作草案 初始定义

浏览器兼容性

PushEvent

更新 GitHub 上的兼容性数据
Desktop Mobile
Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome for Android Firefox for Android Opera for Android Safari on iOS Samsung Internet
PushEvent
Chrome 42 Edge 16
Disabled
16
Disabled
Disabled From version 16: this feature is behind the Enable service workers preference.
17
Firefox 44
44
注意事项
注意事项 Extended Support Releases (ESR) before Firefox 78 ESR do not support service workers and the Push API.
IE 不支持 No Opera 37 Safari 不支持 No WebView Android 不支持 No Chrome Android 42 Firefox Android 44
44
48
注意事项
注意事项 Push enabled by default.
Opera Android 37 Safari iOS 不支持 No Samsung Internet Android 4.0
PushEvent() 构造函数
Chrome 42 Edge 16
Disabled
16
Disabled
Disabled From version 16: this feature is behind the Enable service workers preference.
17
Firefox 44
44
注意事项
注意事项 Extended Support Releases (ESR) before Firefox 78 ESR do not support service workers and the Push API.
IE 不支持 No Opera 37 Safari 不支持 No WebView Android 不支持 No Chrome Android 42 Firefox Android 44
44
48
注意事项
注意事项 Push enabled by default.
Opera Android 37 Safari iOS 不支持 No Samsung Internet Android 4.0
data
Chrome 57 Edge 16
Disabled
16
Disabled
Disabled From version 16: this feature is behind the Enable service workers preference.
17
Firefox 44
44
注意事项
注意事项 Extended Support Releases (ESR) before Firefox 78 ESR do not support service workers and the Push API.
IE 不支持 No Opera 44 Safari 不支持 No WebView Android 不支持 No Chrome Android 57 Firefox Android 44
44
48
注意事项
注意事项 Push enabled by default.
Opera Android 43 Safari iOS 不支持 No Samsung Internet Android 4.0

图例

完整支持
完整支持
不支持
不支持
实验。期望将来行为有所改变。
实验。期望将来行为有所改变。
见实现注意事项。
见实现注意事项。
用户必须明确启用此特征。
用户必须明确启用此特征。

PushMessageData

更新 GitHub 上的兼容性数据
Desktop Mobile
Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome for Android Firefox for Android Opera for Android Safari on iOS Samsung Internet
PushMessageData
Chrome 50 Edge ≤79 Firefox 44
44
注意事项
注意事项 Extended Support Releases (ESR) before Firefox 78 ESR do not support service workers and the Push API.
IE 不支持 No Opera 37 Safari 不支持 No WebView Android 不支持 No Chrome Android 50 Firefox Android 48 Opera Android 37 Safari iOS 不支持 No Samsung Internet Android 5.0
arrayBuffer
Chrome 50 Edge ≤79 Firefox 44
44
注意事项
注意事项 Extended Support Releases (ESR) before Firefox 78 ESR do not support service workers and the Push API.
IE 不支持 No Opera 37 Safari 不支持 No WebView Android 不支持 No Chrome Android 50 Firefox Android 48 Opera Android 37 Safari iOS 不支持 No Samsung Internet Android 5.0
blob
Chrome 50 Edge ≤79 Firefox 44
44
注意事项
注意事项 Extended Support Releases (ESR) before Firefox 78 ESR do not support service workers and the Push API.
IE 不支持 No Opera 37 Safari 不支持 No WebView Android 不支持 No Chrome Android 50 Firefox Android 48 Opera Android 37 Safari iOS 不支持 No Samsung Internet Android 5.0
json
Chrome 50 Edge ≤79 Firefox 44
44
注意事项
注意事项 Extended Support Releases (ESR) before Firefox 78 ESR do not support service workers and the Push API.
IE 不支持 No Opera 37 Safari 不支持 No WebView Android 不支持 No Chrome Android 50 Firefox Android 48 Opera Android 37 Safari iOS 不支持 No Samsung Internet Android 5.0
text
Chrome 50 Edge ≤79 Firefox 44
44
注意事项
注意事项 Extended Support Releases (ESR) before Firefox 78 ESR do not support service workers and the Push API.
IE 不支持 No Opera 37 Safari 不支持 No WebView Android 不支持 No Chrome Android 50 Firefox Android 48 Opera Android 37 Safari iOS 不支持 No Samsung Internet Android 5.0

图例

完整支持
不支持
不支持
实验。期望将来行为有所改变。
实验。期望将来行为有所改变。
见实现注意事项。
见实现注意事项。

另请参阅