繁体   English   中英

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

[英]What is the maximum length of a Push Notification alert text?

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

文档指出, 通知有效负载的总长度必须小于 256 字节,但警报文本肯定必须有特定的字符限制。

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

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

这是我在做一些实验时可以找到的。

  • 警报:在 iOS 7 之前,警报显示限制为 107 个字符。 较大的消息被截断,您会在显示的消息末尾看到一个“...”。 iOS 7 的限制似乎增加到 235 个字符。 如果您的 go 超过 8 行,您的消息也会被截断。
  • 横幅:横幅在 62 个字符或 2 行左右被截断。
  • 通知中心:通知中心的消息被截断大约 110 个字符或 4 行。
  • 锁屏:与通知中心相同。

在这里提醒一下,官方文档中有一个很好的说明:

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

它应该是 236 字节。 据我所知,警报文本的大小没有限制,但只有有效负载的总大小。 因此,考虑到负载是否最小且仅包含警报信息,它应该如下所示:

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

这需要 20 个字符(20 个字节),剩下 236 个字节放在警报字符串中。 使用 ASCII 将是 236 个字符,使用 UTF8 和 UTF16 可能更少。

此处记录了增强格式通知的限制。

它明确指出:

有效负载不得超过 256 字节,并且不得以空值结尾。

ascandroli在上面声称他们能够发送 1400 个字符的消息。 我自己对新通知格式的测试表明,仅超过 256 字节限制 1 字节的消息被拒绝。 鉴于文档在这一点上非常明确,我建议使用 256 更安全,无论您可以通过实验实现什么,因为不能保证 Apple 将来不会将其更改为 256。

至于警报文本本身,如果您可以将其放入 256 个总有效负载大小中,那么它将由 iOS 显示。 他们会截断状态栏上显示的消息,但如果您打开通知中心,整个消息就在那里。 它甚至呈现换行符\n

编辑:

使用最新信息更新答案

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

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

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

旧答案:根据苹果文档,iOS 8 的有效负载为 2 KB(2048 字节),iOS 7 及之前版本为 256 字节。 (删除了链接,因为它是旧文档,现在已损坏)

因此,如果您只是发送文本,则可以使用 2028 (iOS 8+) 或 236 (iOS 7-) 字符。

通知负载

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

但我已经测试过,即使在生产配置中,您也可以向 iOS 7 设备发送 2 KB

这是一些屏幕截图(横幅、警报和通知中心)

警报横幅通知中心

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

###iOS 的大小限制是 256 字节,但是自从 iOS 8 的引入已经改为 2kb!

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

在 iOS 8 中,Apple 引入了新功能,为移动推送通知提供了一些丰富的新用例——交互式推送通知、第三方小部件和更大 (2 KB) 的有效负载。 今天,我们很高兴地宣布支持 iOS 8 宣布的新移动推送功能。我们将发布新的 iOS 8 示例应用程序,演示如何使用 SNS 实现这些新功能,并且还实现了对更大 2KB 有效负载的支持。

根据 WWDC 713_hd_whats_new_in_ios_notifications。 对于 iOS 8,之前推送有效负载的256 字节大小限制现在已增加到2 KB

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

Apple push 会出于各种原因拒绝一个字符串。 我测试了推送交付的各种场景,这是我的工作修复(在 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()

根据更新的 Apple 文档(查看我的回答日期):

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

苹果更新文档:

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

在这里查看我的测试

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM