PushManager
        
        
          
                Baseline
                
                  Widely available
                
                 *
              
        
        
        
          
                
              
                
              
                
              
        
        
      
      This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2023年3月.
* Some parts of this feature may have varying levels of support.
Push API 的PushManager接口提供了从第三方服务器接收消息通知的能力。
可以通过 ServiceWorkerRegistration.pushManager 属性获得
备注:这个属性替代了已被废弃的PushRegistrationManager
Properties
None.
Methods
- PushManager.getSubscription()
- 
用于获取已经存在的 push 订阅。返回一个 Promise,这个Promise包装着 push 订阅信息的PushSubscription对象。如果没有已经存在的订阅,则返回null。
- PushManager.permissionState()
- 
返回一个 Promise,标识这当前PushManager的权限状态,只能是'granted','denied','prompt'中的一种。
- PushManager.subscribe()
- 
向 push 服务器(即第三方 push server)发起订阅。返回一个 Promise,这个Promise包装着 push 订阅信息的PushSubscription对象。如果当前的 service worke 没有已经存在的订阅,则会创建一个新的 push 订阅。
已废弃的方法
- PushManager.hasPermission()已弃用
- 
(已废弃)返回一个 Promise,标识着该 webapp 的PushPermissionStatus状态,该状态只能是'granted','denied','default'中的一种。目前已经被PushManager.permissionState()取代。
- PushManager.register()已弃用
- 
(已废弃)发起注册 push 订阅。目前已经被 PushManager.subscribe()取代。
- PushManager.registrations()已弃用
- 
(已废弃)返回已存在的 push 订阅信息。目前已经被 PushManager.getSubscription()取代。
- PushManager.unregister()已弃用
- 
(已废弃)取消注册并删除指定的注册信息。在更新后的 API 中,请使用 PushSubscription.unsubscribe()方法取消注册。
示例
this. (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 | 
|---|
| Push API> # pushmanager-interface> | 
Browser compatibility
Loading…