設定訊息的生命週期

FCM 通常會在郵件傳送後立即傳送。不過,有時可能無法這麼做。舉例來說,裝置可能無法使用,或 FCM 可能刻意延遲傳送訊息,避免應用程式耗用過多資源,對電池續航力造成負面影響。

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

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

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

這項功能可能用途如下:

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

指定訊息生命週期的另一個優點是,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 裝置,如果裝置超過一個月未連上 FCMFCM 仍會接受訊息,但會立即捨棄。如果裝置在您傳送最後一則資料訊息後的四週內連線,用戶端應用程式會收到 onDeletedMessages() 回呼。

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