Интеграция SDK чата SendBird в мобильное приложение
SendBird — не просто «подключить и работает». SDK тяжёлый: iOS-версия добавляет ~15 МБ к бинарнику, Android — около 10 МБ AAR. Плюс WebSocket-соединение, которое нужно грамотно инициализировать, переподключать при смене сети и корректно гасить в background. Разберём, где обычно ломается интеграция и как сделать её правильно.
Инициализация и аутентификация
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")
// В delegate:
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-case.
Кастомизация 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 дней. Стоимость рассчитывается индивидуально после анализа требований.







