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 裝置,如果裝置超過一個月未連上 FCM,FCM 仍會接受訊息,但會立即捨棄。如果裝置在您傳送最後一則資料訊息後的四週內連線,用戶端應用程式會收到 onDeletedMessages()
回呼。
如要進一步瞭解 Android 或 Apple 平台上的訊息傳送情況, 可以使用FCM報表 資訊主頁, 當中會記錄在 Apple 和 Android 裝置上傳送及開啟的訊息數量,以及 Android 應用程式的曝光次數資料。