【问题标题】:Is there a technical reason why we shouldn't include message body in APN notifications?我们不应该在 APN 通知中包含消息正文是否有技术原因?
【发布时间】:2021-06-28 17:11:49
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: ios apple-push-notifications


    【解决方案1】:

    您提供的链接来自文档存档,打开它时,我看到了免责声明

    本文档可能不代表当前开发的最佳实践。下载链接和其他资源可能不再有效。有关最新信息,请参阅用户通知框架。”

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

    【讨论】:

    • 好的,所以较新的文档不会说 这样做,但我希望有一个权威的消息来源说这样做绝对可以而且没有真的很好的理由不这样做。
    • 我认为,除了涵盖主要场景的最佳实践之外,Apple 从未提及他们的 API 可以做什么,因为他们的 API 拥有所有开发人员可能遇到的无限数量的用例。我习惯于认为,当苹果不劝阻某事,当它不违背常识时,那么这样做是可以的。
    • 在根“用户通知”文档页面上,您可以找到示例代码。如果您下载“实施警报推送通知”示例,您可能会在 AppDelegate.swift 中找到描述通知负载的注释。这个有效载荷有alert.body = "Avocado Bacon Burger on sale",所以我认为苹果在你的有效载荷中也没有问题。
    猜你喜欢
    • 2023-03-07
    • 2018-03-20
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 2017-01-06
    相关资源
    最近更新 更多