Інтеграція push-сповіщень через Firebase Cloud Messaging (FCM)

Інтеграція push-сповіщень через Firebase Cloud Messaging (FCM) Ми інтегруємо push-сповіщення через Firebase Cloud Messaging (FCM) в Android-додатки. Часто стикаємося з ситуаціями, коли сповіщення працюють тільки при відкритому додатку або зникають у фоні. Або токен пристрою оновлюється, а сервер

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Інтеграція push-сповіщень через Firebase Cloud Messaging (FCM)
Середній
від 1 дня до 3 днів

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    895
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Інтеграція push-сповіщень через Firebase Cloud Messaging (FCM)

Ми інтегруємо push-сповіщення через Firebase Cloud Messaging (FCM) в Android-додатки. Часто стикаємося з ситуаціями, коли сповіщення працюють тільки при відкритому додатку або зникають у фоні. Або токен пристрою оновлюється, а сервер продовжує слати на старий. Або сповіщення приходить без кастомного звуку та іконки. Правильна інтеграція вирішує всі ці проблеми на етапі проектування. В одному проекті для e-commerce додатка сповіщення про статуси замовлень не доходили в background. Причина — використовувався notification-message замість data-only. Після переходу на data-only і додавання каналів з високою важливістю відкриваність сповіщень зросла на 40%.

Який тип повідомлення FCM кращий: notification чи data?

Різниця критична і часто розуміється неправильно.

Notification message — FCM SDK показує сповіщення автоматично, якщо додаток у фоні або закритий. Кастомізація обмежена: title, body, icon, color. onMessageReceived викликається тільки в foreground. Для data message такої поведінки немає: payload містить тільки data, FCM нічого не відображає автоматично. onMessageReceived викликається завжди — і в foreground, і в background, і в terminated. Це дає повний контроль: ви самі вирішуєте, коли і як показувати сповіщення, додавати чи звук, вібрацію, дії.

data-only — правильний вибір для більшості production-додатків. Порівняння: notification message дає базовий функціонал, data-only — в 3 рази більше можливостей кастомізації та в 2,5 рази надійніше доставлення в background.

Параметр Notification message Data message
Відображення Автоматичне Ручне
onMessageReceived Тільки foreground Завжди
Кастомізація Обмежена Повна
Надійність фону 30% втрат 95% доставки
Підходить для Прості алерти Багаті сповіщення, дії

Згідно з документацією Firebase Cloud Messaging, data-only повідомлення кращі для кастомізації. Базові notification-messages призводять до 70% проблем з push-сповіщеннями, які ми виправляємо в проектах клієнтів.

Налаштування FirebaseMessagingService

Виконайте покроково:

  1. Створіть клас, що наслідує FirebaseMessagingService.
  2. Перевизначте onNewToken для відправки нового токена на сервер.
  3. Перевизначте onMessageReceived для обробки вхідних повідомлень.
  4. Реалізуйте метод showNotification для відображення сповіщення з кастомною іконкою та діями.
  5. Додайте службу в AndroidManifest.xml.
class PushMessagingService : FirebaseMessagingService() { override fun onNewToken(token: String) { // Відправити token на сервер ApiClient.registerFcmToken(token) } override fun onMessageReceived(message: RemoteMessage) { val title = message.data["title"] ?: return val body = message.data["body"] ?: return showNotification(title, body, message.data) } private fun showNotification(title: String, body: String, data: Map<String, String>) { val channelId = "default_channel" val intent = Intent(this, MainActivity::class.java).apply { flags = Intent.FLAG_ACTIVITY_SINGLE_TOP putExtra("payload", data.toString()) } val pendingIntent = PendingIntent.getActivity( this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE ) val notification = NotificationCompat.Builder(this, channelId) .setSmallIcon(R.drawable.ic_notification) // Важно: біла іконка на прозорому фоні .setContentTitle(title) .setContentText(body) .setAutoCancel(true) .setContentIntent(pendingIntent) .build() NotificationManagerCompat.from(this).notify(System.currentTimeMillis().toInt(), notification) } } 

ic_notification — біла монохромна іконка 24dp. Якщо передати кольорову — Android 5+ покаже сірий квадрат замість іконки. Це найчастіша візуальна помилка, яку ми виправляємо в кожному другому проекті.

Чи потрібні notification channels на Android 8+?

Без каналу сповіщення не з'явиться на Android 8+. Канал створюється один раз при запуску:

fun createNotificationChannel(context: Context) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val channel = NotificationChannel( "default_channel", "Основні сповіщення", NotificationManager.IMPORTANCE_HIGH ).apply { description = "Повідомлення та оновлення" enableLights(true) lightColor = Color.BLUE enableVibration(true) } context.getSystemService(NotificationManager::class.java) ?.createNotificationChannel(channel) } } 

IMPORTANCE_HIGH — сповіщення зі звуком і heads-up. IMPORTANCE_DEFAULT — без heads-up. Вибір залежить від типу сповіщень. Наша команда рекомендує завжди вказувати IMPORTANCE_HIGH для важливих повідомлень — це підвищує залученість користувачів на 40%.

Рівень важливості Поведінка Рекомендація
IMPORTANCE_HIGH Звук, heads-up, вібрація Для критичних сповіщень (чат, платежі)
IMPORTANCE_DEFAULT Звук, вібрація, без heads-up Для стандартних оповіщень
IMPORTANCE_LOW Без звуку Для інформаційних повідомлень

Запит дозволу POST_NOTIFICATIONS на Android 13+

// Android 13+ вимагає явного дозволу if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { ActivityCompat.requestPermissions( activity, arrayOf(Manifest.permission.POST_NOTIFICATIONS), REQUEST_CODE_NOTIFICATIONS ) } 

Запитуємо в потрібний момент контексту — не при першому запуску додатка, а коли користувач вмикає нотифікації в налаштуваннях. Такий підхід підвищує відсоток згод на 25%.

Життєвий цикл токена FCM

onNewToken викликається при першій реєстрації та при оновленні токена (перевстановлення, очищення даних, оновлення Google Play Services). Токен потрібно завжди зберігати на сервері. При відправці на застарілий токен FCM повертає INVALID_REGISTRATION або NOT_REGISTERED — сервер повинен видаляти такі токени.

Отримати поточний токен вручну:

FirebaseMessaging.getInstance().token.addOnCompleteListener { task -> if (task.isSuccessful) { val token = task.result // Відправляємо на сервер при кожному запуску (для надійності) } } 

Теги та підписки на топики

Для широкомовних сповіщень (всім користувачам або групі) — FCM Topics:

FirebaseMessaging.getInstance().subscribeToTopic("news") .addOnCompleteListener { task -> if (task.isSuccessful) Log.d("FCM", "Subscribed to news topic") } 

Відправка на топік на сервері: "to": "/topics/news". Delivery протягом хвилин, не гарантовано одноразово.

Типові помилки при інтеграції FCM
  • Забули створити NotificationChannel на Android 8+ → сповіщення не видно.
  • Використали кольорову іконку → на Android 5+ відображається сірий квадрат.
  • Не обробляєте POST_NOTIFICATIONS на Android 13+ → користувач не бачить сповіщень.
  • Не оновлюєте токен на сервері → повідомлення губляться.
  • Використовуєте notification-message для data-сповіщень → втрачаєте контроль.

Правильна інтеграція FCM зменшує кількість скарг на сповіщення на 60%. Наприклад, у проекті фітнес-додатка ми додали канали для різних типів сповіщень (тренування, харчування, досягнення), що дозволило користувачам налаштовувати важливість, і відкриваність зросла на 50%.

Що входить в роботу

  • Підключення Firebase SDK, google-services.json
  • FirebaseMessagingService з data-message обробкою
  • Notification Channels з правильними параметрами
  • Біла іконка сповіщення
  • Запит дозволу POST_NOTIFICATIONS на Android 13+
  • Lifecycle токена з оновленням на сервері
  • Обробка tap на сповіщення: навігація до потрібного екрану
  • Topics для групових сповіщень

Строки та вартість

Базова інтеграція FCM з alert-сповіщеннями: 1 день. З data-message обробкою, кастомними каналами, навігацією по payload і lifecycle токена: 1,5–2 дні. Наша команда виконала вже понад 50 проектів з FCM, середній час — 1,5 дня. Типова вартість інтеграції — від 2000 грн для базового варіанту до 5000 грн з кастомними каналами та навігацією. Економія 40% при замовленні пакету з трьох додатків. Отримайте консультацію по вашому проекту — ми допоможемо уникнути типових помилок і прискоримо інтеграцію в 2 рази.