为什么我们不应该在 APN 通知中包含消息正文有技术原因吗?

Is there a technical reason why we shouldn't include message body in APN notifications?

我们正在为 iOS 设备创建一个 IM 应用程序,并且我们正在使用 APN 通知来通知用户每次他们的聊天之一有新消息时。阅读 the documentation,Apple 建议,“因为无法保证远程通知的传送,切勿在您的有效负载中包含可以通过其他方式检索的 [...] 数据。”

这对我来说似乎有点不合逻辑。仅仅因为可以通过其他方式检索数据,这是不将其放入通知负载的理由吗?如果我们在通知负载中包含聊天消息正文(正文的大小不超过 1KB),我们可以缓存消息并在用户打开应用程序时立即显示它,而不是应用必须向服务器发送消息,引入额外的延迟。

当然,APS 通知可能会出现乱序,并且不能保证传递,因此我们将使用消息日期来对消息进行排序并调用服务器以获取任何未通过 APS 传递的消息。但是对于确实通过 APS 传递的消息,我不明白为什么我们不将整个消息正文包含在通知中。

A​​pple 的文档给出了一封电子邮件的示例,其中电子邮件正文不会在 APN 正文中传递,而是由应用程序单独下载。但是,电子邮件通常比 IM 正文大得多,而且大小可能达到数兆字节。我们的 IM 机构会小得多,所以这不是一个很好的例子。

我是否遗漏了什么,因为有技术原因不包括这么小的 IM 消息正文?这让我想知道如果您不应该捆绑这种东西,为什么通知的大小可以达到 4KB。

您提供的link来自文档存档,打开时看到免责声明

This document may not represent best practices for current development. Links to downloads and other resources may no longer be valid. For the latest information, see User Notifications framework."

在用户通知框架指南中,有这个Generating a Remote Notification页面,它只是指出远程通知不应包含敏感数据,或者,如果确实有必要,敏感数据必须加密。