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

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

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

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, его почти аналогичная методология.

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


Обзор APNs

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

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

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

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

image: ../Art/remote_notif_simple.jpg

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

если уведомление для вашего приложения поступает с устройством, включенным, но с приложением не работает, система все еще может отображать уведомление. Если устройство выключено, когда 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

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

служба Push-уведомлений Apple включает компонент качества обслуживания (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 использует маркер устройства, чтобы гарантировать, что уведомление доставлено только в уникальную комбинацию app-device, для которой оно предназначено.

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

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

в результате приложения должны запросить маркер устройства во время запуска, как описано в APNS-to-Device Connection Trust и Device Tokens. Примеры кода см. В разделе Регистрация Для получения удаленных уведомлений.

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

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

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

image: ../Art/service_provider_ct.jpg

как показано на рисунке 1-3, доверие поставщика на основе токенов работает следующим образом:

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

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

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

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

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

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

рис. 1-4 создания сертификата-провайдер связи доверия

image: ../Art/service_provider_ct_certificate_2x.png

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

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

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

ваш поставщик должен затем отправить свой сертификат поставщика, предоставленный Apple (который вы ранее получили из своей учетной записи онлайн-разработчика, как описано в разделе" создание универсального SSL-сертификата клиента APNs "в справке Xcode), обратно в APNs, представленный стрелкой с надписью" Сертификат поставщика."

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

на этом этапе устанавливается доверие соединения, и сервер поставщика включен для отправки запросов удаленного push-уведомления на основе сертификатов в APNs.

APNS-to-Device доверие подключения и маркеры устройств

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

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

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

image: ../Art/service_device_ct.jpg

как показано на рисунке 1-5, доверие APNs к устройству работает следующим образом:

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

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

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

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

image: ../Art/token_generation.jpg

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

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

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

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

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

важно

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

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

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

image: ../Art/token_trust.jpg

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

Ref: Служба Push-Уведомлений Apple

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


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

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

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