Как работают уведомления iOS Push?

Как iOS "push" уведомления доставляются на конкретное устройство без этого устройства, которое должно опросить сервер?

Например, скажем, я получил новое сообщение на Facebook. Facebook уведомляет Apple о том, что мое устройство должно получать уведомление как таковое. Но как Apple узнает, какое устройство /IP нужно нажать на сообщение?

Ответ 1

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

Из документации.

Служба уведомления Apple Push (APN) распространяет push-уведомления на устройства, имеющие зарегистрированные приложения для получения этих уведомлений. Каждое устройство устанавливает аккредитованное и зашифрованное IP-соединение с услугой и получает уведомления по этому постоянному соединению. Провайдеры соединяются с APN через постоянный и безопасный канал, контролируя входящие данные, предназначенные для их клиентских приложений. Когда появятся новые данные для приложения, поставщик подготавливает и отправляет уведомление по каналу APN, которое направляет уведомление на целевое устройство.

Я предлагаю прочитать документацию для получения дополнительной информации и способов ее использования и настройки. Это все.

Push Notifications

Ответ 2

Каждое устройство может быть обновлено данными с использованием собственных уникальных токенов устройства. Эта картина объясняет все..

enter image description here

Ответ 3

Я создал инфографику, чтобы объяснить рабочий процесс push-уведомлений. Надеюсь, что это будет полезно.

введите описание изображения здесь

Ответ 4

Устройство не проводит опрос сервера для push-уведомлений.

Чтобы это было просто, подумайте, что iPhone подключен к Интернету. При подключении к Интернету iPhone устанавливает соединение с сервером уведомлений Apple Push, это соединение является открытым соединением, что означает, что данные могут быть отправлены на iPhone с сервера, как только данные поступят на сервер.

Apple не использует HTTP-протокол для Push-уведомлений, но если вы понимаете HTTP-протокол, это почти аналогичная методология.

http://en.wikipedia.org/wiki/Push_technology#HTTP_server_push

Ответ 5

Обзор APN

Служба уведомления Apple Push (APN) является центральной частью функции удаленных уведомлений. Это надежный, безопасный и высокоэффективный сервис для разработчиков приложений для распространения информации на устройства iOS (и, косвенно, watchOS), tvOS и macOS.

При первоначальном запуске вашего приложения на пользовательском устройстве система автоматически устанавливает аккредитованное, зашифрованное и постоянное IP-соединение между вашим приложением и APN. Это соединение позволяет вашему приложению выполнять настройку, чтобы он мог получать уведомления, как описано в разделе "Настройка поддержки удаленных уведомлений" .

Другая половина подключения для отправки уведомлений - постоянный безопасный канал между сервером-провайдером и APN - требует настройки в вашей учетной записи онлайн-разработчика и использования криптографических сертификатов, поставляемых Apple. Поставщик - это сервер, который вы развертываете и управляете, настраиваете для работы с APN. На рисунке 1-1 показан путь доставки для удаленного уведомления.

Рисунок 1-1. Предоставление удаленного уведомления от поставщика к приложению image:../Art/remote_notif_simple.jpg

С настройкой push-уведомлений на ваших провайдерах и в вашем приложении ваши провайдеры могут затем отправлять запросы уведомлений в APN. APN передает соответствующие информационные данные уведомлений каждому целевому устройству. При получении уведомления система доставляет полезную нагрузку в соответствующее приложение на устройстве и управляет взаимодействием с пользователем.

Если уведомление для вашего приложения поступило с включенным устройством, но при запуске приложения система все равно может отображать уведомление. Если устройство отключено, когда APN отправляет уведомление, APN удерживаются в уведомлении и снова попытаются позже (подробнее см. В разделе "Качество обслуживания", "Сохранять и переадресовать" и "Коаллеризованные уведомления" ).

Обязанности поставщика

У ваших серверов-поставщиков есть следующие обязанности для участия в APN:
- получение через APN глобально уникальных токенов устройств, специфичных для приложения, и других соответствующих данных из экземпляров вашего приложения на пользовательских устройствах. Это позволяет провайдеру узнать о каждом запущенном экземпляре вашего приложения.
- Определение в соответствии с дизайном системы уведомлений о необходимости отправки удаленных уведомлений на каждое устройство.
- Создание и отправка уведомлений для APN, каждый запрос, содержащий полезную информацию уведомления и информацию о доставке; Затем APN передает соответствующие уведомления предполагаемым устройствам от вашего имени.

Для каждого запроса удаленного уведомления, отправляемого провайдером, он должен:
- Создайте словарь JSON, содержащий полезную нагрузку для уведомлений, как описано в разделе "Создание полезной нагрузки удаленного оповещения".
- добавьте полезную нагрузку, глобальный уникальный токен устройства и другую информацию о доставке в запрос HTTP/2. Информацию о токенах устройства см. В разделе Доверие к подключению устройств и устройств к устройствам. Информацию о формате запроса HTTP/2 и возможных ответах и ​​ошибках APN см. В разделе "Связь с APN".
- Отправлять HTTP/2 запрос APN, включая криптографические учетные данные в виде маркера или сертификата, по постоянному защищенному каналу.
- Установка этого безопасного канала описана в разделе Архитектура безопасности.

Использование нескольких поставщиков

На рис. 1-2 изображен вид виртуальной сети, который APN позволяет использовать устройства, работающие с вашими приложениями. Чтобы обрабатывать нагрузку на уведомление, вы обычно развертываете несколько поставщиков, каждый из которых имеет собственное постоянное и безопасное соединение с APN. Каждый провайдер может затем отправлять запросы уведомлений, ориентированные на любое устройство, для которого у провайдера есть действительный токен устройства.

Рисунок 1-2 Нажатие удаленных уведомлений от нескольких поставщиков на несколько устройств

image:../Art/remote_notif_multiple.jpg

Качество обслуживания, сохранение и переадресация и объединенные уведомления

Служба уведомления Apple Push включает компонент качества обслуживания (QoS), который выполняет функцию store-and-forward. Если APN пытается доставить уведомление, а целевое устройство отключено, APN сохраняет уведомление в течение ограниченного периода времени и доставляет его, когда устройство снова становится доступным. Этот компонент хранит только самое последнее уведомление для каждого устройства и каждого приложения. Если устройство находится в автономном режиме, отправка запроса уведомления, направленного на это устройство, приводит к отбрасыванию предыдущего запроса. Если устройство остается в автономном режиме в течение длительного времени, все его сохраненные уведомления в APN отбрасываются.

Чтобы разрешить объединение аналогичных уведомлений, вы можете включить идентификатор коллапса в запрос уведомления. Обычно, когда устройство подключено к сети, каждый запрос на уведомление, отправляемый в APN, приводит к уведомлению, отправленному на устройство. Однако, когда ключ заголовка apns-collapse-id присутствует в заголовке запроса HTTP/2, APN объединяет запросы, значение которых для этого ключа одинаково. Например, служба новостей, которая отправляет один и тот же заголовок дважды, может использовать одно и то же значение идентификатора коллапса для обоих запросов. Затем APN объединяют два запроса в одно уведомление для доставки на устройство. Подробнее о ключе apns-collapse-id.

Архитектура безопасности

APNs обеспечивает сквозную криптографическую проверку и аутентификацию с использованием двух уровней доверия: доверия доверия и доверия к токенам.

Доверие к соединению работает между поставщиками и APN, а также между APN и устройствами.

Доверие к токенам устройств работает от конца до конца для каждого удаленного уведомления. Это гарантирует, что уведомления направляются только между точками пуска (провайдера) и конечного (устройства).

Маркер устройства представляет собой непрозрачный экземпляр NSData, который содержит уникальный идентификатор, назначенный Apple для конкретного приложения на определенном устройстве. Только APN могут декодировать и читать содержимое токена устройства. Каждый экземпляр приложения получает свой уникальный токен устройства, когда он регистрируется с помощью APN, и затем должен пересылать токен своему провайдеру, как описано в разделе "Настройка поддержки удаленных уведомлений" . Поставщик должен включать токен устройства в каждом запросе push-уведомления, который нацелен на соответствующее устройство; APN использует токен устройства, чтобы гарантировать, что уведомление доставляется только в уникальную комбинацию приложений и устройств, для которой он предназначен.

APN могут выпускать новый токен устройства по разным причинам:
- Пользователь устанавливает ваше приложение на новом устройстве
- Пользователь восстанавливает устройство из резервной копии
- Пользователь переустанавливает операционную систему
- Другие события, определяемые системой

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

Чтобы установить сеансы TLS на основе HTTP/2 с APN, вы должны убедиться, что для каждого из ваших провайдеров установлен общий корневой сертификат CA GeoTrust. Если поставщик работает под управлением macOS, этот корневой сертификат по умолчанию находится в цепочке ключей. В других системах этот сертификат может потребовать явной установки. Вы можете загрузить этот сертификат с веб-сайта Root Certificates GeoTrust. Вот прямая ссылка на сертификат.

Рисунок 1-3 иллюстрирует использование API-провайдера APNs на основе протокола HTTP/2 для установления доверия и использования токенов аутентификации поставщика JWT для отправки уведомлений.

Рисунок 1-3. Установление и использование доверия провайдера на основе токенов image:../Art/service_provider_ct.jpg Как показано на рисунке 1-3, доверие провайдера на основе токенов работает следующим образом:

Ваш провайдер запрашивает безопасное соединение с APN с использованием безопасности транспортного уровня (TLS), представленной в виде стрелки с надписью "Начало TLS" на рисунке. Затем APN предоставляет вашему провайдеру сертификат APN, представленный следующей стрелкой на рисунке (с надписью "Сертификат APN" ), который затем подтверждает ваш провайдер. На этом этапе доверие к соединению установлено, и ваш сервер провайдера включен для отправки запросов push-push на основе токенов для APN. Каждый запрос на уведомление, отправляемый вашим провайдером, должен сопровождаться маркером аутентификации JWT, представленным на рисунке как стрелка с надписью "Notification push". APN отвечают каждому нажатию, представленному на рисунке, как стрелка с надписью "HTTP/2 response". Для специфики ответов, которые ваш провайдер может получить для этого шага, см. HTTP/2 Response от APN.

Рисунок 1-4 иллюстрирует использование SSL-сертификата Apple для установления доверия между провайдером и APN. В отличие от рисунка 1-3, эта цифра не отображает сам push-уведомление, но останавливается при создании соединения TLS (Transport Layer Security). В схеме доверия на основе сертификатов запросы push-уведомлений не аутентифицируются, но проверяются с помощью прилагаемого токена устройства.

Рисунок 1-4. Установление доверия к поставщику на основе сертификата image:../Art/service_provider_ct_certificate_2x.png

Как показано на Рисунке 1-4, доверие поставщика-к-APN на основе сертификатов работает следующим образом:

Ваш провайдер запрашивает безопасное соединение с APN с использованием безопасности транспортного уровня (TLS), представленной в виде стрелки с надписью "Начало TLS" на рисунке. Затем APN предоставляет вашему провайдеру сертификат APN, представленный следующей стрелкой на рисунке (с надписью "Сертификат APN" ), который затем подтверждает ваш провайдер. Затем ваш провайдер должен отправить сертификат поставщика услуг Apple (который вы ранее получили из своей учетной записи онлайн-разработчика, как описано в "Сгенерировать сертификат SSL универсального APNs клиента" в справке Xcode) обратно в APN, представленный как стрелка с надписью "Поставщик сертификат". Затем APN проверяет ваш сертификат поставщика, тем самым подтверждая, что запрос на подключение был получен от законного провайдера и устанавливает ваше соединение TLS. На этом этапе доверие к соединению установлено, и ваш сервер провайдера разрешен для отправки запросов push-уведомлений на основе сертификата для APN. Доверие к подключению устройств APN к устройству и токены устройства

Доверие между APN и каждым устройством устанавливается автоматически, без участия вашего приложения, как описано в этом разделе.

Каждое устройство имеет криптографический сертификат и частный криптографический ключ, предоставляемый операционной системой при начальной активации устройства и хранящийся в брелках устройств. Во время активации APN аутентифицируют и проверяют подключение к устройству на основе сертификата и ключа, как показано на рисунке 6-5.

Рисунок 1-5. Установление доверия между устройством и APN. image:../Art/service_device_ct.jpg Как показано на рисунке 1-5, доверие APN к устройству работает следующим образом:

Доверительное согласование начинается, когда устройство инициирует соединение TLS с APN, как показано в верхней стрелке на рисунке. APN возвращает сертификат APN на устройство. Операционная система проверяет этот сертификат, а затем, как показано в стрелке "Сертификат устройства", отправляет сертификат устройства в APN. Наконец, как показано нижней стрелкой на рисунке, APN проверяет сертификат устройства, устанавливая доверие. При подключении TLS, установленном между APN и устройством, приложения на устройстве могут регистрироваться в APN для получения своих токенов для конкретных приложений для удаленных уведомлений. Подробные сведения и примеры кода см. В разделе Регистрация для получения удаленных уведомлений при настройке поддержки удаленных уведомлений.

После получения токена устройства приложение должно подключиться к поставщику, связанным с приложениями, и переслать ему токен. Этот шаг необходим, поскольку провайдер должен включать токен устройства позже, когда он отправляет запрос на уведомление, в APN, ориентируясь на устройство. Код, который вы пишете для пересылки маркера, также отображается в разделе Регистрация для получения удаленных уведомлений.

Если пользователь активирует устройство в первый раз или APNs выпустили новый токен устройства, процесс аналогичен и показан на рисунке 6-6.

Рисунок 1-6 Управление токеном устройства image:../Art/token_generation.jpg Получение и обработка токена устройства, предназначенного для приложения, работает следующим образом:

Ваше приложение регистрируется с помощью APN для удаленных уведомлений, как показано в верхней стрелке. Если приложение уже зарегистрировано, и токен устройства не изменился, система быстро вернет существующий токен в приложение, и этот процесс переходит к шагу 4.

Если требуется новый токен устройства, APN генерирует его, используя информацию, содержащуюся в сертификате устройств. Он шифрует токен с помощью ключа токена и возвращает его на устройство, как показано в средней стрелке справа. Система возвращает маркер устройства обратно в ваше приложение, вызвав ваше приложение: didRegisterForRemoteNotificationsWithDeviceToken: метод делегирования. После получения токена ваше приложение (в рамках метода делегата) должно перенаправить его вашему провайдеру в двоичном или шестнадцатеричном формате. Ваш провайдер не может отправлять уведомления на устройство без этого токена. Для получения дополнительной информации см. "Регистрация для получения удаленных уведомлений" в разделе "Настройка поддержки удаленных уведомлений" .

ВАЖНО
Анекдоты APNs имеют переменную длину. Не печатайте их размер.

Когда ваш провайдер отправляет запрос Push-уведомления в APN, он включает маркер устройства, который идентифицирует уникальную комбинацию устройств и устройств. Этот шаг показан в стрелке "токен, полезная нагрузка" между провайдером и APN на рисунке 6-7. APN расшифровывает токен, чтобы гарантировать достоверность запроса и определить целевое устройство. Если APN определяет, что отправитель и получатель являются законными, он затем отправляет уведомление идентифицированному устройству.

Рисунок 1-7. Отправляйте путь уведомления от поставщика к устройству image:../Art/token_trust.jpg

После того, как устройство получит уведомление (и после последнего шага, показанного на рисунке 1-7), система отправит удаленное уведомление в ваше приложение.

Ссылка: Служба уведомления Apple Push

Ответ 6

В этой статье есть действительно хорошая экспланация push-уведомлений.

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

Но что, если что-то интересное происходит, и вы хотите сообщить об этом пользователю, даже если они не используют ваше приложение?