APN(苹果推送通知)的负载大小限制

44
官方文档中,您可以找到以下信息:

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

然而,在WWDC 14中,我们可以看到这张屏幕截图:

enter image description here

我想知道是否有任何官方的苹果声明关于推送通知的大小限制。我进行了测试,比256字节大的也能正常工作,但是文档说不应该。有人可以确认或否认远程通知的大小吗?


根据我的测试,它适合于警报弹出屏幕上看到的大约3-4行文本。每行大约有几个单词。我倾向于认为它类似于你可以在推特中写的数量,可能略少一些。我不知道如何拒绝通知,但我知道如果我放入超过3-4行的文本,它们会被截断并且不会显示。 - Zhang
看起来苹果还没有更新他们的APNS文档。我找不到任何官方的苹果文档提到了负载大小的增加。 - Eran
2
iOS7及以下版本的最大推送通知大小为256字节,而iOS8及以上版本则为2KB。对于HTTP/2协议,其最大推送通知大小为4KB。更多信息请参考:http://www.jeenalinfotech.com/blogs/ios/what-is-the-maximum-size-of-apple-push-notification/。 - MilanPanchal
@Zhang 通知也可以用来发送不向用户显示的数据; 因此有兴趣了解 payload 可以有多大。 - ToolmakerSteve
我正在使用VOIP,但警报对象大小仍然在约1KB左右被截断。在VOIP的情况下如何使用最大限制5KB?有什么建议吗? - CoDe
5个回答

75

苹果已经更新了文档。2KB的最大有效载荷大小仅适用于运行iOS 8的设备。 官方文档 说明:

在 iOS 8 及更高版本中,通知有效负载允许的最大大小为 2 千字节;Apple 推送通知服务拒绝超过此限制的任何通知。(在 iOS 8 之前和 Mac OS X 中,最大有效负载大小为 256 字节。)


根据更新的 Apple 文档,大小为4KB。

  • 对于常规远程通知,最大大小为4KB (4096 bytes)
  • 对于VoIP(互联网语音电话)通知,最大大小为5KB (5120 bytes) 注意

如果您使用传统的APNs二进制接口而不是HTTP / 2请求发送通知,则最大有效载荷大小为2KB (2048字节)


1
我想提一下,与文档相反,256字节的限制似乎不适用于iOS 7。人们测试并确认他们的iOS 7设备可以愉快地接收大于256字节的消息。https://github.com/djacobs/PyAPNs/pull/79#issuecomment-51021572 - Lysann Schlegel
那么是2000字节还是2048字节? - user1227928
1
@user1227928 明确表示是2千字节,因此您的答案是2000字节。一个kibibit KiB(https://en.wikipedia.org/wiki/Kibibit)等于1024字节。但无论如何,我们都知道苹果会搞乱这些定义(他们可能在软件术语中使用1024个字节作为千字节,但在设备存储大小上使用1000)。 - Alejandro Iván
更新的文档:https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/TheNotificationPayload.html#//apple_ref/doc/uid/TP40008194-CH107-SW1 - Claus Jørgensen
3
@Ganesh - 实际上,Alejandro最初提出的观点是,按照国际标准(请参见他的维基链接),2KiB表示2048字节,而2KB表示2000字节。然而,在实践中,KB在计算机软件中已经被广泛使用了很长时间,意思是1024,因此无法安全地假设哪种方式是正确的。我自己也不遵守这个标准,难以打破几十年的习惯,所以我不能抱怨 ;) - ToolmakerSteve
显示剩余3条评论

32

iOS 9有一些变化:

引入HTTP/2
负载增加到4KB

4 KB限制适用于所有iOS版本和OS 10

请查看官方链接

  • 对于常规远程通知,最大大小为4KB(4096字节)

  • 对于VoIP通知,最大大小为5KB(5120字节)

  • 如果您使用旧版APNs二进制接口发送通知而不是使用HTTP/2请求,则最大有效载荷大小为2KB(2048字节)

请查看此视频链接以获取有关HTTP/2功能的更多详细信息
https://developer.apple.com/videos/play/wwdc2015-720/


这还不是真的,据我所知,他们将在2016年添加这些内容,目前还没有确定日期。 - jcesarmobile
1
HTTP/2 APNS已经得到官方支持。https://developer.apple.com/news/?id=12172015b - infiniteloop
嗨,我正在使用VOIP,但它仍然将警告对象大小截断为仅512字节。当苹果文档说它增加到5KB的VOIP时,这有什么意义呢?有什么建议吗? - CoDe

3

2

1
根据最新的 官方文档, 负载限制为4096字节或2048字节用于常规通知,VoIP通知则为5120字节:

负载的最大大小取决于您发送的通知类型:

  • 对于常规远程通知,最大大小为4KB(4096字节)
  • 对于VoIP(Voice over Internet Protocol)通知,最大大小为5KB(5120字节)

注意:如果您使用传统的APNs二进制接口而不是HTTP/2请求发送通知,则最大负载大小为2KB(2048字节)。

在iOS 8之前,限制为256字节。

好的信息,但是请注意链接不可用。 - Premal Khetani
@ipr 谢谢,苹果有一个定期移动他们的文档的习惯。更新并包含了最新的信息。 - Brad Koch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接