数据消息:
文档说:
不可折叠:每条消息对客户端应用程序都很重要,需要被传递。除通知消息外,所有消息默认为不可折叠。
表示数据消息不可折叠并且被认为是重要的。然而,文档也说:
当您的应用程序在后台或终止时,仅数据消息被设备认为是低优先级的,并且将被忽略。
那么,它们实际上是重要的还是不重要的,如果它们是重要的,那么为什么当应用程序在后台时,它们会被忽略,例如。
通知消息:
文档说:
除通知消息外,所有消息默认为不可折叠。
我通过Firebase Notifications composer发送两个通知消息,并且可以折叠,旧消息应该折叠(或被最新的消息取代),但我可以看到两个通知都显示在Android和iOS上。
那么,为什么通知消息被认为是"可折叠的"?
非常有趣的问题!
看起来文档在某些地方是令人困惑和有些矛盾的。
我做了一些调查,下面的要点应该可以消除你的一些疑虑:
我们所说的可折叠消息是什么意思?
官方定义来自文档:
可折叠消息是指如果消息尚未交付,则可能被新消息替换的消息到设备
让我们用一些细节来扩展上面的定义:
可折叠消息概念仅适用于当您的消息排队时和尚未交付给接收者。(消息排队的原因可能是因为接收方可能无法访问互联网,或者他们的手机被关闭等)这意味着在消息排队的情况下,如果消息崩溃,您可能只在接收方端收到最新的消息,当他们重新联机时。
举个例子:接收方的网络连接是关闭的,我们发送了三条信息,A, B和C。现在,当接收方打开网络时,如果信息是可折叠的,他只会收到一条信息,C。
然而,重要的是要注意,如果接收者已经收到了一条消息,比如消息a,那么当你发送B时,它不会替换已经传递给接收者的消息a。
通知消息总是可折叠的?
不完全正确。
当我们从文档中读取这一行时,我们认为通知消息总是可折叠的。
除通知消息外,所有消息默认为不可折叠。
但是当我尝试从Firebase控制台通过notification Composer发送多个通知消息时,(在发送之前关闭接收设备上的互联网),我发现当重新上线时,我收到了我发送的所有消息。这让我们相信通知消息是不可折叠的!
但这只是故事的一半!
当你通过其他方式发送通知消息时,比如使用FCM Post API,你只能从队列中获得最新的消息。这意味着通知消息是可折叠的!
结论:当通过通知编写器发送通知消息时,通知消息是不可折叠的,其余情况下,它们是可折叠的。(文档中没有明确说明)
数据消息是不可折叠的,这意味着它们很重要,对吧?
显然答案是肯定的!但这不是正确的答案。
重要消息应作为不可折叠消息发送。但是,不可折叠不等于重要的信息!
原因吗?
这个解释有两个方面,
- 可折叠/不可折叠消息隔离的定义仅用于决定是否只有最新的消息对用户重要,还是到目前为止发送的所有消息对用户重要。
- 这并不意味着不可折叠消息将作为重要消息以高优先级传递。您仍然需要考虑依赖于平台特定规则的消息优先级。
所以,可折叠/不可折叠的概念出现在图片if消息可以传递给接收者。消息是否能够按时交付完全是消息优先级和操作系统限制等不同的领域。