設定訊息的生命週期

FCM 通常會在訊息傳送後立即傳遞。不過,這不一定可行。舉例來說,裝置可能無法使用,或 FCM 可能會刻意延遲訊息,防止應用程式耗用過多資源,並對電池續航力造成負面影響。

在這種情況下,FCM 會儲存郵件並盡快傳送。在大多數情況下,這不會造成任何影響,但部分應用程式需要立即傳送通知。例如來電通知或活動邀請。

在 Android 和網頁版中,您可以指定訊息的有效期限上限。值必須是 0 到 2,419,200 秒 (28 天) 的時間長度,對應於 FCM 儲存及嘗試傳送訊息的最長時間。根據預設,如果要求不含這個欄位,最長會持續四週。

在 iOS 上,您可以在 ApnsConfig 物件中設定 apns-expiration 標頭。詳情請參閱 Apple 說明文件,瞭解如何傳送通知要求至 APN。

這項功能有以下幾種可能用途:

  • 視訊通訊來電
  • 即將到期的邀請活動
  • 日曆活動

指定訊息生命週期的另一個優點是,FCM 不會對存留時間值為 0 秒的訊息套用可收合訊息節流。請注意,如果 ttl 值為 0,表示系統會捨棄無法立即傳送的訊息。不過,由於這類訊息不會儲存,因此傳送通知訊息的延遲時間最短。

以下是包含 TTL 的要求範例:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    },
    "apns":{
      "headers":{
        "apns-expiration":"1604750400"
      }
    },
    "android":{
      "ttl":"4500s"
    },
    "webpush":{
      "headers":{
        "TTL":"4500"
      }
    }
  }
}

訊息生命週期

應用程式伺服器將訊息發布至 FCM 並收到訊息 ID 時,不代表訊息已傳送至裝置。而是指郵件已獲准傳送。訊息傳送時間取決於多項因素。

如果裝置已連線但處於打盹模式,系統會儲存優先順序較低的訊息 FCM,直到裝置退出打盹模式為止。如果設定了 collapse_key,且現有訊息具有相同的收合鍵和註冊權杖,等待傳送,系統會捨棄舊訊息,並以新訊息取代。不過,如果未設定收合鍵,系統會同時儲存新舊訊息,以便日後傳送。

如果裝置未連上 FCM,系統會儲存訊息,直到建立連線為止。建立連線後,FCM 會將所有待處理訊息傳送至裝置。如果裝置未再次連線,訊息最終會逾時,並從 FCM 儲存空間中捨棄。除非設定 ttl 旗標,否則預設逾時時間為四週。如果 FCM 嘗試將訊息傳送至裝置時,應用程式已解除安裝,FCM 會立即捨棄該訊息,並將註冊權杖失效。日後嘗試傳送訊息至該裝置時,會導致 NotRegistered 錯誤。

如果 Android 裝置超過一個月未連線至 FCM,FCM 仍會接受訊息,但會立即捨棄。如果裝置在您傳送最後一則資料訊息後的四週內連線,用戶端應用程式會收到 onDeletedMessages() 回呼。

如要進一步瞭解 Android 或 Apple 平台上的訊息傳送情況,可以使用FCM報表資訊主頁,當中會記錄在 Apple 和 Android 裝置上傳送及開啟的訊息數量,以及 Android 應用程式的曝光次數資料。