推送 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
載入中…