推送 API

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

推送 API 使 Web 應用程式能夠接收來自伺服器推送的訊息,無論 Web 應用是否在前臺執行,甚至是否在使用者代理中載入。這使得開發者能夠向選擇接收通知的使用者傳送非同步通知和更新,從而提高使用者對及時新內容的參與度。

推送概念與用法

警告: 在實現 PushManager 訂閱時,務必保護您的應用免受 CSRF/XSRF 攻擊。有關更多資訊,請參閱以下文章:

要接收推送訊息,應用程式必須有一個活動的 Service Worker。當 Service Worker 處於活動狀態時,它可以使用 PushManager.subscribe() 訂閱推送通知。

生成的 PushSubscription 包含了應用程式傳送推送訊息所需的所有資訊:一個端點和一個用於傳送資料的加密金鑰。

Service Worker 將根據需要啟動以處理傳入的推送訊息,這些訊息會被傳遞到 onpush 事件處理程式。這使得應用程式能夠響應接收到的推送訊息,例如,透過顯示通知(使用 ServiceWorkerRegistration.showNotification())。

每個訂閱都唯一地屬於一個 Service Worker。訂閱的端點是一個唯一的 能力 URL:瞭解端點是向您的應用程式傳送訊息所必需的一切。因此,端點 URL 需要保密,否則其他應用程式可能會向您的應用程式傳送推送訊息。

啟動 Service Worker 以傳遞推送訊息可能會導致資源使用增加,尤其是電池消耗。不同的瀏覽器處理此問題的方式不同,目前沒有標準機制。Firefox 允許嚮應用程式傳送有限數量(配額)的推送訊息,儘管生成通知的推送訊息不受此限制。該限制在每次訪問網站時重新整理。Chrome 沒有限制。

介面

PushEvent

表示一個推送操作,它會發送到 ServiceWorker全域性作用域。它包含從應用程式傳送到 PushSubscription 的資訊。

PushManager

提供了一種接收來自第三方伺服器的通知的方式,以及用於推送通知的請求 URL。

PushMessageData

提供對伺服器傳送的推送資料的訪問,幷包含操作接收資料的方法。

PushSubscription

提供訂閱的 URL 端點,並允許取消訂閱推送服務。

PushSubscriptionOptions

表示與推送訂閱相關的選項。

Service Worker 的補充

推送 API 規範中指定了對 Service Worker API 的以下補充,以提供使用推送訊息的入口點。它們還用於監控和響應推送事件以及訂閱更改事件。

ServiceWorkerRegistration.pushManager 只讀

返回一個指向 PushManager 介面的引用,用於管理推送訂閱,包括訂閱、獲取活動訂閱以及訪問推送許可權狀態。這是使用推送訊息的入口點。

onpush

每當發生 push 事件時(即,每當收到伺服器推送訊息時)觸發的事件處理程式。

onpushsubscriptionchange

每當發生 pushsubscriptionchange 事件時(例如,當推送訂閱無效或即將無效時,例如當推送服務設定了過期時間時)觸發的事件處理程式。

示例

Mozilla 的 ServiceWorker Cookbook 包含許多有用的推送示例。

規範

規範
推送 API
# pushevent-interface
推送 API
# pushmessagedata-interface

瀏覽器相容性

api.PushEvent

api.PushMessageData

另見