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

瀏覽器相容性

另見