Должен ли я обновить свое приложение после получения полезной нагрузки? Или я всегда должен обновлять его, позволяя загружать его для себя?

Когда ваш iPhone получает push-уведомление WhatsApp/Telegram, например

wife:
"buy pizza"

Вопрос 1: это приложение должно загружать / получать это сам. То есть баннер, который всплывает на телефоне, должен загрузить для себя + мой WhatsApp/Telegram должен загрузить снова для себя?

Мой друг ответил:

Push-уведомления могут иметь сообщение в качестве полезной нагрузки. Ваше приложение может извлечь это и динамически вставить в разговор, не делая дополнительного запроса - я делал это раньше. Заставляет это чувствовать себя намного более резко. Недостатком является то, что вы не гарантированы, что толчки будут поступать в правильном порядке (или вообще).

Но я не был уверен, что с семантической точки зрения push-уведомления не должны сами обновлять ваше приложение. Если бы они это сделали, это было бы злоупотреблением... Они должны только уведомить ваше приложение об обновлении, а затем позволить вам выполнить обновление самостоятельно, загрузив любой новый контент, который был сделан доступным.

Чтобы узнать, применяют ли лучшие компании и их приложения то, что предложил мой друг, я провел небольшой эксперимент с 3 приложениями (Gmail, WhatsApp, Telegram):

Я отключил Wi-Fi, но оставил данные сотовой связи включенными, а затем отключил доступ приложения к данным сотовой связи.

Затем я попросил кого-нибудь отправить мне сообщение / электронное письмо: Вот мои результаты:

Telegram:: я получаю оповещение (в котором есть отправитель + первая строка). Но как только я открываю приложение (или нажимаю на уведомление), у него не появляется мое новое сообщение или что-то еще.

Однако, если Telegram разрешено иметь доступ к Интернету... он загружает сообщения в фоновом режиме... то есть, если я следую этой последовательности: у меня есть Wi-Fi или на сотовых данных без ограничений в Интернете -> получить уведомление -> включить Интернет полностью отключен, но затем перейдите в приложение: я увижу полное сообщение / тело там.

Gmail: я получаю оповещение (с предварительным просмотром темы / отправителя / тела). Но как только я открываю приложение, в нем не появляется мое новое сообщение или что-то еще.

Если приложению Gmail разрешено иметь доступ к Интернету... тогда, в отличие от Telegram: без открытия только самого приложения оно будет загружать / обновлять электронные письма в Gmail. Я предполагаю, что Gmail не имеет content-available установлен в 1 но Telegram настроил 1

WhatsApp: я ничего не получаю.

Никакого взаимодействия не происходит при получении уведомления... Это происходит только в том случае, если приложение загружается само.

Мой вывод таков:

Никакого взаимодействия не происходит при получении уведомления… Это происходит только в том случае, если приложение загружается независимо от прибытия полезной нагрузки.

Gmail и Telegram делают избыточную загрузку и в основном не достаточно умны, чтобы предположить, что мой друг предложил ИЛИ что риск не получить электронное письмо / сообщение слишком велик, и лучше быть на безопасной стороне:inking_face:

Вопрос 2: Это заключение правильно?

1 ответ

Решение

Во-первых, загрузка полезных данных обычно не является проблемой. Я предполагаю, что полезная нагрузка обычно очень мала (вероятно, <1Kb для коротких текстовых сообщений). Фактически, максимальный размер для обычной удаленной полезной нагрузки составляет 4 КБ (5 КБ для уведомлений VoIP). См. Создание полезной нагрузки удаленного уведомления.

Во-вторых, вашему приложению трудно получить доступ к любым данным удаленных уведомлений. Единственный возможный способ - через Silent Notification, который не рекомендуется для простых текстовых уведомлений. Silent Notification активирует ваше приложение и дает ему 30 секунд для выполнения действий в фоновом режиме, прежде чем оно снова закрывается. Вы можете отправить удаленное тихое уведомление, которое заставляет ваше приложение вручную запускать регулярное локальное уведомление на основе этого удаленного уведомления (или отправлять как тихое, так и обычное удаленное уведомление), но, опять же, такое использование тихих уведомлений не рекомендуется:

Беззвучные уведомления не предназначены для того, чтобы держать ваше приложение активным в фоновом режиме, а также для высокоприоритетных обновлений. APN рассматривают тихие уведомления как низкоприоритетные и могут полностью ограничить их доставку, если общее количество становится чрезмерным. Фактические ограничения являются динамическими и могут изменяться в зависимости от условий, но старайтесь не отправлять более нескольких уведомлений в час.

См. Настройка молчаливого уведомления для получения дополнительной информации.

Другой возможный способ, которым приложения могут "загружать" удаленные уведомления по мере их получения, описан в разделе "Изменение полезной нагрузки удаленного уведомления". Вы можете просто сохранить уведомления и отказаться от их изменения.

Не существует универсального ответа "да / нет", который подходит для всех приложений на любой из ваших вопросов. Вместо этого существует ряд различных способов, которыми приложения могут получать удаленные уведомления и обрабатывать свои данные.

РЕДАКТИРОВАТЬ: Вы должны также реализовать application(_:didReceiveRemoteNotification:fetchCompletionHandler:) и извлекать / сохранять данные из пользовательской информации уведомления, чтобы эти данные были быстрее доступны в вашем приложении. Однако этот метод не гарантированно вызывается. Таким образом, вы можете / должны реализовать это, но, что более важно, сделать так, чтобы ваше приложение проверяло наличие новых данных с вашего собственного сервера, чтобы ничего не пропустить.

Другие вопросы по тегам