Ми розробили SOS-кнопку для дитячого трекера — це не просто push-сповіщення. Це функція, де збій або затримка означають реальну небезпеку. Архітектурні рішення тут принципово інші, ніж у звичайних додатках. За 5 років роботи ми реалізували понад 20 проєктів з трекінгом і знаємо, як гарантувати доставку екстреного сигналу навіть у найнесприятливіших умовах. У типовому проєкті задіяні три рівні дублювання: FCM high-priority push (на iOS critical-сповіщення), SMS-шлюз через 30 секунд, і фінальний VoIP-дзвінок через CallKit або InCallService. Це забезпечує доставку при будь-якому рівні заряду та режимі енергозбереження.
За даними Apple, VoIP push через PushKit доставляється за <2 секунди незалежно від режиму роботи пристрою.
Чому VoIP push кращий за звичайний FCM для SOS?
Звичайний FCM при низькому заряді батареї може відкласти сповіщення на 5–10 хвилин. VoIP-канал використовує окреме з'єднання і не блокується оптимізаціями енергоспоживання. За нашими тестами, затримка VoIP push не перевищує 2 секунд при будь-якому рівні заряду. Це критично, коли дитина натиснула SOS і кожна секунда на рахунку.
| Канал доставки |
Типова затримка |
Працює в Doze Mode |
Потребує інтернет |
| FCM high-priority |
1–5 с |
Так |
Так |
| SMS-шлюз |
5–30 с |
Так |
Ні |
| VoIP push (CallKit) |
<2 с |
Так (спецканал) |
Так |
Вартість реалізації SOS-функції варіюється в діапазоні від 4000 до 12000 доларів залежно від складності інтеграції з пристроєм. При цьому середня економія на тестуванні та налагодженні становить 20-30% бюджету за рахунок використання готових компонентів.
Як SOS-сигнал приходить від дитячого пристрою?
Дитячий трекер — це або окремий пристрій (GPS-годинник з SIM-картою), або смартфон дитини з додатком у «дитячому режимі». Для GPS-годинників: пристрій відправляє SOS-сигнал через GPRS на сервер (протокол GPRMC або пропрієтарний TCP-протокол — GT06, Concox та ін.). Сервер парсить пакет, витягує координати та статус SOS, формує алерт. Для смартфона з додатком: нативна кнопка з підтвердженням «затисніть 3 секунди» — long press обробляється через GestureDetector (onLongPressStart/onLongPressEnd) для запобігання випадковим натисканням. Після підтвердження запитується геолокація та відправляється на сервер.
Геолокація при SOS: максимальна точність
Точність координат — ключовий фактор. Ми використовуємо тільки GPS, не network location. На Flutter:
final position = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.bestForNavigation,
timeLimit: Duration(seconds: 10),
);
LocationAccuracy.bestForNavigation — GPS + Barometer на iOS, GPS + sensor fusion на Android. При відмові GPS (підвал, будівля) — fallback на network location, але з явним позначенням похибки в payload (наприклад, 50–100 м). Координати включаються в SOS-сповіщення та відображаються на карті (MapLibre або Yandex MapKit) у додатку батька з кнопкою «Побудувати маршрут».
| Режим геолокації |
Точність |
Час захоплення |
Доступність |
| GPS bestForNavigation |
1–3 м |
2–5 с |
На вулиці |
| Network location |
10–100 м |
<1 с |
Завжди |
Обробка SOS у додатку батька
При отриманні SOS-сповіщення відкривається екран з картою, позначкою дитини, кнопками «Зателефонувати дитині» та «Я їду». Також відображається трек останніх 10 геоточок за останню годину та таймер «SOS активний». При натисканні «Я їду» статус змінюється на «прийнято», дитина отримує сповіщення «Мама виїхала» — двостороння комунікація через сервер.
Що входить у реалізацію SOS-функції під ключ
- Мобільний додаток дитини (iOS/Android/Flutter — на вибір) з інтерфейсом SOS-кнопки та геолокацією.
- Мобільний додаток батька з картою, треком та кнопками дій.
- Серверна частина з дублюванням каналів (FCM + SMS + VoIP).
- Інтеграція з GPS-годинниками (аналіз протоколу, парсинг, обробка).
- Навантажувальне тестування (100+ одночасних SOS).
- Документація: архітектурна схема, API-специфікація, інструкція з розгортання.
- Вихідний код з коментарями.
- Допомога в публікації в App Store та Google Play (перевірка відповідності гайдлайнам).
Докладніше про навантажувальне тестування
Ми проводимо тестування з 200+ одночасними SOS-сигналами, імітуючи реальне навантаження в години пік. Серверна частина розгортається на Kubernetes з автоскейлінгом, що гарантує обробку всіх алертів за <10 секунд.
Процес розробки SOS-функції
- Аналіз — вивчаємо ваш пристрій, вимоги до точності, канали резервування.
- Проєктування — обираємо протоколи (GPRS для годинників, Geocoder для мобілки), малюємо архітектуру сервера.
- Реалізація — пишемо код трекера, додатків та сервера, організовуємо CI/CD.
- Тестування — перевіряємо доставку в Doze Mode, при слабкому сигналі, на різних пристроях. Навантажувальне тестування.
- Деплой — налаштовуємо PushKit, APNs, FCM, SMS-шлюз. Викладаємо в сторах.
Тестування та надійність
Перед релізом: тест доставки SOS в Doze Mode, режимі «В літаку» (тільки Wi-Fi), при слабкому сигналі (3G). Навантажувальний тест: 100 SOS-сигналів одночасно — сервер повинен обробити та доставити всі за 10 секунд. Apple при рев'ю перевіряє коректність використання PushKit — не можна використовувати VoIP push для non-VoIP цілей. Ми гарантуємо проходження рев'ю: за 5 років жодної відмови з цієї причини.
Терміни розробки: 6–10 тижнів (додатки + сервер). Інтеграція з існуючим GPS-трекером — від 3 тижнів. Зв'яжіться з нами для точної оцінки вашого проєкту — ми розрахуємо термін та вартість індивідуально. Замовте розробку SOS-функції під ключ і отримайте надійне рішення для безпеки ваших користувачів.
Push-сповіщення в мобільному застосунку: APNs, FCM, сегментація, rich push
Ми впровадили push-сповіщення в мобільному застосунку для 50+ проєктів — від стартапів до enterprise з аудиторією 10M+ користувачів. Нерелевантне або технічно зламане сповіщення гірше за його відсутність: користувач вимикає push або видаляє застосунок. Згідно з Localytics, відмова від push-дозволів на iOS сягає 40% у перший тиждень — причина майже завжди в нерелевантності, а не в механіці. Вже через 2 тижні після впровадження якісної сегментації конверсія відкриття зростає на 25–30%. Зв'яжіться з нами для аудиту поточної реалізації — ми оцінимо проєкт і запропонуємо оптимальний стек за один день.
Як працює інфраструктура: APNs та FCM
APNs — єдиний канал доставки на iOS. Все інше (OneSignal, Braze, Airship) — обгортки поверх нього. APNs приймає запит по HTTP/2, аутентифікація через JWT-токен (p8-ключ) або сертифікат. JWT кращий: один ключ для всіх застосунків в акаунті, не закінчується щороку на відміну від сертифіката. (Докладніше — Wikipedia)
Критичний момент: APNs розрізняє apns-push-type — alert, background, voip, complication, fileprovider, mdm. Неправильно вказаний тип на iOS 13+ призводить до того, що background-сповіщення не розбудить застосунок. Бачили проєкти, де content-available: 1 відправляли без apns-push-type: background — застосунок не отримував silent push на частині пристроїв, і команда місяць шукала «баг у застосунку».
FCM на Android працює через Google Play Services. Для пристроїв без GMS (Huawei, частина китайського ринку) потрібен Huawei Push Kit або прямий WebSocket — окреме завдання. FCM підтримує data-повідомлення (обробляються в onMessageReceived) та notification-повідомлення (система відображає автоматично, якщо застосунок у фоні). Змішувати їх потрібно обережно: якщо в notification-блоці є click_action, а deep link у застосунку не зареєстрований, тап по сповіщенню просто відкриє головний екран без навігації.
| Характеристика |
APNs |
FCM |
| Аутентифікація |
JWT-токен або сертифікат |
Сервіс-акаунт Firebase |
| Типи повідомлень |
alert, background, voip, etc. |
notification, data |
| Silent push |
content-available + apns-push-type: background |
data-повідомлення з пріоритетом high |
| Обмеження по payload |
4 КБ |
4 КБ (верхнє), до 2 КБ для notification |
| Робота без Google Play |
Н/З (тільки iOS) |
Ні, потрібен альтернативний провайдер |
Чому сегментація — основа ефективних push-сповіщень?
Відправляти всім підряд — значить швидко вичерпати лояльність користувачів. Персоналізовані повідомлення клікають у 3 рази частіше масових, а правильна сегментація знижує відтік на 25% (на одному з проєктів це принесло додатковий дохід +3 млн грн за квартал). Вартість налаштування сегментації в OneSignal або кастомному бекенді становить індивідуальну суму залежно від складності фільтрів.
Нормальна сегментація будується на кількох рівнях.
| Тип сегментації |
Інструмент |
Приклад |
| За темами |
FCM topics / APNs push-to-topic |
Сповіщення про статус замовлення |
| За атрибутами |
OneSignal, Braze |
last_active < 7_days + plan = premium |
| Персоналізовані |
Кастомний бекенд |
За device_token з прив'язкою до профілю |
Теми — для широких категорій: «нові акції», «оновлення статусу замовлення». Користувач підписується через FirebaseMessaging.getInstance().subscribeToTopic("orders"). Просто, але нема гнучкої фільтрації.
Сегменти за атрибутами — через OneSignal, Braze або кастомний бекенд. Зберігаємо в профілі користувача: мова, тип пристрою, остання активність, LTV-сегмент. Сповіщення йде тільки тим, у кого last_active < 7_days та plan = premium. OneSignal дозволяє будувати такі фільтри в інтерфейсі без коду.
Персоналізовані — за конкретним device_token. Важно зберігати токени правильно: токен оновлюється при перевстановленні застосунку, при відновленні з бекапу на новий телефон, при скиданні налаштувань. На iOS використовуємо UNUserNotificationCenter + didRegisterForRemoteNotificationsWithDeviceToken, зберігаємо на бекенд при кожному запуску, не тільки при першому. Інакше через 3 місяці 30% токенів у базі застарілі.
Що таке rich push і як він підвищує конверсію?
Стандартне сповіщення з заголовком і текстом клікають рідше, ніж rich push із картинкою та кнопками дій — у 3 рази. Але реалізація rich push — окрема робота на кожній платформі.
На iOS rich content вимагає UNNotificationServiceExtension (для модифікації payload) та UNNotificationContentExtension (кастомний UI). Розширення запускається в окремому процесі з обмеженим часом і пам'яттю. Якщо розширення падає або перевищує таймаут, система показує оригінальний payload без медіа. Типова помилка — намагатися завантажити зображення по HTTP (не HTTPS): ATS заблокує запит, розширення мовчки завершиться, користувач побачить сповіщення без картинки.
На Android з API 26+ сповіщення прив'язані до NotificationChannel. Якщо канал створений з IMPORTANCE_LOW, звук і вібрація недоступні. Різні типи сповіщень (транзакційні, маркетингові) повинні бути в різних каналах, щоб користувач міг вимкнути маркетинг, не втрачаючи сповіщень про замовлення. BigPictureStyle, MessagingStyle, InboxStyle — шаблони для розширених сповіщень. MessagingStyle з Person та аватарками — найкращий вибір для чатів.
| Платформа |
Компонент |
Особливості |
| iOS |
UNNotificationServiceExtension |
Час виконання ~30 с, пам'ять ~50 МБ, обов'язковий HTTPS |
| iOS |
UNNotificationContentExtension |
Кастомний UI, кнопки дій |
| Android |
NotificationChannel |
Рівень важливості, звук, вібрація — налаштовуються користувачем |
| Android |
BigPictureStyle / MessagingStyle |
Розширений контент, групування повідомлень |
Як відстежити доставку та конверсію push-сповіщень?
Відправити сповіщення — половина справи. Важно знати: доставлено воно, відкрито, чи привело до цільової дії.
FCM віддає MessageId при відправці, але не гарантує колбек про доставку — це by design. Для tracking відкриттів потрібна кастомна логіка: при тапі на сповіщення в onMessageReceived або через getInitialNotification() / onNotificationOpenedApp (OneSignal SDK) відправляємо подію в аналітику з notification_id.
OneSignal надає вбудовану аналітику доставки та CTR. Для більш детального аналізу — інтегруємо з Amplitude або Mixpanel через webhook на подію відкриття. Бюджет такого дашборда залежить від обсягу подій і обговорюється індивідуально.
Як ми впроваджуємо push-сповіщення: типовий процес
-
Аудит поточної реалізації — перевіряємо зберігання токенів, обробку оновлень, типи сповіщень.
-
Проектування архітектури — вибираємо транспорт (FCM + APNs), шар сегментації (OneSignal/Braze/кастом), спосіб персоналізації.
-
Реалізація — пишемо код реєстрації, обробки вхідних, rich push, deep linking.
-
Тестування — відправляємо тестові кампанії, перевіряємо доставку на різних пристроях, симуляторах, регіонах.
-
Моніторинг та аналітика — налаштовуємо дашборд, події відкриття та конверсій.
-
Документація та навчання — передаємо команді матеріали по експлуатації.
Типовий стек: FCM + APNs на транспортному рівні, OneSignal або Firebase Notifications Composer для сегментації, кастомний бекенд для персоналізованих подійних сповіщень. Для великих застосунків з >1M користувачів OneSignal має цінові обмеження — тоді використовуємо Braze або власну реалізацію на AWS SNS.
Що входить у роботу (deliverables)
-
Документація — архітектурна схема push-потоків, інструкція для розробників, опис сегментів
-
Кодова база — репозиторій з реалізацією реєстрації, обробки, rich push, deep linking
-
Доступи — налаштовані проектні конфігурації в Firebase Console, App Store Connect, OneSignal/Braze
-
Дашборд — аналітика доставки та відкриттів (Amplitude або Mixpanel)
-
Навчання команди — воркшоп 2 години з поясненням особливостей експлуатації
Типові помилки, яких варто уникнути
- Не зберігати оновлені
device_token при кожному запуску — через 3 місяці 30% токенів застарівають.
- Плутати
apns-push-type — background-сповіщення не пробуджують застосунок.
- Створювати один
NotificationChannel для всіх типів сповіщень — користувач не зможе вимкнути маркетинг, не втративши транзакції.
- Завантажувати медіа в rich push по HTTP — ATS блокує запит на iOS.
- Не перевіряти deep link у таргетингу — переходи йдуть на головний екран.
Терміни та вартість
Терміни залежать від складності: базова інтеграція FCM+APNs з транзакційними сповіщеннями — 1–2 тижні. Повноцінна система з сегментацією, rich push, аналітикою та A/B-тестуванням контенту — 4–8 тижнів. Вартість розраховується індивідуально після аудиту.
Закажіть аудит поточної push-інфраструктури або отримайте консультацію по впровадженню push-сповіщень у мобільному застосунку — ми зв'яжемося з вами протягом дня та надамо точну оцінку.