Apple推送通知问题

时间:2013-06-06 11:22:14

标签: php ios zend-framework push-notification apple-push-notifications

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

  1. 邮件限制为256.但是我需要将此限制强加给哪些邮件? 起初我以为这是指json的大小。但在查看代码zend使用以及使用推送通知的其他人之后,通过有效负载发送附加信息(json为256但发送的有效负载为270)。我应该将json限制在240或更低吗?

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

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

  4. 我使用Id的时间戳,所以我想知道这是否是我的问题的原因,或者我可能无法在同一秒内向单个设备发送5条消息。

2 个答案:

答案 0 :(得分:2)

来自Apple Developer site

  

通知有效负载

     

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

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

  

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

向一台设备发送消息没有限制。但是,Apple不保证传递您的所有消息,并且APNS可能仅提供设备的最新推送通知消息,以防从一个应用程序收到多条消息,这些消息发往同一设备。

来自iOS Developer Library

  

收到了一些通知,但并非全部

     

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

     

这就是原因。设备或计算机确认收到每个   通知。直到推送服务收到该确认,它   只能假设设备或计算机已脱机   理由并将通知存储在服务质量(QoS)中   排队等待将来重新开始。这里的往返网络延迟是   当然是一个主要因素。

     

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

感谢Joachim Isaksson提供上述链接。

答案 1 :(得分:1)

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

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