Push API - 使 Web 应用程序能够接收从服务器推送给它们的消息

Push API(推送 API)使 Web 应用程序能够接收从服务器推送给它们的消息,无论 Web 应用程序是否在前台,甚至当前是否在用户代理上加载。这让开发人员可以向选择加入的用户提供异步通知和更新,从而使用户更好地参与到及时的新内容中。

推送概念和用法

警告: 在实施 PushManager 订阅时,防止应用程序中的 CSRF/XSRF 问题至关重要。有关详细信息,请参阅以下文章:

对于接收推送消息的应用,它必须有一个活动的服务工作线程。当服务工作线程处于活动状态时,它可以使用 PushManager.subscribe() 订阅推送通知。

PushSubscription 包括应用程序发送推送消息所需的所有信息:端点和发送数据所需的加密密钥。

服务工作线程将根据需要启动以处理传入的推送消息,这些消息被传递到 ServiceWorkerGlobalScope.onpush 事件处理程序。这允许应用程序对收到的推送消息做出反应,例如,显示通知(使用 ServiceWorkerRegistration.showNotification()。)

每个订阅对于服务工作线程都是唯一的。订阅的端点是一个有独特功能的 URL:了解端点的地址是向你的应用程序发送消息的全部必要条件。因此端点 URL 必须保密,否则其他应用程序可能能够向您的应用程序发送推送消息。

激活服务工作线程以传递推送消息可能会导致资源使用量增加,尤其是电池的使用量。不同的浏览器对此有不同的处理方案,目前还没有标准的机制。Firefox 允许向应用程序发送有限数量(配额)的推送消息,但推送消息的生成通知不受此限制。每次访问站点时都会刷新限制。在 Chrome 中没有限制。

接口

PushEvent

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

PushManager

提供一种从第三方服务器接收通知的方法,以及请求推送通知的 URL。

PushMessageData

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

PushSubscription

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

PushSubscriptionOptions

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

服务工作线程的补充

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

ServiceWorkerRegistration.pushManager 只读

返回对 PushManager 接口的引用,用于管理推送订阅,包括订阅、获取活动订阅和访问推送权限状态。这是使用 Push 消息的入口。

ServiceWorkerGlobalScope.onpush

每当发生 push 事件时触发的事件处理程序;也就是说,每当收到服务器推送消息时。

ServiceWorkerGlobalScope.onpushsubscriptionchange

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

实例

Mozilla 的 ServiceWorker Cookbook 包含许多有用的 Push 实例。

规范

规范
Push API

PushEvent

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持42

16

17

441 不支持37 不支持
PushEvent() 构造函数42

16

17

441 不支持37 不支持
data57

16

17

441 不支持44 不支持

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基础支持 不支持42 未知

44

482

未知37 不支持
PushEvent() 构造函数 不支持42 未知

44

482

未知37 不支持
data 不支持57 未知

44

482

未知43 不支持

1. Firefox 78 ESR 之前的扩展支持版本 Extended Support Releases (ESR) 不支持 Service Worker 和 Push API。

2. 默认情况下启用推送。

PushMessageData

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持50≤79441 不支持37 不支持
arrayBuffer50≤79441 不支持37 不支持
blob50≤79441 不支持37 不支持
json50≤79441 不支持37 不支持
text50≤79441 不支持37 不支持

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基础支持 不支持50 未知48 未知37 不支持
arrayBuffer 不支持50 未知48 未知37 不支持
blob 不支持50 未知48 未知37 不支持
json 不支持50 未知48 未知37 不支持
text 不支持50 未知48 未知37 不支持

1. Firefox 78 ESR 之前的扩展支持版本 Extended Support Releases (ESR) 不支持 Service Worker 和 Push API。

相关链接