Push-сповіщення — один із найефективніших способів взаємодії з користувачем після встановлення додатка. Вони дозволяють повідомити про нове повідомлення, знижку, оновлення контенту або нагадати про забутий кошик. Push-сповіщення (push notifications) працюють через хмарні сервіси: Firebase Cloud Messaging (FCM) на Android і Apple Push Notification Service (APNS) на iOS. У цій статті розберемо архітектуру сповіщень, їх типи та процес налаштування для обох платформ. Докладніше — в офіційній документації FCM.
Головне
Push-сповіщення — це повідомлення, яке сервер надсилає на мобільний пристрій без запиту з боку додатка. Повідомлення проходить через хмарний сервіс (FCM або APNS), який доставляє його на пристрій, навіть якщо додаток закрито. Сповіщення поділяються на два типи: display-сповіщення (показуються користувачеві) та data-сповіщення (передають дані для фонової обробки).
Архітектура push-сповіщень включає три компоненти: (1) сервер додатка — надсилає запит на FCM/APNS; (2) хмарний сервіс — маршрутизує сповіщення; (3) клієнтський додаток — отримує й обробляє сповіщення. Сервер повинен знати Device Token пристрою, щоб надіслати сповіщення саме йому. Для масових розсилок використовується Topic Subscription — підписка пристроїв на тематичні канали (новини, акції, погода).
На кожному пристрої сповіщення обробляються операційною системою: Android — через NotificationManager і NotificationChannel, iOS — через UNUserNotificationCenter. Користувач може налаштувати поведінку сповіщень для кожного каналу: дозволити звук, банери, показ на Lock Screen або повністю вимкнути. Правильне налаштування каналів підвищує залученість і знижує кількість відписок.
В IT Sectr ми проєктуємо систему push-сповіщень з урахуванням платформних особливостей із самого початку. Ключові рішення: вибір між FCM і прямим APNS, формат payload, частота відправки та механіка підписок. Це дозволяє уникнути ситуацій, коли сповіщення не доходять або блокуються системою.
Firebase Cloud Messaging (FCM) — кросплатформений сервіс Google для доставки сповіщень. FCM підтримує Android, iOS, Web і Flutter. На iOS FCM працює через APNS: FCM надсилає запит в APNS, який доставляє сповіщення на пристрій. Переваги FCM: єдиний API для обох платформ, вбудована аналітика, A/B-тестування, топики та сегменти аудиторії.
Apple Push Notification Service (APNS) — нативний сервіс Apple. Працює тільки на пристроях Apple (iOS, macOS, watchOS, tvOS). Вимагає прямої авторизації через TLS-сертифікат або токен (JWT). APNS забезпечує мінімальну затримку delivery і пряму інтеграцію з iOS-функціями: PushKit, Notification Service Extension, критично важливі оповіщення (Critical Alerts).
Вибір між FCM і APNS залежить від архітектури проєкту. Якщо додаток тільки для iOS — APNS дає більше контролю. Якщо кросплатформений — FCM зручніший єдиним API. Багато проєктів використовують FCM як основний сервіс, а на iOS додатково налаштовують PushKit для VoIP. Гібридний підхід дозволяє отримати найкраще від обох систем.
| Характеристика | FCM | APNS |
|---|---|---|
| Платформи | Android, iOS, Web, Flutter | iOS, macOS, watchOS, tvOS |
| Авторизація | Server Key (Firebase Console) | TLS сертифікат або JWT токен |
| Максимальний payload | 4 KB (data), 2 KB (notification) | 4 KB |
| Топики | Вбудовані (Topic Messaging) | Немає (реалізуються на стороні сервера) |
| Silent Push | Підтримується | Підтримується (content-available) |
| PushKit | Немає | Так (VoIP, live activities) |
| Аналітика | Firebase Analytics | Немає вбудованої |
| Доставка на вбитому пристрої | Обмежено (залежить від виробника) | Так, через PushKit |
Rich Notification — сповіщення, що містить не лише текст, але й медіа-контент: зображення, відео, аудіо, а також кнопки дій. На Android реалізується через стилі NotificationCompat: BigPictureStyle (велике зображення), BigTextStyle (згорнутий/розгорнутий текст), InboxStyle (список повідомлень), MediaStyle (керування відтворенням). На iOS використовується Notification Content Extension — окремий target з кастомним UI для розгорнутого сповіщення.
Silent Push (content-available на iOS) — сповіщення, яке доставляється без відображення користувачеві. Призначене для фонового оновлення даних: синхронізація контенту, попереднє завантаження, оновлення віджетів. На iOS для Silent Push потрібно включити Background Modes → Remote notifications. На Android для обробки фонових сповіщень використовується FirebaseMessagingService з onMessageReceived. Важливо: на iOS Silent Push має обмеження частоти та не гарантує доставку, якщо додаток не на передньому плані.
Interactive Notification дозволяє користувачеві виконати дію без відкриття додатка. На Android це кнопки (Action) у сповіщенні: «Відповісти», «Схвалити», «Відхилити». Дії обробляються через PendingIntent, який запускає BroadcastReceiver або Service. На iOS Notification Action реєструються через UNNotificationAction та UNNotificationCategory. Кнопки можуть бути foreground (відкрити додаток), background (виконати у фоні) або destructive (незворотна дія — видалити, заблокувати).
Notification Content Extension (iOS) — кастомний view controller для відображення розширеного контенту сповіщення при довгому натисканні або 3D Touch. Notification Service Extension (iOS) — middleware для модифікації контенту сповіщення до показу: розшифровка E2E-повідомлень, завантаження зображення, обфускація конфіденційних даних. На Android аналогів немає — всі модифікації виконуються в FirebaseMessagingService.
Для Android необхідно: (1) додати Firebase SDK в проєкт (google-services.json); (2) створити NotificationChannel (Android 8+) для кожної категорії сповіщень; (3) реалізувати FirebaseMessagingService для отримання токена та вхідних повідомлень. Notification Channel обов'язковий — без нього сповіщення не будуть показуватися на Android 8+. Канали мають пріоритет (IMPORTANCE_HIGH — звук + спливаюче вікно, IMPORTANCE_LOW — без звуку) і налаштовуються користувачем у системних налаштуваннях.
Для iOS необхідно: (1) включити Push Notifications capability в Xcode; (2) налаштувати APNS ключ на Apple Developer Portal; (3) запросити дозвіл через UNUserNotificationCenter.requestAuthorization — це системний діалог, який показується один раз. Відповідь користувача критична: якщо дозвіл не отримано, сповіщення не будуть доставлятися. Рекомендується пояснювати користувачеві, навіщо потрібні сповіщення, до показу системного діалогу (pre-permission prompt).
Device Token (iOS) та Registration Token (Android) — унікальні ідентифікатори пристрою для push-сповіщень. Токен генерується при першому запуску додатка і може змінюватися: при перевстановленні, очищенні даних, скиданні налаштувань конфіденційності. Сервер повинен регулярно оновлювати токени. Firebase надає зручний API для керування токенами через onNewToken, а також панель для тестової відправки сповіщень (Firebase Console → Cloud Messaging).
Topic Subscription — один із найефективніших механізмів FCM. Пристрій підписується на топик (наприклад, «news», «promo_users_ios»), і сервер надсилає сповіщення по топику без необхідності зберігати список токенів. Firebase Topics підтримують до мільйона підписників на топик і умовну відправку (Condition) через мову виразів: «'news' in topics && ('US' in topics || 'UK' in topics)».
Notification Payload — JSON-структура, що надсилається через FCM/APNS. Для FCM: окремо notification (видима частина — title, body, image) та data (кастомні поля для додатка). Для APNS: aps-словник з alert, badge, sound, category та content-available. Правильна структура payload критична: якщо notification + data приходять одночасно, додаток у фоні може не отримати data. Рекомендується використовувати тільки data-повідомлення для Android і передавати візуальні поля окремо через FCM Console.
Часто задавані питання
FCM (Firebase Cloud Messaging) — сервіс Google для Android і кросплатформених сповіщень. APNS (Apple Push Notification Service) — сервіс Apple тільки для iOS/macOS. FCM може доставляти сповіщення через APNS на iOS, виступаючи проксі-сервером.
Rich Notification — розширене сповіщення з медіа-контентом: зображення, відео, аудіо, кнопки дій. На iOS реалізується через Notification Content Extension, на Android — через BigPictureStyle та InboxStyle.
Device Token — унікальний ідентифікатор пристрою для відправки push-сповіщень. На Android це Registration Token від FCM, на iOS — Device Token від APNS. Токен може змінюватися при перевстановленні додатка або скиданні налаштувань, тому його потрібно оновлювати на сервері.
Silent Push (тихе сповіщення) — сповіщення без відображення користувачеві. Використовується для фонового оновлення даних: синхронізація контенту, оновлення віджетів, prefetching. На iOS вимагає включення Background Modes → Remote notifications.
PushKit — фреймворк Apple для доставки сповіщень з високим пріоритетом, який використовується в VoIP-додатках (дзвінки, месенджери). PushKit доставляє сповіщення навіть якщо додаток вбито, і гарантує запуск додатка для обробки.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.