Інтеграція SDK чату SendBird у мобільний застосунок
SendBird — не просто «підключити та працює». SDK важкий: iOS-версія додає ~15 МБ до бінарника, Android — близько 10 МБ AAR. Плюс WebSocket-з'єднання, яке потребує грамотної ініціалізації, переподключення при зміні мережі та корректного гасіння у фоні. Розберемось, де зазвичай ламається інтеграція та як робити правильно.
Ініціалізація та аутентифікація
iOS
SendbirdChat.initialize(params: InitParams(applicationId: "APP_ID")) викликається однократно в application(_:didFinishLaunchingWithOptions:). З'єднання:
SendbirdChat.connect(userId: userId, accessToken: token) { user, error in
guard let user else { return }
// З'єднання встановлено
}
Токен отримуйте з вашого бекенду — не хардкодьте його в клієнті. SendBird видає session token з TTL; при закінченні строку SDK викликає SessionDelegate.sessionTokenDidRequireRefresh, там запитуєте новий токен у вашого API та повертаєте через completionHandler.
На Android аналогічно: SendbirdChat.init(InitParams(applicationId, context, useCaching = true)). useCaching = true включає локальний кеш на Room — повідомлення доступні офлайн без додаткового коду.
Типова помилка при ініціалізації
Виклик connect до завершення initialize. SDK працює асинхронно; якщо викликати connect синхронно відразу після initialize — отримаєте SendbirdError.initializationNotFinished. Потрібно чекати completion block ініціалізації або, на Android, CompletionHandler.
Канали та повідомлення
SendBird оперує двома типами каналів: GroupChannel (приватний, за запрошенням) та OpenChannel (публічний, як IRC). Для більшості месенджерів потрібен GroupChannel.
Створення або отримання каналу 1-на-1:
let params = GroupChannelCreateParams()
params.userIds = [currentUserId, targetUserId]
params.isDistinct = true // важливо: не створює дубль якщо канал вже існує
GroupChannel.createChannel(params: params) { channel, error in ... }
isDistinct = true — ключовий параметр. Без нього кожен виклик створює новий канал між тими ж користувачами.
Отримання історії та realtime
channel.getMessagesByTimestamp(timestamp, params) — пагінація назад від часової мітки. Для realtime підписуємось через addChannelDelegate:
SendbirdChat.addChannelDelegate(self, identifier: "ChatVC")
// У делегаті:
func channel(_ sender: BaseChannel, didReceive message: BaseMessage) {
// Додаємо в dataSource, оновлюємо collectionView
}
На Android — addChannelHandler. Важливо: removeChannelDelegate / removeChannelHandler при знищенні екрану, інакше — витік пам'яті та дублювання подій.
Push-уведомлення
iOS
Реєструємо APNs-токен у SendBird:
SendbirdChat.registerDevicePushToken(deviceToken, unique: true) { status, error in ... }
unique: true замінює попередній токен пристрою — потрібно при переустановці. У AppDelegate.application(_:didReceiveRemoteNotification:) перевіряємо SendbirdChat.isHandledRemoteNotification(userInfo) — якщо true, SDK сам декодує payload.
Android
Через FCM: у FirebaseMessagingService.onNewToken викликаємо SendbirdChat.registerPushToken(token, unique = true). У onMessageReceived — SendbirdChat.handleRemoteMessageData(remoteMessage.data) для обробки SendBird-уведомлень.
Частіста проблема: уведомлення приходять, коли застосунок закритий, але не приходять коли відкритий — тому що забули убрати SendbirdChat.setAutoBackgroundDetection(false) у потрібних сценаріях або не обробили foreground-케이с.
Кастомізація UI vs UIKit SDK
SendBird пропонує готовий UIKit (SwiftUI/Compose-компоненти) — швидкий старт, але обмежена кастомізація. Якщо дизайн нестандартний — працюємо з Core SDK напрямику, будуємо UI самі. На практиці: UIKit підходить для MVP за 1-2 дня, кастомний UI — 3-5 днів додатково.
Офлайн та переподключення
На iOS підписуємось на NetworkObserver або NWPathMonitor; при відновленні мережі викликаємо SendbirdChat.connect повторно. SDK синхронізує пропущені повідомлення через MessageCollection — якщо використовувати MessageCollectionDelegate, підсвітлення нових повідомлень відбувається автоматично.
На Android useCaching = true + MessageCollection роблять те ж саме без ручного управління.
Етапи роботи
Налаштування SendBird застосунку в консолі → інтеграція SDK (CocoaPods/SPM на iOS, Gradle на Android) → аутентифікація з вашим бекендом → реалізація каналів та повідомлень → push-уведомлення → тестування переподключень та edge-ケйсів.
Строки
Базова інтеграція з готовим UIKit — 2-3 дня. Кастомний UI на Core SDK — 5-7 днів. Вартість розраховується індивідуально після аналізу вимог.







