Налаштування мобільного застосунку для роботи з 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
- Firebase Console → Project Settings → вкладка Service accounts.
- Generate new private key → підтвердіть → завантажиться файл
.json.
Це не той самий JSON, що google-services.json
google-services.json і GoogleService-Info.plist кладуться у застосунок.
Сервісний акаунт — приватний ключ сервера, і його місце тільки в SMSBAT. У
код застосунку, репозиторій чи чат його класти не можна.
2. Створіть інтеграцію в SMSBAT Omni
- Відкрийте Integrations → у списку зліва оберіть Firebase.
- Натисніть Create.
- Заповніть два поля:
- Name — довільна назва, за якою ви впізнаєте застосунок у списку
(наприклад,
Omnichannel Contact Center). - Service account JSON — кнопка Choose, оберіть завантажений
.json.
- Name — довільна назва, за якою ви впізнаєте застосунок у списку
(наприклад,
- 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()
}
Результат
Після завершення інтеграції ваш застосунок зможе отримувати миттєві сповіщення, економити бюджет за рахунок каскаду та надавати точну аналітику про доставку та відкриття повідомлень.