推送通知警报文本的最大长度是多less?

iOS推送通知的警报文本的最大长度是多less?

该文档指出,通知有效负载总共不得超过256个字节,但肯定对警报文本必须有特定的字符限制。

警报文本的真正限制没有logging在任何地方。 文档说的唯一的是:

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

这是我可以find做一些实验。

  • 警报:在iOS 7之前,警报显示限制为107个字符。 更大的消息被截断,你会得到一个“…”在显示的消息的末尾。 iOS 7的限制似乎增加到235个字符。 如果你超过8行,你的消息也将被截断。
  • 横幅:横幅将被截断大约62个字符或2行。
  • 通知中心:通知中心的邮件被截断大约110个字符或4行。
  • locking屏幕:与通知中心相同。

正如这里的提醒是官方文件中的一个很好的说明:

如有必要,iOS会截断您的消息,使其适合每种通知传递方式; 为了获得最佳效果,您不应该截断您的消息。

它应该是236个字节。 就我所知,警报文本的大小没有限制,只有总有效负载大小。 所以考虑有效负载是否最小,只包含警报信息,它应该看起来像:

{"aps":{"alert":""}} 

这占用了20个字符(20个字节),剩下236个字节放在警报string中。 ASCII码为236个字符,UTF8和UTF16可能较小。

这里logging了增强格式通知的限制。

它明确指出:

有效载荷不得超过256个字节,不得以null结尾。

ascandroli声称,他们能够发送1400个字符的消息。 我自己用新的通知格式进行的testing表明,在256字节限制内只有1个字节的消息被拒绝了。 鉴于文档在这一点上是非常明确的 ,我build议使用256是安全的,无论你可以实验性地实现,因为不能保证苹果将来不会改变它到256。

至于警报文本本身,如果你可以在256个有效负载大小中适应它,那么它将被iOS显示。 它们截断了状态栏上显示的消息,但是如果打开通知中心,则整个消息就在那里。 它甚至呈现换行符\n

编辑:

用最新的信息更新答案

允许通知负载的最​​大大小取决于您使用的提供程序API。

使用传统二进制接口时,最大有效负载大小为2KB(2048字节)。

使用HTTP / 2提供程序API时,最大有效负载大小为4KB(4096字节)。 对于networking电话(VoIP)通知,最大大小为5KB(5120字节)

老回答:根据苹果文件,iOS 8的有效载荷是2千字节(2048字节),iOS 7和之前的版本是256字节。 (删除链接,因为它是一个旧的文档,现在已经破裂)

所以如果你只发送文本,你有2028(iOS 8+)或236(iOS 7-)字符可用。

通知有效负载

每个远程通知都包含有效负载。 有效负载包含有关系统如何提醒用户以及您提供的任何自定义数据的信息。 在iOS 8和更高版本中,通知有效负载所允许的最大大小为2千字节; Apple推送通知服务拒绝任何超出此限制的通知。 (在iOS 8和OS X之前,最大有效负载大小为256字节。)

但是我已经testing过了,即使在生产configuration中,也可以向iOS 7设备发送2千字节

这里有一些截图(横幅,警报和通知中心) 警报旗帜通知中心

对于常规的远程通知,最大大小为4KB(4096字节) https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CreatingtheNotificationPayload.html

### iOS的大小限制是256字节,但是由于iOS 8的引入已经变成了2kb!

https://forums.aws.amazon.com/ann.jspa?annID=2626

在iOS 8中,苹果推出了一些新function,为移动推送通知提供了一些丰富的新用例 – 交互式推送通知,第三方小部件以及更大的(2 KB)有效载荷。 今天,我们很高兴地宣布支持iOS 8发布的新的移动推送function。我们正在发布一个新的iOS 8示例应用程序,演示如何使用SNS实现这些新function,还实现了对更大的2KB有效载荷的支持。

根据WWDC 713_hd_whats_new_in_ios_notifications。 对于iOS 8,推送有效负载的上一个大小限制为256字节 ,现在已经增加到2千字节

资料来源: http : //asciiwwdc.com/2014/sessions/713?q=notification#1414.0

由于各种原因,Apple推送会拒绝一个string。 我testing了各种场景推送,这是我的工作修复(在Python中):

 # Apple rejects push payloads > 256 bytes (truncate msg to < 120 bytes to be safe) if len(push_str) > 120: push_str = push_str[0:120-3] + '...' # Apple push rejects all quotes, remove them import re push_str = re.sub("[\"']", '', push_str) # Apple push needs to newlines escaped import MySQLdb push_str = MySQLdb.escape_string(push_str) # send it import APNSWrapper wrapper = APNSWrapper.APNSNotificationWrapper(certificate=...) message = APNSWrapper.APNSNotification() message.token(...) message.badge(1) message.alert(push_str) message.sound("default") wrapper.append(message) wrapper.notify() 

根据更新的苹果文件 (查看我的回答date):

“…使用HTTP / 2提供程序API时,最大有效负载大小为4096字节,使用传统二进制接口,最大有效负载大小为2048字节,苹果推送通知服务(APN)拒绝任何超过最大大小的通知。

Apple更新的文件:

每个远程通知都包含有效负载。 有效载荷包含有关系统如何警告用户以及您提供的任何自定义数据的信息。 允许通知负载的最​​大大小取决于您使用的提供程序API。 使用HTTP / 2提供程序API时,最大有效负载大小为4096字节 。 使用传统的二进制接口,最大有效载荷大小是2048字节。 Apple推送通知服务(APN)拒绝任何超过最大大小的通知。

在这里看我的testing

我最多可以发送33个中文字符和13个字节的自定义值。