PushManager - 接收来自第三方服务器的通知,以及请求 URL 以获得推送通知

这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。

PushManagerPush API 的接口,提供了一种来接收来自第三方服务器的通知,以及请求 URL 以获得推送通知的方法。

可通过 ServiceWorkerRegistration.pushManager 属性访问此接口。

注意:此接口取代了过时的 PushRegistrationManager 接口以前提供的功能。

属性

PushManager.supportedContentEncodings

返回支持的内容编码的数组,这些内容可用于加密推送消息的内容。

方法

PushManager.getSubscription()

检索现有的推送订阅。它返回一个 Promise 对象,该对象解析为包含现有订阅详细信息的 PushSubscription 对象。如果不存在现有订阅,则解析为 null 值。

PushManager.permissionState()

返回一个 Promise,它解析为当前 PushManager 的许可状态,该状态将是 'granted''denied''prompt'

PushManager.subscribe()

订阅推送服务。它返回一个 Promise 对象,该对象解析为包含推送订阅详细信息的 PushSubscription 对象。如果当前服务工作者没有现有的订阅,则会创建一个新的推送订阅。

废弃的方法

PushManager.hasPermission()

返回一个 Promise,它解析为发出请求的 Web 应用程序的 PushPermissionStatus,值是 granteddenieddefault 之一。被替换为 PushManager.permissionState()

PushManager.register()

订阅推送订阅。被替换为 PushManager.subscribe()

PushManager.registrations()

检索现有的推送订阅。被替换为 PushManager.getSubscription()

PushManager.unregister()

注销并删除指定的订阅端点。在更新的 API 中,通过调用 PushSubscription.unsubscribe() 方法取消注册订阅。

实例

this.onpush = function(event) {
  console.log(event.data);
  // 从这里我们可以将数据写入 IndexedDB,将其发送到任何打开的窗口,显示通知等。
}

navigator.serviceWorker.register('serviceworker.js').then(
  function(serviceWorkerRegistration) {
    serviceWorkerRegistration.pushManager.subscribe().then(
      function(pushSubscription) {
        console.log(pushSubscription.endpoint);
        // 应用服务器所需的推送订阅详细信息现在可用,并且可以发送给它,例如使用 XMLHttpRequest。
      }, function(error) {
        // 在开发过程中,通常将错误记录到控制台。在生产环境中,也可能将有关错误的信息报告回应用服务器。
        console.log(error);
      }
    );
  });

规范

规范 状态 备注
Push API
PushManager 的定义
工作草案 初始定义。

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持42

16

17

441 不支持29 不支持
getSubscription42

16

17

441 不支持29 不支持
hasPermission42

16

17

441 不支持29 不支持
permissionState42

16

17

441 不支持29 不支持
register42

16

17

441 不支持29 不支持
registrations42

16

17

441 不支持29 不支持
subscribe423

16

17

441 不支持29 不支持
supportedContentEncodings60

16

17

441 不支持47 不支持
unregister42

16

17

441 不支持29 不支持

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基础支持 不支持42 未知482 未知29 不支持
getSubscription 不支持42 未知482 未知29 不支持
hasPermission 不支持42 未知482 未知29 不支持
permissionState 不支持42 未知482 未知29 不支持
register 不支持42 未知482 未知29 不支持
registrations 不支持42 未知482 未知29 不支持
subscribe 不支持42 未知482 未知29 不支持
supportedContentEncodings 不支持60 未知482 未知44 不支持
unregister 不支持42 未知482 未知29 不支持

1. 在 Firefox 45 和 52 扩展支持版本(ESR)中,服务 worker(和 Push)已被禁用。

2. Push enabled by default.

3. options 参数的 applicationServerKey 必须有值。

相关链接