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

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

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

11 ответов


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

в iOS 8 и более поздних версиях максимальный размер полезной нагрузки уведомления составляет 2 килобайта; служба Push-уведомлений Apple отказывается от любого уведомления, превышающего этот предел. (До 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 байтов было отклонено. Учитывая, что документы are очень явные в этом пункте я предлагаю безопаснее использовать 256 независимо от того, что вы можете достичь экспериментально, поскольку нет никакой гарантии, что Apple не изменит его на 256 в будущем.

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


EDIT:

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

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

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

при использовании API поставщика HTTP/2 Максимальный размер полезной нагрузки составляет 4 КБ (4096 байт). Для уведомлений Voice over Internet Protocol (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 КБ) полезные нагрузки. Сегодня, мы рады сообщить о поддержке нового mobile push возможности, объявленные с iOS 8. Мы публикуем новый iOS 8 Пример приложения, демонстрирующего, как эти новые функции могут быть реализованы с SNS, а также реализовали поддержку для больших 2KB полезная нагрузка.


согласно WWDC 713_hd_whats_new_in_ios_notifications. Предыдущий предел размера 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 байты. Служба Push-уведомлений Apple (APNs) отказывается от любых уведомлений это превышает максимальный размер."


Apple Обновил Doc:

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


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

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