PushManager:getSubscription() 方法

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.

安全上下文: 此项功能仅在一些支持的浏览器安全上下文(HTTPS)中可用。

备注: 此特性在 Web Worker 中可用。

PushManager 接口的 PushManager.getSubscription() 方法尝试获取已有的推送订阅。

它返回一个 Promise,其会兑现包含现有订阅的详细信息的 PushSubscription 对象。如果不存在已有的推送订阅,则兑现 null 值。

语法

js
getSubscription()

参数

无。

返回值

一个会兑现为 PushSubscription 对象或 nullPromise

示例

这个代码片段来自推送消息和通知示例。(没有可用的在线演示。)

js
// 我们需要 service worker 注册才能检查订阅
navigator.serviceWorker.ready.then((serviceWorkerRegistration) => {
  // 我们已经有推送消息订阅了吗?
  serviceWorkerRegistration.pushManager
    .getSubscription()
    .then((subscription) => {
      // 启用订阅/取消订阅推送消息的 UI
      const pushButton = document.querySelector(".js-push-button");
      pushButton.disabled = false;

      if (!subscription) {
        // 我们没有订阅推送,因此设置 UI 以允许用户启用推送
        return;
      }

      // 与服务器保持最新的订阅 ID 的同步
      sendSubscriptionToServer(subscription);

      showCurlCommand(subscription);

      // 设置 UI 以显示他们已订阅推送消息
      pushButton.textContent = "禁用消息推送";
      isPushEnabled = true;
    })
    .catch((err) => {
      console.error(`在 getSubscription() 期间遇到错误:${err}`);
    });
});

规范

Specification
Push API
# dom-pushmanager-getsubscription

浏览器兼容性