数据消息与通知消息(可折叠和不可折叠的混淆)

7

数据消息:

文档 表示:

不可折叠的: 对于客户端应用程序来说,每个消息都很重要并且需要被传递。除通知消息外,所有消息默认情况下都是不可折叠的。

这意味着数据消息是不可折叠的且被认为是重要的。但是,文档 也指出:

仅包含数据的消息当您的应用程序处于后台或已终止时,在设备上被视为低优先级,并将被忽略。

所以,它们到底重要还是不重要?如果它们是重要的话,那么在应用程序处于后台时如何被忽略呢?


通知消息:

文档 表示:

除通知消息外,所有消息默认情况下都是不可折叠的。

我通过Firebase通知合成器发送了两条通知消息,并且应该可以折叠。旧消息应该折叠(或被最新的消息替换),但我在Android和iOS上都看到了这两个通知消息。

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

1个回答

8
非常有趣的问题!
看起来文档在某些地方很令人困惑,而且有些地方有些矛盾。我做了一些调查,以下亮点应该能够消除您的一些疑问:
什么是可折叠消息?
官方定义如下:
可折叠消息是指,如果消息尚未传送到设备,则该消息可以被新消息替换。
让我们用一些细节扩展上述定义:
当您的消息排队并且尚未传递给接收者时,可折叠消息的概念才适用。(原因可能是接收者可能没有接入互联网,或者他们的手机关机等。)这意味着在消息排队的情况下,如果折叠消息,则当接收方重新联机时,您可能只会收到最新的消息。
让我们举个例子:接收者的互联网连接已关闭,我们发送三条消息A、B和C。现在,当接收者打开互联网时,如果消息是可折叠的,他/她将只收到一条消息C。
但重要的是注意,如果接收者已经收到一条消息,比如消息A,那么当您发送B时,它不会替换已经传递给接收者的消息A。
通知消息总是可折叠的吗?
并非完全正确。
当我们从文档中读到这一行时,我们认为通知消息始终是可折叠的。
除了通知消息外,默认情况下所有消息都不可折叠。
但是当我尝试通过Firebase控制台的通知构建器发送多个通知消息时(在发送之前关闭了接收者设备上的互联网),我发现当重新联机时,我会收到我发送的所有消息。这使我们相信通知消息是不可折叠的!
但这只是故事的一半!
当您通过其他方式发送通知消息(例如使用FCM Post API)时,您将仅从队列中获取最新消息。这意味着通知消息是可折叠的!
结论:通过通知构建器发送的通知消息是不可折叠的,其余情况下它们是可折叠的。(文档没有明确说明这一点)
数据消息是不可折叠的,这意味着它们很重要,对吗?
显然回答是肯定的!但这里的正确答案并非如此。
应该将重要消息作为不可折叠的消息发送。但是,不可折叠的并不等于重要的消息!
原因是?
这个解释有两面,
  1. 可折叠/不可折叠消息的分离仅用于确定用户是否只关心最新消息,还是所有已发送的消息都很重要。
  2. 这并不意味着非折叠式消息将以高优先级作为重要消息传递。您仍需要考虑消息优先级,这取决于特定平台的规则。

因此,可折叠/不可折叠的概念只在消息可以传递给接收者的情况下发挥作用。消息是否能够及时传递完全取决于消息优先级和操作系统限制等完全不同的领域。


精彩的解释。我认为Firebase团队需要雇用像你这样的人来撰写他们的文档。但请告诉我,你是如何了解这些概念的,因为文档一直以来都很令人困惑。 - iDecode
我还想补充一点,当我在设备离线时通过通知构建器依次发送通知时,当设备上线时,我只看到了最后一个通知(两种方式都测试过,“发送测试消息”和“发送常规消息”)。 - iDecode
1
@iDecode,很高兴我的回答对你有帮助。就像我说的那样,我自己也阅读了不同的答案和文档,并且理解了这个问题。 对于通过composer发送通知的情况,有时我们会看到不同的行为,这有点奇怪。 今天我又试了几次,有时候会看到可折叠和不可折叠的两种行为。 我有一个屏幕录像,显示从通知composer发送的通知消息是不可折叠的: https://drive.google.com/file/d/1LWxYnLKK1sKCY-KOzNQHmoNlzXcVP9E9/view?usp=sharing - Maulik Hirani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接