為什麼在瀏覽器關閉時,推送功能無法運作?
這個問題經常出現,主要是因為有幾種情況難以推理和理解。
我們先從 Android 開始。Android 作業系統的設計目的是聆聽推播訊息,並在收到推播訊息時喚醒適當的 Android 應用程式,以便處理推播訊息,無論應用程式是否已關閉皆然。
這與 Android 上的任何瀏覽器完全相同,瀏覽器會在收到推播訊息時喚醒,然後喚醒服務工作者並調度推播事件。
在桌面作業系統上,情況就比較複雜,在 Mac OS X 上說明最容易,因為有視覺指標可協助說明各種情況。
在 Mac OS X 上,您可以透過 Dock 中應用程式圖示下方的標記,判斷程式是否正在執行。
請比較下方 Dock 中的兩個 Chrome 圖示,左側的圖示正在執行,圖示下方有標記可供參考;右側的 Chrome 則未執行,因此下方沒有標記。

在電腦上接收推播訊息時,您會在瀏覽器執行時收到訊息,也就是在圖示下方有標記時。
也就是說,瀏覽器可以沒有任何開啟的視窗,但您仍會在服務工作站中收到推播訊息,因為瀏覽器會在背景執行。
只有在瀏覽器完全關閉 (即完全未執行,沒有標記) 時,才不會收到推播。同樣適用於 Windows,但判斷 Chrome 是否在背景執行的難度較高。
如何讓主畫面網頁應用程式在接收推播時以全螢幕模式開啟?
在 Chrome 適用於 Android 的版本中,您可以將網頁應用程式新增至主畫面,並在從主畫面開啟網頁應用程式時,以不含網址列的全螢幕模式啟動,如以下所示。

為了維持一致的體驗,開發人員希望點選通知時,系統也能以全螢幕模式開啟網頁應用程式。
Chrome 「大致上」實作了這項功能,但您可能會發現這項功能不穩定且難以推理。相關實作詳細資料如下:
也就是說,除非使用者經常透過主畫面圖示造訪您的網站,否則通知會在一般瀏覽器 UI 中開啟。
我們會進一步處理這個問題。
為什麼這比 WebSocket 更好?
瀏覽器視窗關閉時,Service Worker 可啟動。只要瀏覽器和網頁保持開啟狀態,網路通訊端連線就會持續運作。
GCM、FCM、Web Push 和 Chrome 之間的關係為何?
這個問題有許多面向,最簡單的解釋方式就是逐步說明網路推播和 Chrome 的歷史。(別擔心,很短)。
2014 年 12 月
當 Chrome 首次實作網頁推送功能時,Chrome 會使用 Google Cloud Messaging (GCM) 將推送訊息從伺服器傳送至瀏覽器。
這不是網頁推送。這項 Chrome 和 GCM 的早期設定並非「真實」的網頁推播,原因有幾個。
- GCM 要求開發人員在 Google 開發人員管理中心設定帳戶。
- Chrome 和 GCM 需要由網頁應用程式共用特殊寄件者 ID,才能正確設定訊息。
- GCM 伺服器接受非網路標準的自訂 API 要求。
2016 年 7 月
今年 7 月,網頁推送功能推出了新功能:應用程式伺服器金鑰 (或 VAPID,這是規格名稱)。Chrome 新增支援這項新 API 時,會使用 Firebase 雲端通訊 (又稱為 FCM) 而非 GCM 做為訊息服務。這麼做有幾個重要原因:
- Chrome 和應用程式伺服器金鑰不需要透過 Google 或 Firebase 設定任何專案。就能正常運作。
- FCM 支援網路推播通訊協定,這是所有網路推播服務都會支援的 API。也就是說,無論瀏覽器使用哪種推播服務,只要您提出相同類型的要求,系統就會傳送訊息。
為什麼今天會造成混淆?
目前有許多關於網頁推播主題的內容,其中大多參照 GCM 或 FCM,如果內容參照 GCM,您應該將其視為舊內容或過度著重 Chrome 的跡象。(我曾在許多舊文中這樣做,因此感到很不好意思)。
請改為將網路推播視為由瀏覽器組成,該瀏覽器會使用推播服務來管理傳送和接收訊息,而推播服務會接受「網路推播通訊協定」要求。只要您能掌握這些概念,就能忽略使用哪個瀏覽器和推播服務,直接開始工作。
本指南著重於說明網路推送的標準做法,並刻意忽略其他內容。
Firebase 提供 JavaScript SDK。原因和目的
如果您發現 Firebase 網頁 SDK 有 JavaScript 訊息 API,可能會想知道它與網頁推播有何不同。
訊息 SDK (稱為 Firebase Cloud Messaging JS SDK) 會在幕後執行一些技巧,讓您更輕鬆地導入網頁推播功能。
- 您不必擔心
PushSubscription
及其各種欄位,只需擔心 FCM 權杖 (字串)。 - 您可以使用每位使用者的權杖,透過專屬的 FCM API 觸發推播訊息。這個 API 不需要加密酬載。您可以在 POST 要求主體中傳送純文字酬載。
- FCM 的專屬 API 支援自訂功能,例如 FCM 主題 (雖然說明文件不完整,但也適用於網頁)。
- 最後,FCM 支援 Android、iOS 和網頁,因此部分團隊可更輕鬆地在現有專案中使用。
這項功能會在幕後使用 Web Push,但其目標是將這項功能抽象化。
如同我在上一題所述,如果您將網頁推播視為瀏覽器和推播服務,那麼您可以將 Firebase 中的 Messaging SDK 視為程式庫,簡化網頁推播的實作方式。
後續步驟
- 網路推播通知總覽
- 推播的運作方式
- 訂閱使用者
- 權限使用者體驗
- 使用 Web Push 程式庫傳送訊息
- Web Push 通訊協定
- 處理推播事件
- 顯示通知
- 通知行為
- 常見的通知模式
- 推播通知常見問題
- 常見問題和回報錯誤