推送 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
加载中…