PushManager

Experimental

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

Push API 的PushManager接口提供了从第三方服务器接收消息通知的能力。

可以通过ServiceWorkerRegistration.pushManager属性获得

注意: 这个属性替代了已被废弃的PushRegistrationManager (en-US)

Properties

None.

Methods

PushManager.getSubscription()
用于获取已经存在的push订阅。返回一个Promise,这个Promise包装着push订阅信息的PushSubscription (en-US)对象。如果没有已经存在的订阅,则返回null
PushManager.permissionState() (en-US)
返回一个Promise,标识这当前PushManager的权限状态,只能是'granted''denied' ,'prompt'中的一种。
PushManager.subscribe()
向push服务器(即第三方push server)发起订阅。返回一个Promise,这个Promise包装着push订阅信息的PushSubscription (en-US)对象。如果当前的service worke没有已经存在的订阅,则会创建一个新的push订阅。

已废弃的方法

PushManager.hasPermission() (en-US) This deprecated API should no longer be used, but will probably still work.
(已废弃)返回一个Promise,标识着该webapp的PushPermissionStatus状态,该状态只能是'granted''denied' ,'default'中的一种。目前已经被PushManager.permissionState() (en-US)取代。
PushManager.register() (en-US) This deprecated API should no longer be used, but will probably still work.
(已废弃)发起注册push订阅。目前已经被PushManager.subscribe()取代。
PushManager.registrations() (en-US) This deprecated API should no longer be used, but will probably still work.
(已废弃)返回已存在的push订阅信息。目前已经被PushManager.getSubscription()取代。
PushManager.unregister() (en-US) This deprecated API should no longer be used, but will probably still work.
(已废弃)取消注册并删除指定的注册信息。在更新后的API中,请使用 PushSubscription.unsubscribe() (en-US)方法取消注册。

示例

this.onpush = function(event) {
  console.log(event.data);
  // 这里我们可以将数据写入IndexedDB,发送给其他window对象,或者显示一个通知
}

navigator.serviceWorker.register('serviceworker.js').then(
  function(serviceWorkerRegistration) {
    serviceWorkerRegistration.pushManager.subscribe().then(
      function(pushSubscription) {
        console.log(pushSubscription.subscriptionId);
        console.log(pushSubscription.endpoint);
        // 现在我们已经获取到了服务器需要的push订阅信息,我们可以使用XHR将它们发送给服务器
      }, function(error) {
        // 在开发环境下打印错误是很有帮助的。在生产环境下,将错误上报到服务器也是十分必要的
        console.log(error);
      }
    );
  });

Specifications

Specification Status Comment
Push API
PushManager
Working Draft Initial definition.

Browser compatibility

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help! (en-US)
Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 42.0 44.0 (44.0)[1] 未实现 ? 未实现
Feature Android Android Webview Firefox Mobile (Gecko) Firefox OS IE Mobile Opera Mobile Safari Mobile Chrome for Android
Basic support 未实现 未实现 48.0 (48)[2] 未实现 未实现 未实现 未实现 42.0

See also