Push API

Baseline 2023

Newly available

Since March 2023, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

Push API 给与了 Web 应用程序接收从服务器发出的推送消息的能力,无论 Web 应用程序是否在用户设备前台,甚至刚加载完成。这样,开发人员就可以向用户投放异步通知和更新,从而让用户能更及时地获取新内容。

Push 的概念及用法

警告: 在实现 PushManager 订阅时,请确保你的应用程序免受 CSRF/XSRF(跨站请求伪造)问题。参见以下的文章以了解更多信息:

对于一个应用来说,要想要接收到推送消息,需要有一个激活的 service worker。当 service worker 处于激活状态时,可以使用 PushManager.subscribe() 来订阅推送通知。

返回的 PushSubscription (en-US) 包含了有关应用需要发送的推送消息的所有信息:端点及发送数据需要的加密密钥。

Service worker 会在必要的时候启动并接收传入的推送消息,将其传递给 onpush (en-US) 事件处理器。该方法允许应用程序在接收到推送消息时作出反应,例如显示一条通知(使用 ServiceWorkerRegistration.showNotification())。

每一个订阅对 service worker 来说都是唯一的。同时订阅的端点也是一个唯一的功能性 URL:端点的信息是给应用发送信息的全部必要条件。所以端点地址需要保密,否则其他应用也可以向你的应用推送消息。

激活一个 service worker 来提供推送消息会导致资源消耗的增加,尤其是电池。不同的浏览器对此有不同的方案——目前为止还没有标准的机制。Firefox 允许对发送给应用的推送消息做数量限制(配额),但生成通知的推送消息不受此限制。该限制会在站点每一次被访问之后刷新。相比之下,Chrome 选择不作限制。

接口

PushEvent (en-US)

表示发送到 ServiceWorker 全局全局作用域的推送操作。它包含了从应用程序发送到 PushSubscription (en-US) 的消息。

PushManager

提供一种从第三方服务器接收通知和用于推送通知的请求 URL 的方法。

PushMessageData (en-US)

提供对服务器发送的推送数据的访问,包括在接收数据时对数据进行操作的方法。

PushSubscription (en-US)

提供一个订阅的端点 URL,并允许取消推送服务的订阅。

PushSubscriptionOptions (en-US)

表示与推送订阅相关联的选项。

Service worker 附加的内容

以下附加到 Service Worker API 的内容已在 Push API 规范中定义,以提供使用推送消息的入口点。它们用于监听和响应推送和订阅改变的事件。

ServiceWorkerRegistration.pushManager 只读

返回对 PushManager 接口的一个引用,该接口用于管理 push 订阅,包括:订阅、获取一个活跃的订阅、获取 push 权限的状态。这是使用接收推送消息能力的入口点。

onpush (en-US)

一个在 push (en-US) 事件被触发时(即收到服务器的推送消息时)的事件处理器。

onpushsubscriptionchange (en-US)

一个在 pushsubscriptionchange (en-US) 事件被触发时(例如,推送服务器设置了过期时间,因而造成推送订阅已经或即将失效)的事件处理器。

示例

Mozilla 的 ServiceWorker Cookbook 中包含了许多关于 Push 有用的示例。

规范

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

浏览器兼容性

api.PushEvent

BCD tables only load in the browser

api.PushMessageData

BCD tables only load in the browser

参见