Центр допомоги Налаштування мобільного застосунку для роботи з Push-сповіщеннями (FCM V1 & APNs)

Налаштування мобільного застосунку для роботи з Push-сповіщеннями (FCM V1 & APNs)

Налаштування мобільного застосунку для роботи з Push-сповіщеннями (FCM V1 & APNs)

Дане керівництво описує процес інтеграції Push-сповіщень SMSBAT у ваші мобільні застосунки iOS та Android.


Етап 1. Firebase-проєкт і сервісний акаунт (FCM V1)

SMSBAT надсилає пуші через FCM V1 — і на Android, і на iOS. Тому в SMSBAT ви завантажуєте лише один файл: сервісний акаунт Firebase. Ключ APNs у SMSBAT не завантажується взагалі — він потрібен Firebase, а не нам (див. Етап 3).

1. Отримайте сервісний акаунт у Firebase

  1. Firebase Console → Project Settings → вкладка Service accounts.
  2. Generate new private key → підтвердіть → завантажиться файл .json.

Це не той самий JSON, що google-services.json

google-services.json і GoogleService-Info.plist кладуться у застосунок. Сервісний акаунт — приватний ключ сервера, і його місце тільки в SMSBAT. У код застосунку, репозиторій чи чат його класти не можна.

2. Створіть інтеграцію в SMSBAT Omni

  1. Відкрийте Integrations → у списку зліва оберіть Firebase.
  2. Натисніть Create.
  3. Заповніть два поля:
    • Name — довільна назва, за якою ви впізнаєте застосунок у списку (наприклад, Omnichannel Contact Center).
    • Service account JSON — кнопка Choose, оберіть завантажений .json.
  4. Create.

Полів для Package Name чи Bundle ID тут немає — Project ID SMSBAT читає з самого файлу й показує в таблиці.

3. Перевірте, що інтеграція піднялась

У таблиці зʼявиться рядок із колонками Name, Project ID, Status і Created At. Робочий стан — Active.

Кнопки праворуч у рядку:

КнопкаДія
Олівець (синя)змінити назву або замінити файл сервісного акаунта
Оновлення (зелена)перечитати ключ і перевірити доступ до FCM
Кошик (червона)видалити інтеграцію

Project ID у таблиці має збігатися з застосунком

Порівняйте Project ID у таблиці з полем project_id у google-services.json (Android) та GoogleService-Info.plist (iOS). Якщо вони різні — застосунок зареєстрований в одному Firebase-проєкті, а SMSBAT надсилає в інший. Токени будуть валідні, пуші не прийдуть, помилки у відповіді не буде. Це найчастіша причина «все налаштували, нічого не приходить».

Замінили ключ у Firebase — не забудьте завантажити новий файл через олівець і натиснути зелену кнопку. Старий ключ після відкликання перестає працювати мовчки.


Етап 2. Налаштування Android (Kotlin / Java)

1. Додавання залежностей

У build.gradle вашого модуля додайте:

dependencies {
    implementation 'com.google.firebase:firebase-messaging-ktx:23.4.0'
    implementation 'com.google.firebase:firebase-installations-ktx:17.2.0'
}

2. Реєстрація Firebase Installation ID (FID)

При вході користувача в акаунт або запуску застосунку отримайте FID та надішліть його на сервер SMSBAT:

FirebaseInstallations.getInstance().id.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        val fid = task.result
        registerInstallationOnSmsbat(fid, currentUserId)
    }
}

fun registerInstallationOnSmsbat(fid: String, userId: String) {
    val json = JSONObject().apply {
        put("externalUserId", userId)
        put("firebaseInstallationId", fid)
        put("platform", "android")
        put("notificationsEnabled", true)
    }
    
    // HTTP POST на https://restapi.smsbat.com/api/push/registerInstallation
    // Header: X-Push-App-Key = YOUR_PUSH_APP_KEY
}

3. Обробка пушів та передача статусу delivered

У вашому FirebaseMessagingService:

class MyFirebaseMessagingService : FirebaseMessagingService() {

    override fun onMessageReceived(remoteMessage: RemoteMessage) {
        val data = remoteMessage.data
        val notificationGuid = data["guid"]
        
        if (!notificationGuid.isNullEmpty()) {
            // 1. Відправляємо підтвердження доставки у SMSBAT для зупинки каскаду
            sendDeliveryStatus(notificationGuid, "delivered")
        }
        
        // 2. Показуємо локальне сповіщення (NotificationManager)
        showNotification(data["title"], data["body"], data)
    }

    private fun sendDeliveryStatus(guid: String, status: String) {
        // HTTP POST на https://restapi.smsbat.com/api/push/notifications/$guid/status
        // Header: X-Push-App-Key = YOUR_PUSH_APP_KEY
        // Body: { "status": "delivered", "occurredAt": "2026-08-07T12:00:00Z" }
    }
}

Етап 3. Налаштування iOS (Swift / APNs)

1. Додавання Notification Service Extension

Для підтвердження доставки та обробки розширеного контенту (зображення, звуки, кнопки) додайте у Xcode ціль Notification Service Extension:

import UserNotifications

class NotificationService: UNNotificationServiceExtension {
    var contentHandler: ((UNNotificationContent) -> Void)?
    var bestAttemptContent: UNMutableNotificationContent?

    override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
        self.contentHandler = contentHandler
        bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
        
        if let bestAttemptContent = bestAttemptContent {
            let userInfo = bestAttemptContent.userInfo
            if let guid = userInfo["guid"] as? String {
                // Відправляємо статус delivered у SMSBAT
                sendPushStatus(guid: guid, status: "delivered")
            }
            contentHandler(bestAttemptContent)
        }
    }
}

2. Обробка тапу на сповіщення (seen)

У вашому AppDelegate або SceneDelegate:

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
    let userInfo = response.notification.request.content.userInfo
    if let guid = userInfo["guid"] as? String {
        // Відправляємо статус seen у SMSBAT
        sendPushStatus(guid: guid, status: "seen")
    }
    completionHandler()
}

Результат

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