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 應用程式的曝光次數資料。