Apple 推送通知第 2 版 - 限制和问题

Posted

技术标签:

【中文标题】Apple 推送通知第 2 版 - 限制和问题【英文标题】:Apple push notifications with Version 2 - limits and questions 【发布时间】:2014-03-04 22:28:14 【问题描述】:

刚刚开始学习和实现我们的服务器以使用 C# 发送推送通知 我读到以下内容:Apple Push Notifications in Bulk 我还检查了 push-sharp 和 MoonApns 项目的代码参考。

两个项目都使用版本“1”的消息。

Apple 在这里有新的格式 (2): https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/CommunicatingWIthAPS.html

我没有参考 v1 进行比较,但通过在线查看,他们似乎增加了一次发送“批量”消息的能力。因此,我们不必逐个发送通知,而是可以发送包..

对这一切感到陌生和不知所措,我想知道我是否应该尝试处理 v2?

    看到 ItemId 是 1 个字节 - 我们不能一次发送超过 256 条消息,对吧? ItemId 有什么用?它应该从1开始吗?他们应该增加吗? 如果我收到错误,它将指定 NotificationIdentifier,例如,如果我发送了 100 条消息的批次并且消息 50 作为错误返回,它是否会同样工作。我应该怨恨剩下的50?还是整批?

我想问题是为什么?为什么是这种新格式?为了更好地处理多条消息?我认为即使我在不​​等待 v1 的情况下转储消息,也足以供我们使用。

【问题讨论】:

【参考方案1】:

    ItemId 不是通知的标识符。它标识项目的类型(1 表示设备令牌,2 表示有效负载,3 表示通知标识符,4 表示到期数据,5 表示优先级)。因此对一批发送的消息数量没有影响。

    如果消息 50 有错误,您必须重新发送消息 51 - 100。

我没有尝试使用这种新格式,我不确定它有什么用处。它增加了通知优先级,这在以前的格式中是不存在的,但如果你不需要,你可以坚持格式 1。

顺便说一句,从当前文档来看,您应该如何使用新格式批量通知。

单个帧必须包含(至少)单个通知的所有项目(即设备令牌、有效负载、消息 ID、过期和优先级),除非其中一些是可选的(文档中未指定)。

但是,如果您在一个框架中只包含一个通知,则您不会批量处理任何内容。如果您尝试在单个框架中包含多个通知,则不清楚如何解释该框架。需要为每个项目指定项目类型意味着项目的顺序无关紧要(与它所做的格式 0 和 1 不同)。因此,例如,如果您决定在同一帧中批量处理两个通知,您将在同一帧中拥有两个通知 ID 和两个设备令牌。在这种情况下,不清楚哪个设备令牌与哪个通知 ID 相关(除非顺序很重要)。也许该格式是一种中间格式,稍后将进行扩展以允许将单个有效负载发送到多个设备令牌(这将允许您为多个设备令牌指定一次有效负载)。那会很有用。

格式 0 和 1 指定为here。

【讨论】:

ItemId 的好点我认为我们应该重复 1.2.3.4.5 为什么?不知道.. 看来现在“Enchanced”已经足够好了。谢谢!

以上是关于Apple 推送通知第 2 版 - 限制和问题的主要内容,如果未能解决你的问题,请参考以下文章

我必须使用 HTTP/2.0 发送 Apple 推送通知吗?我可以使用 libcurl 吗?

如果您在事先同意通知后禁用通知,Apple 如何处理推送令牌?

如何发送多行的 Apple 推送通知,即带有 '\n' 字符?

IBM Worklight:iOS 推送通知长度限制

如果 (n-1)-th 有错误的令牌,则未发送第 n-th Apple 推送通知

Apple 在沙盒上推送通知