2

Firebase Cloud Messaging上游消息(從設備到服務器的消息)的文檔描述瞭如果設備處於脫機狀態,消息如何排隊以供傳遞。FCM上游消息傳遞的可靠性如何?

Android

在情況下,該裝置是離線或FCM服務不可用上游消息轉發到服務器,Android客戶端應用程序實例也可以在最大20個未決消息的累積。

iOS

的FCM客戶端庫緩存上的客戶端應用程序的消息,並且當客戶端具有活動服務器連接發送它。

但是如果應用程序在消息傳遞之前關閉,怎麼樣?一旦連接恢復,Firebase是否嘗試使用任何類型的後臺服務來傳遞此類消息?或者他們排隊等到應用程序下次打開,還是完全丟棄?

編輯:在我的實驗中,至少有一個持續隊列可以跨應用程序重新啓動保存消息。但是我仍然不確定(在每個操作系統上)什麼情況會導致Firebase消息傳遞服務運行或不運行,尤其是當應用程序後臺運行時。

回答

0

在你提到的iOS的一部分,它明確指出:

的FCM客戶端庫緩存上的客戶端應用程序的消息,並將其在客戶端有一個活躍的服務器連接。

有了這個說法,我認爲Android也是這樣。只要不清除客戶端應用程序的緩存,應該可以安全地說數據仍然存在。然而,它也很好地記住什麼被@DanHulme在此answer提到:

緩存後臺進程

不要忘記保持Android的後臺進程在內存中,即使他們」已經停止運行,除非/直到另一個進程需要使用該內存。如果應用程序處於「停止」狀態,則不會使用任何資源,即使Android將其保存在內存中也是如此。

所以我認爲這將是最適合你實現你的客戶端應用程序一檢查,上游消息是否被成功發送,並重新發送它在稍後的時間(當連接已經可用)否則。

+0

您引用的文檔提到了一個緩存,但並沒有說明緩存是否持久。這就是說,在我的實驗中,它已被證明是。我仍然對此感到好奇的是,Firebase消息服務在何種情況下確實處於活動狀態並嘗試發送消息。 (另外,TTL不相關的修正:當不包括TTL時,它默認爲0,這意味着消息立即發送或丟棄。) – ArthurDenture

+0

@ArthurDenture我想這就是說,問題應該更多地放在Android(或iOS取決於設備)緩存持久性上,而不是FCM上游消息遞送。對於TTL,很確定它說[這裏](https://firebase.google.com/docs/cloud-messaging/concept-options)*默認超時時間爲四周,除非設置了'time_to_live'標誌*。 –

+1

該鏈接描述下游消息。對於上游消息,[默認ttl值爲0](https://firebase.google.com/docs/reference/android/com/google/firebase/messaging/RemoteMessage.Builder.html#setTtl(int))。 – ArthurDenture

相關問題