Як працюють iOS-повідомлення Push?


98

Як iOS "наштовхувати" сповіщення про доставку на певний пристрій, без цього пристрою потрібно опитувати сервер?

Наприклад, скажімо, я отримав нове повідомлення у Facebook. Facebook повідомляє Apple, що мій пристрій повинен отримувати сповіщення як таке. Але як Apple знає, до якого пристрою / IP-адреси наштовхнути повідомлення?


2
@Wain Шукаю детальне пояснення на технічному рівні. Ця стаття надзвичайно високого рівня. Отже, мій пристрій постійно підтримує відкритий зв'язок із push-серверами Apple?
Енді Хін

Мені більше знайомий андроїд push, але зазвичай при встановленні програми він реєструє пристрій з унікальним ідентифікатором у Apple. Потім, коли facebook надсилає повідомлення яблуку, яблуко пересилатиме його на унікальний ідентифікатор пристроїв.
Панама Джек

6
@Pjack так, але з моїм пристроєм постійно змінюються різні вежі стільникового зв'язку, різні мережі Wi-Fi, як Apple знає IP для мого унікального ідентифікатора?
Енді Хін

@whydna Дякую, що задали це запитання. Я хотів зрозуміти точно те саме. Я вважаю , що це відповідь на моє запитання тут: stackoverflow.com/questions/18859732 / ...
MightyMouse

@AndyHin ОС пристрою (iOS) знає, які сервери (APN) дійсні. Пристрій підключається до цих серверів і підтримує з'єднання відкритим. Це з'єднання, ймовірно, пов'язане з ідентифікатором пристрою та іншими метаданими (номером телефону). Коли повідомлення потрібно «відсунути», APN-файли знаходять правильне з'єднання і надсилають його вниз, що вже відкрите з'єднання. Тож APN не намагається встановити з'єднання з пристроєм, це завжди пристрій, який відкриває це з'єднання. Одне з'єднання на пристрій.
Тодд

Відповіді:


49

Для мене це було занадто багато, щоб так коментувати.

З документації.

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

Я пропоную прочитати документацію для отримання додаткової інформації та використання та налаштування. Це все є.

Натисніть сповіщення


Дякую за відповідь.
MightyMouse

7
Отже, Apple підтримує статичний IP на вашому пристрої?
CMCDragonkai

Мені було цікаво, коли зрозуміли, що мій сервер повинен надіслати повідомлення APNS ДЛЯ ВСІХ ЦІНИХ ПРИСТРІЙ! :(
Володимир

4
@CMCDragonkai Пристрій встановлює з'єднання, а не сервер.
Hitechcomputergeek

7
тож пристрої підтримують тривалий тип опитування / розетки завжди з сервісом APN? Якщо це так, то як служба APN обробляє стільки з'єднань. Якщо сервер може підтримувати 50k з'єднань, а користувачів завжди 500 мільйонів, сервісу потрібно хоча б 10000 серверів. Це практичний сценарій?
AV94

87

Кожен пристрій може бути оновлений даними, використовуючи власні унікальні маркери пристроїв. Ця картина пояснює все. .

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


Будь-яка ідея в чому полягає використання токена пристрою? Чи використовується для шифрування зв'язку між сервером APNS та додатком чи деінде?
Муген

1
@Mugen: Маркер пристрою використовується APNS для визначення того, на який пристрій він повинен пересилати корисне навантаження, надіслане постачальником!
D4ttatraya

@Karan - Чи є різниця між сповіщеннями, які призначені для користувача (наприклад, "Ей, користувач, у вас є повідомлення!") Та тими, які призначені для того, щоб розбудити додаток і мовчки сказати йому зробити деяку обробку фону?
Howiecamp

@Howiecamp Якщо ви використовуєте push-сповіщення, ви отримуватимете повідомлення щоразу, коли надійде повідомлення, якщо програма запущена. Також доступні дані про активне сповіщення, коли користувач торкається сповіщення від центру сповіщень та запускає додаток. За цей час ви можете виконувати процеси, які хочете зробити.
Каран Алангат

@KaranAlangat, Як тут обробляється Значок? Як сервер знає про це?
GvSharma

22

Я створив інфографіку для пояснення робочого процесу push-повідомлень. Сподіваюся, що це корисно.

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


21

Огляд APN

Служба Apple Push Notification (APN) - це центральна функція віддалених повідомлень. Це надійний, безпечний та високоефективний сервіс для розробників додатків для поширення інформації на пристрої iOS (і, опосередковано, watchOS), tvOS та macOS.

Під час первинного запуску програми на пристрої користувача система автоматично встановлює акредитований, зашифрований та стійкий IP-зв’язок між вашим додатком та APN. Це з'єднання дозволяє вашій програмі виконати налаштування, щоб вона могла отримувати сповіщення, як пояснено в Налаштування підтримки віддаленого повідомлення.

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

Малюнок 1-1 Додавання віддаленого повідомлення від постачальника до програми

зображення: ../Art/remote_notif_simple.jpg

Після завершення налаштування натискання сповіщень у ваших постачальників та у вашій програмі ваші постачальники можуть потім надсилати запити на сповіщення APN. APN передає відповідні корисні навантаження на кожен цільовий пристрій. Після отримання повідомлення система доставляє корисний вантаж у відповідний додаток на пристрої та управляє взаємодією з користувачем.

Якщо сповіщення про ваш додаток надходить із включеним пристроєм, але не працює, система все одно може відображати сповіщення. Якщо пристрій вимкнено, коли APNs надсилає сповіщення, APN утримує сповіщення та повторює спробу пізніше (докладні відомості див. У розділі Якість обслуговування, повідомлення про зберігання та переадресацію та з'єднання).

Обов'язки постачальника

Сервери вашого постачальника несуть такі обов'язки щодо участі в APN:

  • Отримання через APN глобально унікальних, специфічних для додатка жетонів пристроїв та інших відповідних даних від примірників вашого додатка на пристроях користувача. Це дозволяє провайдеру знати про кожен запущений примірник вашого додатка.
  • Визначення, відповідно до дизайну вашої системи повідомлень, коли віддалене сповіщення потрібно надсилати на кожен пристрій.
  • Створення та відправлення запитів на сповіщення до APN, кожен запит містить інформацію про корисний вантаж та інформацію про доставку; Тоді APN надає відповідні сповіщення на призначені пристрої від вашого імені.

Для кожного запиту на віддалене сповіщення, який постачальник надсилає, він повинен:

  • Створіть словник JSON, що містить корисну навантаження сповіщення, як описано у Створенні навантаження віддаленого повідомлення.
  • Додайте корисний вантаж, унікальний маркер пристрою та іншу інформацію про доставку до запиту HTTP / 2. Для отримання інформації про маркери пристроїв див. Довіреність підключення APN до пристрою та маркери пристроїв. Інформацію про формат запиту HTTP / 2, а також про можливі відповіді та помилки APN-файлів див. У розділі Спілкування з APN.
  • Надішліть запит HTTP / 2 на APN, включаючи криптографічні дані у вигляді маркера або сертифіката, через стійкий захищений канал.
  • Створення цього захищеного каналу описано в архітектурі безпеки.

Використання декількох постачальників

На малюнку 1-2 зображено тип віртуальної мережі, яку APN дозволяє для пристроїв, що працюють з вашими програмами. Для обробки завантаження сповіщень зазвичай розгортаєте кілька постачальників, кожен з яких має своє постійне та безпечне з'єднання з APN. Потім кожен постачальник може надсилати запити на сповіщення, націлені на будь-який пристрій, для якого постачальник має дійсний маркер пристрою.

Рисунок 1-2 Переміщення віддалених повідомлень від декількох постачальників на декілька пристроїв

зображення: ../Art/remote_notif_multiple.jpg

Якість обслуговування, зберігання та передача та злагоджені сповіщення

Послуга Apple Push Notification включає компонент якості обслуговування (QoS), який виконує функцію зберігання та пересилання. Якщо APN намагається доставити сповіщення, а цільовий пристрій перебуває в режимі офлайн, APN зберігає сповіщення на обмежений проміжок часу та доставляє його, коли пристрій знову стане доступним. Цей компонент зберігає лише останнє повідомлення на пристрій та на додаток. Якщо пристрій перебуває в режимі офлайн, надсилання запиту на сповіщення, орієнтованого на цей пристрій, призводить до відмови попереднього запиту. Якщо пристрій тривалий час залишається в режимі офлайн, усі його збережені сповіщення в APN-картах відкидаються.

Щоб дозволити з'єднання подібних сповіщень, ви можете включити ідентифікатор згортання в запит на сповіщення. Зазвичай, коли пристрій перебуває в Інтернеті, кожен запит на сповіщення, який ви надсилаєте до APN, призводить до отримання повідомлення на пристрій. Однак, коли ключ apns-cras-id присутній у заголовку запиту HTTP / 2, APN з’єднує запити, значення для цього ключа однакове. Наприклад, служба новин, яка надсилає один і той же заголовок двічі, може використовувати те саме значення ідентифікатора згортання для обох запитів. Тоді APN зв'язали б два запити в одне повідомлення про доставку на пристрій. Докладні відомості про ключ apns-colla-id.

Архітектура безпеки

APN застосовує кінцеву криптографічну перевірку та автентифікацію, використовуючи два рівні довіри: довіру до з'єднання та довіру маркера пристрою.

Довіра підключення працює між провайдерами та APN, а також між APN та пристроями.

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

Маркер пристрою - непрозорий екземпляр NSData, який містить унікальний ідентифікатор, призначений Apple певній програмі на певному пристрої. Лише APN можуть декодувати та читати вміст маркера пристрою. Кожен екземпляр програми отримує свій унікальний маркер пристрою, коли він реєструється в APN, і потім повинен переслати маркер своєму провайдеру, як описано в Налаштування підтримки віддаленого повідомлення. Постачальник повинен включати маркер пристрою у кожен запит про натискання, який спрямований на пов'язаний пристрій; APN використовує маркер пристрою, щоб переконатися, що повідомлення надходить лише до унікальної комбінації додатків та пристроїв, для якої воно призначене.

APN можуть видавати новий маркер пристрою з різних причин:

  • Користувач встановлює ваш додаток на новий пристрій
  • Користувач відновлює пристрій із резервної копії
  • Користувач перевстановлює операційну систему
  • Інші визначені системою події

Як результат, додатки повинні запитувати маркер пристрою під час запуску, як це описано в довірі про підключення APNs-to-Device та маркерів пристроїв. Для прикладів коду див. Реєстрація для отримання віддалених повідомлень.

Щоб встановити TLS-сеанси на основі HTTP / 2, потрібно переконатися, що кореневий сертифікат GeoTrust Global CA встановлений на кожному з ваших постачальників. Якщо постачальник працює під управлінням macOS, цей кореневий сертифікат за замовчуванням знаходиться в брелоку брелоків. В інших системах цей сертифікат може вимагати явної установки. Ви можете завантажити цей сертифікат з веб-сайту GeoTrust Root Certificate. Ось пряме посилання на сертифікат.

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

Малюнок 1-3 Встановлення та використання довіри про підключення провайдера на основі лексем

зображення: ../Art/service_provider_ct.jpg

Як показано на малюнку 1-3, довіра провайдера на основі лексем працює наступним чином:

Ваш постачальник просить захистити безпечне з'єднання з APN, використовуючи захист транспортного рівня (TLS), представлений у вигляді стрілки з написом "Ініціація TLS" на рисунку.

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

На цьому етапі встановлюється довіра підключення, і сервер вашого постачальника увімкнено надсилати запити віддалених повідомлень на основі токенів APN. Кожен запит на сповіщення, який надсилає ваш постачальник, повинен супроводжуватися маркером аутентифікації JWT, який зображений на малюнку як стрілка з написом "Поштовх повідомлень".

APN відповідає на кожен поштовх, представлений на рисунку у вигляді стрілки з написом "HTTP / 2 відповідь".

Детальну інформацію про відповіді, які може отримати ваш оператор на цьому кроці, див. У відповіді HTTP / 2 від APN.

Малюнок 1-4 ілюструє використання сертифіката SSL, виданого Apple, для встановлення довіри між постачальником та APN. На відміну від рисунка 1-3, ця цифра не відображає сповіщення про сповіщення, але зупиняється на встановленні з'єднання безпеки транспортного шару (TLS). У схемі довіри на основі сертифікатів запити про натискання сповіщень не автентифіковані, але вони перевірені за допомогою супроводу маркера пристрою.

Малюнок 1-4 Встановлення довіри про підключення провайдера на основі сертифікатів

зображення: ../Art/service_provider_ct_certificate_2x.png

Як показано на рисунку 1-4, довіра постачальників до APN-серверів працює на наступному:

Ваш постачальник просить захистити безпечне з'єднання з APN, використовуючи захист транспортного рівня (TLS), представлений у вигляді стрілки з написом "Ініціація TLS" на рисунку.

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

Потім ваш постачальник повинен надіслати свій сертифікат постачальника Apple (який ви раніше отримали з свого облікового запису розробника в Інтернеті, як це пояснено у розділі "Створення універсального сертифіката SSL клієнта APNs" у довідці Xcode) назад до APN-файлів, представлених стрілкою з написом "Постачальник" сертифікат ».

Тоді APN підтверджує сертифікат вашого постачальника, тим самим підтверджуючи, що запит на з'єднання походить від законного постачальника, і встановлює ваше TLS-з'єднання.

На цьому етапі встановлюється довіра підключення, і сервер вашого постачальника увімкнено надсилати на основі сертифікатів віддалені запити на віддалене сповіщення в APN.

Довірені підключення APN до пристрою та маркери пристроїв

Довіра між APN та кожним пристроєм встановлюється автоматично, без участі вашої програми, як описано в цьому розділі.

Кожен пристрій має криптографічний сертифікат та приватний криптографічний ключ, наданий операційною системою при початковій активації пристрою та зберігається у брелоку пристрою. Під час активації APN підтверджує та підтверджує з'єднання з пристроєм на основі сертифіката та ключа, як показано на малюнку 6-5.

Малюнок 1-5 Встановлення довіри з'єднання між пристроєм та APN

зображення: ../Art/service_device_ct.jpg

Як показано на малюнку 1-5, довіра APN до пристрою працює наступним чином:

  • Домовлення про довіру починається, коли пристрій ініціює TLS-з'єднання з APN, як показано у верхній стрілці на малюнку.
  • APN повертає на пристрій сертифікат APN.
  • Операційна система підтверджує цей сертифікат і потім, як показано на стрілці «Сертифікат пристрою», надсилає сертифікат пристрою APN.
  • Нарешті, як зазначено стрілкою внизу на малюнку, APN підтверджує сертифікат пристрою, встановлюючи довіру.
  • Завдяки TLS-з'єднанню, встановленому між APN та пристроєм, програми на пристрої можуть реєструватися в APN, щоб отримувати свої специфічні маркери пристрою для віддалених сповіщень. Докладніше та приклади коду див. У розділі Реєстрація для отримання віддалених повідомлень у налаштуваннях підтримки віддаленого повідомлення.

Отримавши маркер пристрою, додаток повинен підключитися до асоційованого постачальника програми та переслати маркер на нього. Цей крок необхідний, оскільки постачальник повинен включити маркер пристрою пізніше, коли він надсилає запит на сповіщення до APN-адрес, орієнтованих на пристрій. Код, який ви пишете для переадресації маркера, також відображається в розділі Реєстрація для отримання віддалених повідомлень.

Незалежно від того, чи користувач активує пристрій вперше, чи APN видав новий маркер пристрою, процес аналогічний і показаний на малюнку 6-6.

Рисунок 1-6 Керування маркером пристрою

зображення: ../Art/token_generation.jpg

Отримання та обробка маркера для певного додатка працює так:

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

Коли потрібен новий маркер пристрою, APN генерує той, використовуючи інформацію, що міститься в сертифікаті пристрою. Він зашифровує маркер за допомогою клавіші токена і повертає його на пристрій, як показано в середині праворуч вказівною стрілкою.

Система повертає маркер пристрою до вашого додатка, викликаючи вашу програму: didRegisterForRemoteNotificationsWithDeviceToken: метод delegate.

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

ВАЖЛИВО

Маркери пристроїв APN мають різну довжину. Не жорстко кодуйте їх розміри.

Коли ваш постачальник надсилає запит на натискання сповіщення APN, він включає маркер пристрою, який визначає унікальну комбінацію додатків і пристроїв. Цей крок показаний на стрілці «Токен, корисна навантаження» між провайдером та APN на малюнку 6-7. APN розшифровує маркер, щоб забезпечити обґрунтованість запиту та визначити цільовий пристрій. Якщо APN визначає, що відправник і одержувач є законними, він надсилає повідомлення на ідентифікований пристрій.

Рисунок 1-7 Віддалений шлях сповіщення від постачальника до пристрою

зображення: ../Art/token_trust.jpg

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

Ref: Служба оповіщення Apple Push

А тепер подивіться тут, щоб зрозуміти технічний потік: Як реалізувати службу Apple Push Notification для iOS Application?


7
Ха-ха, ви буквально просто вставили весь запис Apple Docs на SO!
Метт Мак-

@MattMc - Так, я був початківцем для ТА, коли я опублікував цю відповідь і в той час я опублікував посилання на APNS, але посилання не розглядається як відповідь на SO, тому я це зробив .... :)
Krunal

1
Це правда насправді, набагато краще, ніж відповідь, що відповідає
Метт Мак

14

Пристрій не продовжує опитувати сервер на push-сповіщення.

Щоб зробити це просто, врахуйте, що iPhone підключений до Інтернету. При підключенні до Інтернету iPhone встановлює з'єднання з сервером Apple Push Notifications, це з'єднання є відкритим з'єднанням, тобто дані можуть бути перекинуті на iPhone з сервера в момент надходження даних на сервер.

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

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


Що вони використовують, якщо не http?
Howiecamp

2

У цій статті є дійсно приємне пояснення push-сповіщень .

В iOS додатки не можуть багато зробити у фоновому режимі. Додатки дозволяють виконувати обмежений набір заходів, щоб зберегти час автономної роботи

Але що робити, якщо трапиться щось цікаве, і ви хочете повідомити про це користувачеві, навіть якщо він наразі не використовує ваш додаток?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.