Огляд APN
Служба Apple Push Notification (APN) - це центральна функція віддалених повідомлень. Це надійний, безпечний та високоефективний сервіс для розробників додатків для поширення інформації на пристрої iOS (і, опосередковано, watchOS), tvOS та macOS.
Під час первинного запуску програми на пристрої користувача система автоматично встановлює акредитований, зашифрований та стійкий IP-зв’язок між вашим додатком та APN. Це з'єднання дозволяє вашій програмі виконати налаштування, щоб вона могла отримувати сповіщення, як пояснено в Налаштування підтримки віддаленого повідомлення.
Інша половина з'єднання для надсилання сповіщень - постійний захищений канал між сервером постачальника та APN - вимагає конфігурації у вашому обліковому записі розробника в Інтернеті та використання криптографічних сертифікатів, наданих Apple. Провайдер - це сервер, який ви розгортаєте та керуєте, який налаштовуєте для роботи з APN. На малюнку 1-1 показаний шлях доставки для віддаленого повідомлення.
Малюнок 1-1 Додавання віддаленого повідомлення від постачальника до програми
Після завершення налаштування натискання сповіщень у ваших постачальників та у вашій програмі ваші постачальники можуть потім надсилати запити на сповіщення 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 Переміщення віддалених повідомлень від декількох постачальників на декілька пристроїв
Якість обслуговування, зберігання та передача та злагоджені сповіщення
Послуга 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 Встановлення та використання довіри про підключення провайдера на основі лексем
Як показано на малюнку 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 Встановлення довіри про підключення провайдера на основі сертифікатів
Як показано на рисунку 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
Як показано на малюнку 1-5, довіра APN до пристрою працює наступним чином:
- Домовлення про довіру починається, коли пристрій ініціює TLS-з'єднання з APN, як показано у верхній стрілці на малюнку.
- APN повертає на пристрій сертифікат APN.
- Операційна система підтверджує цей сертифікат і потім, як показано на стрілці «Сертифікат пристрою», надсилає сертифікат пристрою APN.
- Нарешті, як зазначено стрілкою внизу на малюнку, APN підтверджує сертифікат пристрою, встановлюючи довіру.
- Завдяки TLS-з'єднанню, встановленому між APN та пристроєм, програми на пристрої можуть реєструватися в APN, щоб отримувати свої специфічні маркери пристрою для віддалених сповіщень. Докладніше та приклади коду див. У розділі Реєстрація для отримання віддалених повідомлень у налаштуваннях підтримки віддаленого повідомлення.
Отримавши маркер пристрою, додаток повинен підключитися до асоційованого постачальника програми та переслати маркер на нього. Цей крок необхідний, оскільки постачальник повинен включити маркер пристрою пізніше, коли він надсилає запит на сповіщення до APN-адрес, орієнтованих на пристрій. Код, який ви пишете для переадресації маркера, також відображається в розділі Реєстрація для отримання віддалених повідомлень.
Незалежно від того, чи користувач активує пристрій вперше, чи APN видав новий маркер пристрою, процес аналогічний і показаний на малюнку 6-6.
Рисунок 1-6 Керування маркером пристрою
Отримання та обробка маркера для певного додатка працює так:
Ваш додаток реєструється з APN для віддалених сповіщень, як показано у верхній стрілці. Якщо додаток уже зареєстровано, а маркер пристрою для певного додатка не змінився, система швидко повертає наявний маркер у додаток, і цей процес переходить до кроку 4.
Коли потрібен новий маркер пристрою, APN генерує той, використовуючи інформацію, що міститься в сертифікаті пристрою. Він зашифровує маркер за допомогою клавіші токена і повертає його на пристрій, як показано в середині праворуч вказівною стрілкою.
Система повертає маркер пристрою до вашого додатка, викликаючи вашу програму: didRegisterForRemoteNotificationsWithDeviceToken: метод delegate.
Отримавши маркер, ваш додаток (у рамках методу делегування) повинен переслати його своєму постачальнику у двійковому чи шістнадцятковому форматі. Ваш постачальник не може надсилати сповіщення на пристрій без цього маркера. Докладніше див. Реєстрація для отримання віддалених повідомлень у налаштуваннях підтримки віддаленого повідомлення.
ВАЖЛИВО
Маркери пристроїв APN мають різну довжину. Не жорстко кодуйте їх розміри.
Коли ваш постачальник надсилає запит на натискання сповіщення APN, він включає маркер пристрою, який визначає унікальну комбінацію додатків і пристроїв. Цей крок показаний на стрілці «Токен, корисна навантаження» між провайдером та APN на малюнку 6-7. APN розшифровує маркер, щоб забезпечити обґрунтованість запиту та визначити цільовий пристрій. Якщо APN визначає, що відправник і одержувач є законними, він надсилає повідомлення на ідентифікований пристрій.
Рисунок 1-7 Віддалений шлях сповіщення від постачальника до пристрою
Після того як пристрій отримає сповіщення (і після останнього кроку, показаного на рисунку 1-7), система пересилає віддалене повідомлення до вашої програми.
Ref: Служба оповіщення Apple Push
А тепер подивіться тут, щоб зрозуміти технічний потік: Як реалізувати службу Apple Push Notification для iOS Application?