PushManager.subscribe()

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.

实验性: 这是一项实验性技术
在将其用于生产之前,请仔细检查浏览器兼容性表格

PushManagersubscribe() 接口订阅了一个推送服务。

返回一个 Promise 形式的 PushSubscription 对象,该对象包含了推送订阅详情。如果当前 service worker 没有已存在的订阅,则会创建一个新的推送订阅。

语法

js
subscribe(options)

参数

options 可选

一个包含可选配置参数的对象。包含以下属性:

  • userVisibleOnly: 布尔值,表示返回的推送订阅将只能被用于对用户可见的消息。
  • applicationServerKey:推送服务器用来向客户端应用发送消息的公钥。该值是应用程序服务器生成的签名密钥对的一部分,可使用在 P-256 曲线上实现的椭圆曲线数字签名(ECDSA)。可以是DOMStringArrayBuffer

返回值

返回 PushSubscription 对象的 Promise

示例

js
this.onpush = function (event) {
  console.log(event.data);
  // 这里可以向 IndexDB 写入数据,向任何打开的窗口发送数据以及显示通知等
};

navigator.serviceWorker
  .register("serviceworker.js")
  .then(function (serviceWorkerRegistration) {
    var options = {
      userVisibleOnly: true,
      applicationServerKey: applicationServerKey,
    };
    serviceWorkerRegistration.pushManager.subscribe(options).then(
      function (pushSubscription) {
        console.log(pushSubscription.endpoint);
        // 应用服务器所需的推送订阅详情现在可用,并且可以通过如 XMLHttpRequest 的方式发送
      },
      function (error) {
        // 开发过程中将错误打印到控制台通常很有帮助。同样,生产环境下将错误信息发送至应用服务器后台也一样。
        console.log(error);
      },
    );
  });

规范

Specification
Push API
# dom-pushmanager-subscribe

浏览器兼容性

BCD tables only load in the browser

参见