2

我真的不知道如何问这些,但希望我能让自己足够清楚,让你理解我的问题

  1. 消息限制为 256。但我需要对哪个消息施加此限制?起初我以为它指的是 json 大小。但是在查看了zend使用的代码,以及其他使用推送通知的代码之后,额外的信息是通过payload发送的(json是256,但是发送的payload是270)。我应该将 json 限制为 240 或更少吗?

  2. 如果多条消息具有相同的 ID 会发生什么(我不是在谈论设备 ID)

  3. 我可以多快向同一设备发送第二条消息?我有一些问题,只有一条消息到达。

我使用时间戳作为 ID,所以我想知道这是否是我的问题的原因,或者我不能在同一秒内将 5 条消息发送到单个设备。

4

2 回答 2

2

苹果开发者网站

通知负载

每个推送通知都包含一个有效负载。有效负载包含有关系统应如何提醒用户的信息以及您提供的任何自定义数据。通知有效负载允许的最大大小为 256 字节;Apple Push Notification Service 拒绝任何超过此限制的通知。

限制是完整的有效负载,这意味着 JSON + 您的消息。因此,您的消息应限制为 236 个字符,然后添加以下 JSON: 的字符数{"aps":{"alert":""}}

我可以多快向同一设备发送第二条消息?我有一些问题,只有 1 条消息到达。

向一台设备发送消息没有任何限制。但是,Apple 不保证您的所有消息都会送达,如果从同一设备上的一个应用程序收到多条消息,APNS 可能只会送达该设备的最新推送通知消息。

来自iOS 开发者库

收到了一些通知,但不是全部

如果您在短时间内向同一设备或计算机发送多个通知,推送服务将仅发送最后一个。

这就是为什么。设备或计算机确认收到每个通知。在推送服务收到该确认之前,它只能假设设备或计算机由于某种原因已离线,并将通知存储在服务质量 (QoS) 队列中以供将来重新传递。这里的往返网络延迟当然是一个主要因素。

如本地和推送通知编程指南中所述,QoS 队列为每个设备或计算机的每个应用程序保存一个通知。如果服务在发送队列中的通知之前收到另一个通知,则新通知将覆盖前一个通知。

感谢Joachim Isaksson提供上述链接。

于 2013-06-06T11:33:26.187 回答
1

嗯,256 字节的限制是 JSON 有效负载的二进制表示(设备令牌以及其他标头不包括在此计数中)。这意味着如果您只使用需要 UTF-8 编码的单个字节的字符,则可以发送 256 个字符的 JSON 字符串。如果您以字符需要超过一个字节的语言发送文本,您的有效负载中将有更少的字符空间。我测试了它,这就是它的行为方式。

至于发送多个具有相同 id 的消息,这将违背消息 id 的目的。当 Apple 在您的消息中遇到一些错误(例如无效的设备令牌)时,它会发回包含您提供的消息 ID 的错误响应。如果您发送多条具有相同 id 的消息,您将无法知道是哪条消息导致了错误响应。

于 2013-06-06T14:08:25.633 回答