Push-сповіщення — це повідомлення, які сервер надсилає на мобільний пристрій навіть коли додаток закритий. Згідно з Google Firebase, 2024, Push-сповіщення обробляються через спеціалізовані сервіси — FCM на Android та APNS на iOS, які підтримують доставку в реальному часі мільйонам пристроїв одночасно. Вони стали невід'ємною частиною користувацького досвіду в сучасних мобільних додатках.
Головне
Push-сповіщення — це короткі повідомлення, які сервер додатка надсилає на пристрій користувача без його явного запиту. Вони відображаються у вигляді банерів, значків на іконці або звукових сигналів, привертаючи увагу користувача до додатка та інформуючи про важливі події.
Push-сповіщення складається з заголовка, тіла повідомлення та необов'язкових даних (payload). На відміну від SMS, Push-сповіщення є безкоштовними для користувача та доставляються через інфраструктуру хмарних сервісів — FCM для Android та APNS для iOS. Основні цілі Push-сповіщень: підвищення залученості, інформування про події та повернення користувача в додаток.
Статистика використання показує, що правильно налаштовані Push-сповіщення збільшують утримання додатка на 30–60%. Однак надмірна частота сповіщень призводить до відписок — понад 60% користувачів вимикають сповіщення, якщо їх надсилають частіше трьох разів на день.
Push-система включає три компоненти: сервер додатка, платформений сервіс (FCM/APNS) та клієнтський додаток на пристрої. Сервер надсилає запит платформеному сервісу, який доставляє сповіщення на цільовий пристрій через постійне з'єднання з ОС.
Механізм доставки Push-сповіщень базується на постійному з'єднанні між пристроєм та платформеним сервісом. Операційна система підтримує зашифрований канал зв'язку, через який проходять всі Push-повідомлення.
При першому запуску додаток запитує дозвіл на надсилання сповіщень та отримує унікальний токен пристрою від FCM або APNS. Цей токен — рядок довжиною до 4 КБ, який однозначно ідентифікує екземпляр додатка. Токен змінюється при перевстановленні додатка або відновленні пристрою з резервної копії.
class FirebaseMessagingService :
FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendTokenToServer(token)
}
override fun onMessageReceived(
message: RemoteMessage
) {
showNotification(message.notification)
}
}
Сервер додатка надсилає HTTP-запит до FCM API або APNS API, зазначаючи цільовий токен, заголовок, тіло та додаткові дані. Платформений сервіс відповідає статусом доставки: успіх, недійсний токен (пристрій видалив додаток) або перевищення частоти надсилання.
fetch("https://fcm.googleapis.com/fcm/send", {
method: "POST",
headers: {
"Authorization": "key=AIzaSy...",
"Content-Type": "application/json"
},
body: JSON.stringify({
to: "device_token_here",
notification: {
title: "Нове повідомлення",
body: "У вас нове сповіщення!"
}
})
})
Вибір між FCM та APNS залежить від цільової платформи. FCM підтримує Android та iOS, APNS — лише екосистему Apple. Розглянемо ключові відмінності, важливі для розробки крос-платформенних мобільних додатків.
FCM — це сервіс Google, що працює поверх Google Play Services. Він підтримує дві схеми доставки: сповіщення з автоматичним відображенням та дата-сповіщення, які додаток обробляє самостійно. FCM безкоштовний і не має обмежень на кількість надісланих повідомлень.
APNS — це сервіс Apple з підтримкою мультимедійних вкладок (зображення, відео, аудіо) розміром до 10 МБ. Для надсилання через APNS потрібен TLS-сертифікат або ключ аутентифікації. APNS обмежує частоту надсилання на один пристрій — не більше 150 сповіщень на хвилину, після чого вмикається обмеження швидкості.
| Характеристика | FCM | APNS |
|---|---|---|
| Платформи | Android, iOS, Web | iOS, macOS, watchOS |
| Вимоги | Google Play Services | Apple Developer Program |
| Медіа | до 4 КБ (дані) | до 10 МБ (вкладки) |
| Пріоритет | нормальний/високий | негайний/енергозберігаючий |
| Вартість | безкоштовно | безкоштовно (потрібен акаунт) |
Push-сповіщення класифікуються за способом відображення та призначенням. Розуміння типів допомагає вибрати правильну стратегію для кожного сценарію взаємодії з користувачем.
Найпоширеніший тип — відображуване сповіщення з заголовком та тілом. ОС автоматично показує його в системній шторці, на екрані блокування та у вигляді банера. Розробник може налаштувати звук, вібрацію, значок на іконці та кнопки дій для прямих дій (відповісти, відкрити, відхилити).
Дата-сповіщення містять лише payload без візуального відображення. Додаток обробляє їх у фоні: синхронізує дані, оновлює кеш або запускає завантаження. На Android дата-сповіщення доставляються гарантовано, на iOS — лише при активному додатку або через фонове оновлення.
Сучасні мобільні ОС підтримують розширені та медіа-сповіщення з зображеннями, GIF, відео та аудіо. На iOS це реалізовано через UNNotificationAttachment, на Android — через BigPictureStyle та InboxStyle для кастомізації вигляду сповіщення в системній шторці.
Тихі сповіщення не відображаються користувачеві та використовуються для фонової синхронізації. На iOS вони мають високий пріоритет для завдань типу оновлення даних перед відкриттям додатка. Android трактує їх як дата-сповіщення з мінімальним пріоритетом.
Налаштування Push-сповіщень вимагає дій на рівні інфраструктури, серверної частини та клієнтського коду. Розглянемо типовий процес для крос-платформенного мобільного проєкту.
Для Android необхідно створити проєкт у Firebase Console, додати google-services.json до проєкту та налаштувати FirebaseMessagingService. Токен пристрою отримується через FirebaseInstanceId або FirebaseMessaging.getInstance().token, після чого надсилається на сервер через API при першому запуску або при його зміні.
Для iOS потрібна підписка на Apple Developer Program, створення Push-сертифіката або APNS-ключа в Developer Portal та вмикання можливості Push Notifications у Xcode. Реєстрація на сповіщення виконується через UIApplication.shared.registerForRemoteNotifications з отриманням deviceToken в AppDelegate.
import UIKit
import UserNotifications
@main
class AppDelegate: UIResponder,
UIApplicationDelegate {
func application(
_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken
deviceToken: Data
) {
let token = deviceToken
.map { String.format("%02x", $0) }
.joined()
// надіслати token на свій сервер
}
}
На серверному боці Push-сповіщення надсилаються через REST API або Admin SDK. FCM використовує Firebase Admin SDK (доступний для Node.js, Java, Python, Go), APNS — pusher-бібліотеки (pushy для Java, apn2 для Node.js). Рекомендується зберігати токени в базі даних з позначкою часу останнього оновлення.
Безпека Push-сповіщень критично важлива, оскільки через них можуть передаватися конфіденційні дані. Обидві платформи надають базові механізми захисту, але розробник зобов'язаний правильно їх використовувати.
Payload Push-сповіщення може містити персональні дані користувачів: імена, суми транзакцій, посилання на повідомлення. Навіть якщо канал зв'язку між FCM/APNS та пристроєм зашифрований, дані можуть бути перехоплені на рівні додатка при перехопленні сповіщення стороннім ПЗ. Рекомендується шифрувати чутливий payload на сервері алгоритмом AES-256 та дешифровувати його на пристрої за допомогою ключа, що зберігається в Keychain (iOS) або EncryptedSharedPreferences (Android).
Токен пристрою — це ідентифікатор сесії, який може бути скомпрометований при зламі пристрою або перехопленні трафіку. Сервер додатка повинен перевіряти токени перед надсиланням: звіряти їх з БД, відстежувати неактивні токени та видаляти їх при повторюваних помилках InvalidToken. FCM та APNS повертають статус InvalidRegistration для недійсних токенів — не ігноруйте його.
Без контролю частоти Push-сповіщення можуть стати інструментом спаму, який дратує користувачів та знижує утримання. Встановіть ліміти на сервері: не більше 5 сповіщень на годину одному користувачеві та не більше 3 однакових повідомлень. Для транзакційних сповіщень (підтвердження замовлення, зміна пароля) ліміти можуть бути вищими — до 10 на годину, оскільки вони несуть критично важливу інформацію. Використовуйте rate limiting на рівні API надсилання, щоб зловмисник не зміг запустити масову розсилку через ваш сервер.
Часто запитувані питання
Так, через пряме підключення до APNS не підтримується на Android — для пристроїв без Google Play Services використовуються альтернативи на кшталт Huawei Mobile Services (HMS) та власні WebSocket-з'єднання. Однак FCM залишається стандартом для більшості додатків завдяки безкоштовності та надійності.
FCM та APNS зберігають останнє сповіщення на своїх серверах та доставляють його при відновленні з'єднання. На кожному пристрої зберігається лише останнє сповіщення від кожного додатка, тому при тривалій відсутності мережі проміжні повідомлення втрачаються.
Найчастіші причини — прострочений Push-сертифікат (дійсний 1 рік), недійсний токен пристрою, відключені сповіщення в налаштуваннях або увімкнений режим енергозбереження. Перевірте сертифікат в Apple Developer Console та переконайтеся, що додаток запитує дозвіл через UNUserNotificationCenter.
На Android використовуйте PendingIntent в NotificationCompat.Builder з відстеженням відкриття через Intent. На iOS — метод UNUserNotificationCenterDelegate.userNotificationCenter(_:didReceive:withCompletionHandler:). FCM надає звіти про доставку та відкриття для кожного надісланого сповіщення.
Незначно — Push-сповіщення не утримують постійне з'єднання; ОС використовує єдиний системний канал для всіх додатків, що мінімізує загальне енергоспоживання. Часте надсилання (кожні 5 хвилин) споживає більше енергії на пробудження пристрою зі спячого режиму. Тихі сповіщення на iOS витрачають більше заряду через активацію додатка в фоні для обробки отриманих даних.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також