PushManager

Baseline 广泛可用 *

此功能已成熟,并可在许多设备和浏览器版本上运行。自 2023 年 3 月以来,它已在各种浏览器中可用。

* 此特性的某些部分可能存在不同级别的支持。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

注意:此功能在 Web Workers 中可用。

PushManager 接口是 Push API 的一部分,它提供了一种接收第三方服务器通知以及请求推送通知 URL 的方法。

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

静态属性

PushManager.supportedContentEncodings

返回一个数组,其中包含可用于加密推送消息载荷(payload)的受支持的内容编码。

实例方法

PushManager.getSubscription()

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

PushManager.permissionState()

返回一个 Promise,该 Promise 解析为当前 PushManager 的权限状态,该状态将是 'granted''denied''prompt' 之一。

PushManager.subscribe()

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

已废弃的方法

PushManager.hasPermission() 已弃用 非标准

返回一个 Promise,该 Promise 解析为请求的 Web 应用程序的 PushPermissionStatus,该状态将是 granteddenieddefault 之一。已被 PushManager.permissionState() 替换。

PushManager.register() 已弃用 非标准

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

PushManager.registrations() 已弃用 非标准

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

PushManager.unregister() 已弃用 非标准

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

示例

js
this.onpush = (event) => {
  console.log(event.data);
  // From here we can write the data to IndexedDB, send it to any open
  // windows, display a notification, etc.
};

navigator.serviceWorker
  .register("serviceworker.js")
  .then((serviceWorkerRegistration) => {
    serviceWorkerRegistration.pushManager.subscribe().then(
      (pushSubscription) => {
        console.log(pushSubscription.endpoint);
        // The push subscription details needed by the application
        // server are now available, and can be sent to it using,
        // for example, the fetch() API.
      },
      (error) => {
        console.error(error);
      },
    );
  });

规范

规范
推送 API
# pushmanager-interface

浏览器兼容性

另见