Какова максимальная длина текста предупреждения Push-уведомления?


какова максимальная длина текста предупреждения push-уведомления iOS?

The документация указывает, что полезная нагрузка уведомления должна быть менее 256 байт в общей сложности, но, конечно, должно быть определенное ограничение символов для текста предупреждения.

11 131

11 ответов:

реальные ограничения для текста предупреждения нигде не документированы. Единственное, что информация - это:

в iOS 8 и более поздних версиях максимальный размер, разрешенный для полезной нагрузки уведомления, составляет 2 килобайта; служба Apple Push Notification service отказывается от любого уведомления, превышающего этот предел. (До iOS 8 и в OS X максимальный размер полезной нагрузки составляет 256 байт.)

Это то, что я мог бы найти делать некоторые эксперименты.

  • предупреждения: до iOS 7 ограничение отображения предупреждений составляло 107 символов. Большие сообщения были усечены, и вы получите "..."в конце отображаемого сообщения. С iOS 7 лимит, похоже, увеличен до 235 символов. Если вы перейдете через 8 строк, ваше сообщение также будет усечено.
  • баннеры: баннеры усекаются вокруг 62 символов или 2 строк.
  • уведомления Центр: сообщения в Центре уведомлений, обрезались около 110 символов или 4 строки.
  • Блокировка Экрана: то же, что и Центр уведомлений.

как напоминание вот очень хорошая заметка из официальной документации:

при необходимости iOS усекает ваше сообщение, чтобы оно хорошо вписывалось в каждый стиль доставки уведомлений; для достижения наилучших результатов вы не должны усекать свое сообщение.

это должно быть 236 байт. Насколько я знаю, нет никаких ограничений на размер текста предупреждения, но только общий размер полезной нагрузки. Поэтому, учитывая, что полезная нагрузка минимальна и содержит только информацию о предупреждении, она должна выглядеть так:

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

это занимает 20 символов (20 байт), оставляя 236 байт для размещения внутри строки предупреждения. С ASCII это будет 236 символов, и может быть меньше с UTF8 и UTF16.

предел уведомлений расширенного формата документы.

он явно заявляет:

полезная нагрузка не должна превышать 256 байт и не должна завершаться нулем.

ascandroli претензии выше чтобы они могли отправлять сообщения с 1400 символами. Мое собственное тестирование с новым форматом уведомления показало, что сообщение всего на 1 байт выше 256-байтового предела было отклонено. Учитывая, что документы являются очень явные на этом этапе я предлагаю безопаснее использовать 256 независимо от того, что вы можете быть в состоянии достичь экспериментально, поскольку нет никакой гарантии, что Apple не изменит его на 256 в будущем.

Что касается самого текста предупреждения, если вы можете поместить его в общий размер полезной нагрузки 256, то он будет отображаться iOS. Они усекают сообщение, которое отображается в строке состояния, но если вы откроете Центр уведомлений, все сообщение будет там. Он даже отображает новую строку персонажи \n.

EDIT:

обновление ответа с помощью последняя информация

максимальный размер, разрешенный для полезной нагрузки уведомления, зависит от используемого API поставщика.

при использовании устаревшего двоичного интерфейса максимальный размер полезной нагрузки составляет 2 КБ (2048 байт).

при использовании API поставщика HTTP/2 Максимальный размер полезной нагрузки составляет 4 КБ (4096 байт). Для передачи голоса по интернет-протоколу (VoIP) уведомления, максимальный размер-5КБ (5120 байт)

СТАРЫЙ ОТВЕТ: Согласно документу apple, полезная нагрузка для iOS 8 составляет 2 килобайта (2048 байт) и 256 байт для iOS 7 и более ранних версий. (удалил ссылку, так как это был старый документ, и теперь он сломан)

поэтому, если вы просто отправляете текст, у вас есть 2028 (iOS 8+) или 236 (iOS 7-) символов.

Полезная Нагрузка Уведомления

каждое удаленное уведомление содержит полезную нагрузку. Полезная нагрузка содержит информация о том, как должна работать система предупреждения пользователя, а также любые пользовательские данные, которые вы предоставляете. В iOS 8 и позже, максимальный размер для уведомления полезная нагрузка составляет 2 килобайта; Apple Push Notification сервис отказывается от любого уведомления, превышающего этот лимит. (До iOS 8 и в OS X максимальный размер полезной нагрузки составляет 256 байт.)

но я протестировал, и вы можете отправить 2 килобайта на устройства iOS 7 тоже, даже в производственных конфигурациях

вот несколько скриншотов (баннер, предупреждение и Центр уведомлений)

AlertBannerNotification Center

для обычных удаленных уведомлений максимальный размер 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, Apple представила новые функции, которые позволяют некоторые новые варианты использования для мобильных push-уведомлений-interactive push уведомления, сторонние виджеты и более крупные (2 КБ) полезные нагрузки. Сегодня, мы рады сообщить о поддержке нового мобильного push возможности анонсированы с iOS 8. Мы публикуем новую iOS 8 Пример приложения, которое демонстрирует, как эти новые функции могут быть реализованы с SNS, а также реализовали поддержку для больших 2KB полезная нагрузка.

по словам 713_hd_whats_new_in_ios_notifications конференции WWDC. Предыдущий предел размера 256 байт для толчка полезная нагрузка теперь была увеличена до 2 килобайта для iOS 8.

источник: http://asciiwwdc.com/2014/sessions/713?q=notification#1414.0

Apple push отклонит строку по разным причинам. Я тестировал различные сценарии для 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 (проверьте дату моего ответа):

"... При использовании API поставщика HTTP/2 Максимальный размер полезной нагрузки составляет 4096 байты. Используя устаревший двоичный интерфейс, максимальный размер полезной нагрузки составляет 2048 байты. Apple Push Notification service (APNs) отказывается от любых уведомлений это превышает максимальный размер."

Apple Обновила Doc:

каждое удаленное уведомление содержит полезную нагрузку. Полезная нагрузка содержит информацию о том, как система должна предупредить пользователя, а также любые пользовательские данные, которые вы предоставляете. Максимальный допустимый размер полезной нагрузки уведомления зависит от используемого API поставщика. при использовании API поставщика HTTP/2 Максимальный размер полезной нагрузки составляет 4096 байт. Используя устаревший двоичный интерфейс, максимальный размер полезной нагрузки составляет 2048 байт. Яблочный Толчок Служба уведомлений (APNs) отклоняет любое уведомление, превышающее максимальный размер.

посмотреть мой тест здесь

Я мог бы отправить до 33 китайских символов и 13 байт пользовательских значений.