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


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

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

6 72

6 ответов:

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

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

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

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

Push-Уведомления

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

enter image description here

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

enter image description here

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

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

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

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

Обзор APNs

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

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

рис. 1-1 доставка удаленного уведомления от поставщика в приложение

image: ../Art/remote_notif_simple.jpg

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

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

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

ваш провайдер серверы имеют следующие обязанности для участия в APNs:

  • получение через APNs глобально уникальных маркеров устройств для конкретных приложений и других соответствующих данных из экземпляров вашего приложения на пользовательских устройствах. Это позволяет поставщику знать о каждом запущенном экземпляре вашего приложения.
  • определение, в соответствии с конструкцией вашей системы уведомлений, когда удаленные уведомления должны быть отправлены на каждое устройство.
  • дом и отправка запросы уведомлений в APNs, каждый запрос, содержащий полезную нагрузку уведомления и информацию о доставке; APNs затем доставляет соответствующие уведомления на предназначенные устройства от вашего имени.

для каждого запроса удаленного уведомления, отправленного поставщиком, он должен:

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

Использование Нескольких Провайдеров

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

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

image: ../Art/remote_notif_multiple.jpg

качество обслуживания, магазин-и-вперед, и Объединенные уведомления

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

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

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

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

доверие соединения работает между провайдерами и APNs, и между APNs и устройствами.

Device token trust работает от начала до конца для каждого удаленного уведомления. Это гарантирует, что уведомления маршрутизируется только между точками правильного запуска (поставщик) и завершения (устройство).

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

APNs может выдавать новый токен устройства по разным причинам:

  • пользователь устанавливает приложение на новое устройство
  • пользователь восстанавливает устройство из резервной копии
  • пользователь переустановит операционную систему система
  • другие системные события

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

рис. 1-3 установление и использование подключения поставщика на основе токенов доверяй

image: ../Art/service_provider_ct.jpg

ваш провайдер запрашивает безопасное соединение с APNs с помощью Transport layer security (TLS), представленное стрелкой с надписью "TLS initiation" на рисунке.

APNs затем дает вашему провайдеру сертификат APNs, представленный следующей стрелкой на рисунке( с надписью "Сертификат APNs"), который затем ваш провайдер подтвердит.

на этом этапе устанавливается доверие к соединению, и ваш сервер поставщика позволяет отправлять запросы удаленного push-уведомления на основе маркеров в APNs. Каждый запрос уведомления, отправляемый поставщиком, должен сопровождаться маркером проверки подлинности JWT, представленным на рисунке в виде стрелки с надписью "уведомление push."

APNs отвечает на каждый толчок, представленный на рисунке в виде стрелки с надписью " HTTP / 2 response."

подробности на ответы, которые поставщик может получить на этом шаге, см. В разделе ответ HTTP / 2 от APNs.

рис. 1-4 установление доверия к подключению поставщика на основе сертификатов

image: ../Art/service_provider_ct_certificate_2x.png

ваш провайдер запрашивает безопасное соединение с APNs с помощью Transport layer security (TLS), представленное стрелкой с надписью "TLS initiation" на рисунке.

точки доступа, то дает ваш провайдер точек доступа APN сертификат, представленный следующей стрелкой на рисунке (с надписью "Сертификат APNs"), который затем проверяет ваш поставщик.

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

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

точки доступа в устройстве доверять подключение и жетоны устройства

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

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

рис. 1-5 установление доверия соединения между устройством и В APNS

image: ../Art/service_device_ct.jpg

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

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

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

рис. 1-6 управление токеном устройства

image: ../Art/token_generation.jpg

получение и обработка маркера устройства для конкретного приложения работает следующим образом:

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

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

система доставляет маркер устройства обратно в приложение, вызывая приложение: didRegisterForRemoteNotificationswithdevicetoken: делегат метод.

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

важно

маркеры устройства APNs имеют переменную длину. Не надо жестко кодировать их размер.

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

рис. 1-7 удаленный путь уведомления от поставщика к устройство

image: ../Art/token_trust.jpg

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

Ref: Apple Push Notification Service

теперь посмотрите сюда, чтобы понять технический поток:как реализовать службу Push-уведомлений Apple в приложении iOS?

есть действительно хороший exaplanation push-уведомлений в в этой статье.

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

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