推送 API

注意:此功能在 Web Workers 中可用。

推送 API 使 Web 应用程序能够接收来自服务器推送的消息,无论 Web 应用是否在前台运行,甚至是否在用户代理中加载。这使得开发者能够向选择接收通知的用户发送异步通知和更新,从而提高用户对及时新内容的参与度。

推送概念与用法

警告: 在实现 PushManager 订阅时,务必保护您的应用免受 CSRF/XSRF 攻击。有关更多信息,请参阅以下文章:

要接收推送消息,应用程序必须有一个活动的 Service Worker。当 Service Worker 处于活动状态时,它可以使用 PushManager.subscribe() 订阅推送通知。

生成的 PushSubscription 包含了应用程序发送推送消息所需的所有信息:一个端点和一个用于发送数据的加密密钥。

Service Worker 将根据需要启动以处理传入的推送消息,这些消息会被传递到 onpush 事件处理程序。这使得应用程序能够响应接收到的推送消息,例如,通过显示通知(使用 ServiceWorkerRegistration.showNotification())。

每个订阅都唯一地属于一个 Service Worker。订阅的端点是一个唯一的 能力 URL:了解端点是向您的应用程序发送消息所必需的一切。因此,端点 URL 需要保密,否则其他应用程序可能会向您的应用程序发送推送消息。

启动 Service Worker 以传递推送消息可能会导致资源使用增加,尤其是电池消耗。不同的浏览器处理此问题的方式不同,目前没有标准机制。Firefox 允许向应用程序发送有限数量(配额)的推送消息,尽管生成通知的推送消息不受此限制。该限制在每次访问网站时刷新。Chrome 没有限制。

接口

PushEvent

表示一个推送操作,它会发送到 ServiceWorker全局作用域。它包含从应用程序发送到 PushSubscription 的信息。

PushManager

提供了一种接收来自第三方服务器的通知的方式,以及用于推送通知的请求 URL。

PushMessageData

提供对服务器发送的推送数据的访问,并包含操作接收数据的方法。

PushSubscription

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

PushSubscriptionOptions

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

Service Worker 的补充

推送 API 规范中指定了对 Service Worker API 的以下补充,以提供使用推送消息的入口点。它们还用于监控和响应推送事件以及订阅更改事件。

ServiceWorkerRegistration.pushManager 只读

返回一个指向 PushManager 接口的引用,用于管理推送订阅,包括订阅、获取活动订阅以及访问推送权限状态。这是使用推送消息的入口点。

onpush

每当发生 push 事件时(即,每当收到服务器推送消息时)触发的事件处理程序。

onpushsubscriptionchange

每当发生 pushsubscriptionchange 事件时(例如,当推送订阅无效或即将无效时,例如当推送服务设置了过期时间时)触发的事件处理程序。

示例

Mozilla 的 ServiceWorker Cookbook 包含许多有用的推送示例。

规范

规范
推送 API
# pushevent-interface
推送 API
# pushmessagedata-interface

浏览器兼容性

api.PushEvent

api.PushMessageData

另见