У відеодзвінках на мобільних платформах головні проблеми — lifecycle та управління токенами. Без правильного налаштування отримуєте витік ресурсів, обриви сесій та перевитрату ліцензій. Наш досвід більше 30 проектів з Agora SDK дозволив сформулювати робочий підхід. Ми гарантуємо якість інтеграції завдяки 10-річному досвіду та сертифікованим фахівцям.
Чому Agora SDK — найкращий вибір для відеодзвінків?
Agora SDK — WebRTC managed service, який бере на себе WebRTC під капотом, власну транспортну мережу SD-RTN, адаптивний бітрейт та кодеки. Порівняно з raw WebRTC, Agora SDK краще в 12 разів за швидкістю розробки (з 3 місяців до 1 тижня) та у 3 рази за обсягом коду. Правильна інтеграція Agora SDK дає скорочення витрат на інфраструктуру до 40% порівняно з іншими рішеннями.
Як правильно налаштувати токени та уникнути помилок?
Agora працює за моделлю App ID + Token. App ID — публічний ідентифікатор з консолі. Token — короткоживучий JWT, який ваш бекенд генерує через Agora Token Builder і передає клієнту при вході в канал. Для правильної інтеграції Agora SDK важливе налаштування токенів. Найчастіші помилки в продакшені: tokenExpired (109) і invalidToken (110). Token має обмежений TTL (від 24 годин до 1 години). Реалізуємо обробку через tokenPrivilegeWillExpire делегатний метод — отримуємо новий токен з бекенду та викликаємо renewToken() без розриву з'єднання.
Таблиця рекомендованих TTL токенів
| Сценарій | TTL | Рекомендація |
|---|---|---|
| Стандартний | 24 години | Баланс безпеки та частоти оновлень |
| Високе навантаження | 1 година | Знижує ризик компрометації токена |
Типова помилка: токен генерується з UID 0 на бекенді, але клієнт після joinChannel отримує конкретний UID від Agora — і при наступному renewToken передає токен під неправильний UID. Рішення: зберігаємо UID з didJoinChannel і використовуємо його при запиті нового токена.
Ініціалізація двигуна (Agora engine)
Покрокова інструкція:
- Ініціалізуйте двигун один раз при старті додатку.
- Налаштуйте токени.
- Підключіться до каналу.
- Обробіть відео.
Ініціалізація движка:
let config = AgoraRtcEngineConfig() config.appId = "YOUR_APP_ID" agoraKit = AgoraRtcEngineKit.sharedEngine(with: config, delegate: self) val config = RtcEngineConfig() config.mContext = context config.mAppId = "YOUR_APP_ID" config.mEventHandler = handler rtcEngine = RtcEngine.create(config) Не створюйте движок заново під кожен дзвінок. sharedEngine — синглтон, повторний виклик з тим же App ID повертає існуючий екземпляр. На Android RtcEngine.create() кожного разу створює новий екземпляр; попередній потрібно знищити через RtcEngine.destroy(). Інакше витік нативних ресурсів проявляється через 3–5 дзвінків. Використовуйте LifecycleObserver для автоматичного знищення движка при завершенні активності.
Підключення до каналу та обробка відео
let option = AgoraRtcChannelMediaOptions() option.clientRoleType = .broadcaster option.channelProfile = .communication agoraKit.joinChannel( byToken: token, channelId: channelName, uid: 0, mediaOptions: option ) uid: 0 — Agora призначає UID самостійно. Якщо потрібна прив'язка до користувача — передавайте детермінований числовий ID (UInt32).
Локальне відео виводимо через AgoraRtcVideoCanvas з setupLocalVideo(). Віддалене — через setupRemoteVideo() в делегатному методі didJoinedOfUid. Важливо: setupRemoteVideo() викликайте на main thread, інакше EXC_BAD_ACCESS при швидкому підключенні/відключенні учасників.
func rtcEngine(_ engine: AgoraRtcEngineKit, didJoinedOfUid uid: UInt, elapsed: Int) { DispatchQueue.main.async { let canvas = AgoraRtcVideoCanvas() canvas.uid = uid canvas.renderMode = .hidden canvas.view = self.remoteVideoView self.agoraKit.setupRemoteVideo(canvas) } } Налаштування якості відео
Agora надає передустановки AgoraVideoEncoderConfiguration та кастомні параметри:
let config = AgoraVideoEncoderConfiguration( size: CGSize(width: 640, height: 360), frameRate: .fps15, bitrate: AgoraVideoBitrateStandard, orientationMode: .adaptative, mirrorMode: .auto ) agoraKit.setVideoEncoderConfiguration(config) Для мобільного додатку 360p/15fps — розумний баланс якості та батарейного навантаження. 720p/30fps — для планшетів або коли якість критична. 1080p не підходить для мобільних: споживає багато енергії та ресурсів, а різниця у сприйнятті між 720p та 1080p незначна.
Порівняльна таблиця налаштувань відео
| Роздільна здатність | fps | Бітрейт | Навантаження на батарею |
|---|---|---|---|
| 360p | 15 | Standard | Низьке |
| 720p | 30 | Standard | Середнє |
| 1080p | 30 | High | Високе |
Як обробити переривання та lifecycle?
На iOS AVAudioSession.routeChangeNotification та AVAudioSession.interruptionNotification — Agora SDK обробляє їх автоматично при коректному налаштуванні AgoraAudioScenario. Сценарій .meeting — оптимальний для відеодзвінків: включає AEC, ANS, AGC.
При вхідному системному дзвінку Agora не паузиться автоматично. Реалізуємо через CXCallObserver: при CXCall.hasConnected == true — muteLocalAudioStream(true), при завершенні — розмьютуємо. Для вхідних дзвінків також налаштовуємо push notifications, щоб миттєво сповіщати користувача.
На Android без ForegroundService Android 8+ уб'є процес через 5–10 хвилин. Запускаємо ForegroundService при початку дзвінка з повідомленням. android:foregroundServiceType="camera|microphone" в маніфесті обов'язковий з Android 14.
Що входить в інтеграцію
- Аналіз вимог: кількість учасників, якість, бекенд-інтеграція, бюджет.
- Налаштування токенів: генерація, кешування, обробка протухань.
- Реалізація UI: відеоканваси, органи управління, віртуальний фон Agora.
- Lifecycle: ForegroundService на Android, CXCallObserver на iOS.
- Тестування: 10+ сценаріїв (обрив мережі, вхідний дзвінок, швидка перекомутація).
- Документація: README, коментарі коду, схема токенів.
- Підтримка: 2 тижні після релізу, фіксація багів.
- Запис дзвінків Agora: за потреби налаштовуємо recording.
Терміни та вартість
Пропонуємо інтеграцію Agora SDK під ключ від $2000. Базова інтеграція (1-на-1 відеодзвінок з управлінням камерою, mute, flip) — 3–5 днів, вартість від $2000. З підтримкою групи до 8 учасників, токен-менеджментом та фоновим режимом — 1–2 тижні, вартість до $5000. Економія на ліцензіях Agora може сягати $1000 на місяць при середньому навантаженні. Вартість точного рішення розраховується після аналізу вимог. Напишіть нам для консультації — ми безкоштовно оцінимо ваш проект та підготуємо кошторис і roadmap.







