PushManager

基线 2023

新可用

2023 年 3 月起,此功能可在最新的设备和浏览器版本中使用。此功能可能在较旧的设备或浏览器中无法使用。

安全上下文:此功能仅在安全上下文(HTTPS)中可用,在某些或所有支持的浏览器中。

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

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

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

静态属性

PushManager.supportedContentEncodings

返回一个支持的内容编码数组,可用于加密推送消息的有效负载。

实例方法

PushManager.getSubscription()

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

PushManager.permissionState()

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

PushManager.subscribe()

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

已弃用的方法

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);
      },
    );
  });

规范

规范
Push API
# pushmanager-interface

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅