推播通知常見問題

Matt Gaunt

為什麼瀏覽器關閉時無法推送工作?

這個問題有稍微影響很大,主要是因為某些情境可能很難合理理解,而無法理解。

先從 Android 開始Android 作業系統的設計宗旨是監聽推送訊息,收到訊息時,請喚醒適當的 Android 應用程式來處理推送訊息 (無論應用程式是否關閉)。

這與 Android 的所有瀏覽器相同,瀏覽器會在接收推送訊息時喚醒瀏覽器,接著瀏覽器會喚醒您的服務工作站,並分派推送事件。

電腦版 OS 則較為複雜,且在 Mac OS X 上透過提供視覺化指標說明不同情境時,最簡單的說明方式。

在 Mac OS X 上,您可以在 Dock 中的應用程式圖示下方有標記,判斷程式是否正在執行。

如果您比較下列 Dock 中的兩個 Chrome 圖示,左邊的 Chrome 圖示正在運作中 (如圖示下方的標記所示),而右側的 Chrome 並未執行,因此下方並未顯示標記。

OS X 範例

如果是在電腦上接收推送訊息,當瀏覽器執行時,您會收到訊息,也就是在圖示下方顯示標示。

這表示瀏覽器不會開啟任何視窗,而由於瀏覽器在背景執行,因此您仍會在服務工作站接收推送訊息。

瀏覽器完全關閉 (也就是完全沒有執行 (未標記)) 時,不會收到推送。Windows 也是如此,不過判斷 Chrome 是否在背景執行並不容易。

如何藉由推送,讓主畫面網頁應用程式從全螢幕模式開啟?

在 Chrome for Android 中,網頁應用程式可以新增至主畫面,網頁應用程式開啟時,也能以全螢幕模式啟動,無需使用網址列,如下所示。

「全螢幕」圖示

為了提供一致的體驗,開發人員會希望使用者點選的通知也能以全螢幕模式開啟網頁應用程式。

雖然 Chrome 的「各種類型」實作方式可能並不可靠且難以解釋,相關的導入詳細資料如下:

也就是說,除非使用者定期透過主畫面圖示造訪網站,通知會在一般瀏覽器使用者介面中開啟。

我們會進一步處理這個問題。

為什麼這比網路通訊端更好?

關閉瀏覽器視窗後,即可啟動 Service Worker。Web 通訊端只有在瀏覽器和網頁保持開啟的情況下才會運作。

GCM、FCM、網路推播和 Chrome 有什麼用途?

這個問題有許多面向,而最簡單的解釋方式就是詳細瞭解網頁推送和 Chrome 的記錄。(別擔心,內容很短)。

2014 年 12 月

Chrome 首次實作網路推送時,Chrome 會使用 Google 雲端通訊 (GCM) 驅動從伺服器將推送訊息傳送至瀏覽器的功能。

並非網路推播。基於下列原因,我們提早設定 Chrome 和 GCM 後,並未「實際」透過網路推送。

  • GCM 要求開發人員在 Google Developers Console 建立帳戶。
  • Chrome 和 GCM 需要由網頁應用程式分享特殊的傳送者 ID,才能正確設定訊息功能。
  • GCM 伺服器接受的自訂 API 要求不是網路標準。

2016 年 7 月

7 月時,Google 推出一項網路推送新功能:應用程式伺服器金鑰 (或稱 VAPID,視規格而定)。Chrome 新增對這個新 API 的支援時,會使用 Firebase 雲端通訊 (亦稱為 FCM) 來取代 GCM 做為訊息傳遞服務。這麼做有幾個重要原因:

  • Chrome 和應用程式伺服器金鑰「不需要」透過 Google 或 Firebase 設定任何類型的專案。就是有用。
  • FCM 支援網路推送通訊協定,也是所有網路推送服務支援的 API。這表示無論瀏覽器使用哪種推送服務,只要發出相同的要求,應用程式就會傳送訊息。

為什麼今天很令人困惑?

由於內容是針對網站推送主題撰寫,許多令人感到混淆,其中大部分參照了 GCM 或 FCM。如果內容參照 GCM,建議您將其視為舊內容「或」主要關注 Chrome 的內容。(我在很多舊文章中這麼做是有罪惡感)

相反地,網路推送是包含瀏覽器,瀏覽器會使用推送服務管理收發訊息,推送服務也會接受「網路推送通訊協定」要求。如果您對這些術語,可以忽略該瀏覽器和哪個瀏覽器來推送服務。

本指南主要著重於網路推送標準方法,並刻意忽略任何其他項目。

Firebase 有 JavaScript SDK。目的和原因

發現 Firebase Web SDK 時,發現 Firebase 有適用於 JavaScript 的訊息 API,您可能會好奇,它與網頁推送的差異為何。

訊息 SDK (又稱為 Firebase 雲端通訊 JS SDK) 會在背景執行幾個小訣竅,協助您輕鬆實作網頁推送。

  • 您只需考慮 FCM 權杖 (字串),而無需擔心 PushSubscription 及其各種欄位。
  • 透過每個使用者的權杖,您可以使用專屬的 FCM API 觸發推送訊息。這個 API 不需要加密酬載。您可以在 POST 要求主體中傳送純文字酬載。
  • FCM 的專屬 API 支援自訂功能,例如 FCM Topics (網路也適用,但記錄有誤)。
  • 最後,FCM 支援 Android、iOS 和網路,因此某些團隊更容易在現有專案中進行操作。

這種做法可在幕後使用網頁推播功能,但目標是將其帶離。

如上個問題所述,如果您將網路推送視為瀏覽器和推送服務,則可考慮將 Firebase 中的 Messaging SDK 當做簡化網路推送導入作業的程式庫。

後續步驟

程式碼研究室