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

143

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

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

hpique
источник

Ответы:

248

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

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

Это то, что я смог найти в некоторых экспериментах.

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

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

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

аскандроли
источник
8
Следует уточнить, что встроенный в приложение UIAlertView не имеет ограничения на отображение; текст более определенной длины будет отображаться в режиме прокрутки. Однако SMS или push-уведомление, вероятно, имеет ограничение в 107 символов.
azdev 05
1
И отображаемый текст не ограничен полезной нагрузкой, потому что при использовании метода локализации он больше не соответствует 1: 1. Полезная нагрузка может быть короткой, а окончательное сообщение может быть намного длиннее. Речь идет об отображении сообщения, которое строго не связано с максимальной длиной полезной нагрузки.
Marcin
1
Я мог бы отправить огромную полезную нагрузку в песочницу, и она была бы доставлена, но производственный сервер был очень ограничен всего 256 байтами и ни одним байтом больше.
DoctorDbx
Может ли кто-нибудь сказать, что длина текста push-уведомления GCM Android отображается?
harikrishnan
1
1. Для уведомлений по протоколу передачи голоса через Интернет (VoIP) максимальный размер полезной нагрузки составляет 5 КБ (5120 байт). 2. Для всех остальных удаленных уведомлений максимальный размер полезной нагрузки составляет 4 КБ (4096 байт).
vikram
26

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

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

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

Анураг
источник
Кодировка ASCII нарушает спецификацию JSON, которая требует UTF-8, UTF-16LE, UTF-16BE, UTF-32LE или UTF-32BE. См. Ietf.org/rfc/rfc4627.txt ; страница 4.
Аарон Брагер
14
ASCII - это подмножество UTF-8, поэтому всегда безопасно передавать 8-битный ASCII по сети.
Патрик Хорн
просто любопытно, почему вы тогда упомянули. Это должно быть 236 байт. .. Я работаю с проблемой усечения. Если я считаю общую длину символов, она не превышает 1024 символов, длина символа сообщения об усечении составляет 509 символов. Я получаю. Что могло быть возможной причиной усеченного ответа. Любое предложение !!
Хитендра Джоши,
15

Предел уведомлений в расширенном формате задокументирован здесь .

В нем прямо говорится:

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

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

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

Уильям Деннисс
источник
12

РЕДАКТИРОВАТЬ:

Обновление ответа последней информацией

Максимальный размер, разрешенный для полезной нагрузки уведомления, зависит от того, какой 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 килобайта; Служба push-уведомлений Apple отклоняет любые уведомления, превышающие этот предел. (До iOS 8 и в OS X максимальный размер полезной нагрузки составлял 256 байт.)

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

jcesarmobile
источник
Уважаемый участник, голосующий против, если вы проголосовали против из-за того, что ссылки не работают, вся информация уже здесь, и она верна, ссылка была только для справки. Также хорошо прокомментировать, почему вы не проголосовали.
jcesarmobile
10

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

ПредупреждениеБаннерЦентр уведомлений

Лузи
источник
7

Для обычных удаленных уведомлений максимальный размер составляет 4 КБ (4096 байт) https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CreatingtheNotificationPayload.html.

### iOS ограничение на размер составляет 256 байт, но с момента появления iOS 8 было изменено на 2 КБ!

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

В iOS 8 Apple представила новые функции, которые позволяют использовать некоторые новые варианты использования мобильных push-уведомлений - интерактивные push-уведомления, сторонние виджеты и полезные нагрузки большего размера (2 КБ). Сегодня мы рады объявить о поддержке новых возможностей мобильных push-уведомлений, анонсированных в iOS 8. Мы публикуем новый образец приложения для iOS 8, демонстрирующий, как эти новые функции могут быть реализованы с помощью SNS, а также реализовали поддержку более крупных полезных нагрузок 2 КБ.

Jorgesys
источник
5

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

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

клефевр
источник
@Diziet Извините, я не могу найти официального сообщения по этому поводу, но он был официально объявлен во время последнего WWDC. Об этом объявил
klefevre
Вот слайды / видео, если кому-то нужна ссылка на яблоко: developer.apple.com/videos/wwdc/2014 - Поиск «Что нового в уведомлениях iOS»
Diziet
@ kl91 Ничего страшного. Не синхронизировавшись с комментариями, я удалил свой комментарий, когда нашел источник. Если вы загрузите PDF-файл, он будет на странице 82.
Diziet
1
@ kl94, поэтому, если приложение по-прежнему поддерживает таргетинг для iOS 7, будет ли ограничение размера 2 КБ также применяться к push-уведомлениям, отправляемым на устройства iOS 7? Или вопрос: есть ли новые 2 КБ для всех push-уведомлений, независимо от того, на какую платформу они нацелены?
Jing
@Jing Мы можем оптимистично полагать, что новый предел размера будет применяться ко всем платформам.
klefevre
1

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()
Филип Фунг
источник
Спасибо. Я думаю, что важным моментом является аргументация 120 - как вы пришли к этому числу? Было бы лучше выполнить усечение длины после кавычек и новой строки, поскольку это лучшее представление длины последней строки, отправленной в Apple?
Rup
Спасибо за ваш комментарий об удалении всех цитат, в iOS 11 есть странная ошибка, когда сообщение звучит, но ничего не показывает.
Педро Гоэс, 02
1

Согласно обновленному документу Apple (проверьте дату моего ответа):

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

Бурак
источник
1

Обновленный документ Apple:

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

SaRaVaNaN DM
источник
0

см. мой тест здесь

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

огненный медведь
источник