推播通知不管對 App 或是網站來說都是一種重新吸引用戶來使用 App 的方法,所以目標是即使網站、App 關閉時也要能在背景接收推播。推播的目的是為了增加 engagement,在行銷領域中 engagement 這個常見的指標就是指用戶在網站或 APP 上的互動程度或者參與度。
因為主要是想在背景接受推播,所以實作上是基於可以背景執行的 Service Worker 來協助相關邏輯撰寫。
那實際上就是分成推送和接收兩方面,在網站中推送和通知使用不同但互補的 API:
實現推送的三個關鍵步驟是:
底下連結提供基本的推播示範:
https://linyencheng-push-notification.herokuapp.com/
前端在實作概念上主要是四個步驟:
PushSubscription
需要的所有相關訊息,這裡可以把 PushSubscription
當成用戶的 ID在實作後端的時候會遇到三個問題:
收到訂閱通知的請求時,將請求內容驗證後就將消息推播到瀏覽器,若是瀏覽器離線,訊息就會排隊儲存起來等連線恢復後繼續傳送
瀏覽器會依照符合 IETF 標準的推播協議實作,伺服器原則上就是使用套件只要提供一個 endpoint 並且處理 PushSubscription 即可。
API 提供了一種向裝置發送訊息的方法
只要從伺服器發了推播消息,推播服務會將訊息保留,直到發生以下事件之一:
當推播服務成功推播後,瀏覽器會:
透過 Service Worker 瀏覽器可以在不打開頁面的情況下去監聽相關事件,所以 App 在 Service Worker 收到 "推播" 事件後,就可以執行任何背景的任務,像是偷偷傳送分析資料、離線快取資源下載、顯示通知等等。