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

相关问题