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