Data messages vs Notification messages,(可折叠和不可折叠混淆)

Data messages vs Notification messages, (collapsible and non-collapsible confusion)

数据信息:

Docs 说:

Non-collapsible: Every message is important to the client app and needs to be delivered. Except for notification messages, all messages are non-collapsible by default.

这意味着数据消息是不可折叠的并且被认为是重要的。然而,docs也说:

Data only messages are considered low priority by devices when your application is in the background or terminated, and will be ignored.

那么,它们是否真的重要,如果它们重要,那么如果应用程序在后台运行,它们怎么会被忽略。


通知消息:

Docs 说:

Except for notification messages, all messages are non-collapsible by default.

我正在通过 Firebase Notifications Composer 发送两条通知消息并且是可折叠的,旧消息应该折叠(或替换为最新消息)但我可以看到两个通知都显示在 Android和 iOS.

那么,为什么通知消息被认为是“可折叠的”?

非常有趣的问题!

看起来文档在某些地方令人困惑并且有些矛盾。

我做了一些挖掘,以下要点应该可以消除您的一些疑虑:

可折叠消息是什么意思?

来自文档的官方定义:

A collapsible message is a message that may be replaced by a new message if it has yet to be delivered to the device.

让我们用一些细节来扩展上面的定义:

仅当您的消息排队并且尚未传送给接收者时才适用可折叠消息概念。 (邮件排队的原因可能是因为收件人可能无法访问互联网,或者他们的手机已关机等) 这意味着在消息排队的情况下,如果消息被折叠,您可能只能在接收端重新在线时收到最新的消息。

举个例子: 收件人的互联网连接已关闭,我们发送了 A、B 和 C 三个消息。现在,当收件人打开他的互联网时,如果消息是可折叠的,他只会收到一条消息 C。

但是,需要注意的是,如果接收方已经收到一条消息,比方说 - 消息 A,那么当您发送 B 时,它不会替换已经发送给接收方的消息 A。


通知消息总是可折叠的?

不完全正确。

当我们从文档中阅读这一行时,我们认为通知消息始终是可折叠的。

Except for notification messages, all messages are non-collapsible by default.

但是,当我尝试从 Firebase 控制台通过 Notification Composer 发送多条通知消息时(发送前关闭接收方设备上的互联网),我发现当我重新上线时,我收到了我发送的所有消息。这让我们相信通知消息是不可折叠的!

但这只是故事的一半!

当您通过其他方式发送通知消息时,例如使用 FCM Post API,您只会从队列中获得最新的消息。这意味着通知消息是可折叠的!

结论:通知消息在通过 Notification Composer 发送时是不可折叠的,在其他情况下,它们是可折叠的。 (文档在任何地方都没有明确说明)


数据消息是不可折叠的,这意味着它们很重要,对吧?

显而易见的答案似乎是肯定的!但这不是正确的答案。

重要消息应作为不可折叠的消息发送。 但是,不可折叠不等于重要消息!

原因?

这个解释有两个方面,

  1. Collapsible/Non-collapsible消息隔离的定义只是为了决定是只有最新的消息对用户重要还是到目前为止发送的所有消息对用户都重要。
  2. 这并不意味着不可折叠的消息将作为重要消息以高优先级传递。您仍然需要考虑依赖于平台特定规则的 message priorities

所以,collapsible/non-collapsible概念就出现了如果消息可以传递给接收者。消息能否按时送达完全是消息优先级和OS限制等的不同领域