PushManager

Baseline 2023

Newly available

Since March 2023, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

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

可以通过 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()方法取消注册。

示例

js
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
Push API
# pushmanager-interface

Browser compatibility

BCD tables only load in the browser

See also