Інтеграція Twilio SDK для дзвінків в мобільному додатку

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Інтеграція Twilio SDK для дзвінків в мобільному додатку
Складний
~3-5 днів
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

Інтеграція Twilio SDK для звонків у мобільному застосунку

Twilio Voice SDK бере на себе медіатранспорт, кодування аудіо, TURN-інфраструктуру та глобальну маршрутизацію через власні data centers. Розробнику залишаються: сигналізація через Twilio, управління аудіосесією на платформі та інтеграція з системними звонковими інтерфейсами. Швидше, ніж WebRTC з нуля, але менш гнучко та дорожче при масштабуванні.

Серверна частина: Access Token

Twilio Voice SDK аутентифікується через короткоживучі Access Token, які генерує ваш бекенд за допомогою Twilio Helper Library. Токен містить VoiceGrant — дозволи на входящі та вихідні звонки.

from twilio.jwt.access_token import AccessToken
from twilio.jwt.access_token.grants import VoiceGrant

token = AccessToken(
    account_sid=ACCOUNT_SID,
    signing_key_sid=API_KEY_SID,
    private_key=API_KEY_SECRET,
    identity=user_id,
    ttl=3600
)
token.add_grant(VoiceGrant(
    outgoing_application_sid=TWIML_APP_SID,
    incoming_allow=True
))
return token.to_jwt()

Мобільний клієнт отримує токен при запуску та оновлює його до закінчення. Twilio SDK сповіщає через делегат accessTokenInvalidOrExpired — тоді робимо запит на новий токен та викликаємо updateAccessToken.

Android SDK

Залежність: com.twilio:voice-android:6.x.x. SDK працює поверх WebRTC, але пропонує high-level API.

// Ініціалізація
Voice.initialize(context, LogLevel.DEBUG)

// Вихідний звонок
val connectOptions = ConnectOptions.Builder(accessToken)
    .params(mapOf("To" to phoneNumber))
    .build()

val call = Voice.connect(context, connectOptions, object : Call.Listener {
    override fun onConnected(call: Call) { /* звонок встановлений */ }
    override fun onDisconnected(call: Call, error: CallException?) { /* завершився */ }
    override fun onConnectFailure(call: Call, error: CallException) { /* помилка */ }
})

Входящі звонки приходять через FCM. Twilio SDK обробляє FCM payload через Voice.handleMessage():

override fun onMessageReceived(message: RemoteMessage) {
    if (Voice.handleMessage(context, message.data, object : MessageListener {
        override fun onCallInvite(callInvite: CallInvite) {
            // показуємо сповіщення про входящий звонок
            showIncomingCallNotification(callInvite)
        }
        override fun onCancelledCallInvite(cancelledInvite: CancelledCallInvite, ...) {
            // звонок скасований до відповіді
        }
    })) { /* це Twilio push */ }
}

Прийняття звонку: callInvite.accept(context, callListener).

iOS SDK

CocoaPods: pod 'TwilioVoice', '~> 6.x'. PushKit обов'язковий для входящих звонків — APNs VoIP канал.

// Реєстрація PushKit токена у Twilio
func pushRegistry(_ registry: PKPushRegistry,
                  didUpdate credentials: PKPushCredentials,
                  for type: PKPushType) {
    TwilioVoice.register(accessToken: token,
                         deviceToken: credentials.token) { error in }
}

// Входящий звонок через PushKit
func pushRegistry(_ registry: PKPushRegistry,
                  didReceiveIncomingPushWith payload: PKPushPayload,
                  for type: PKPushType,
                  completion: @escaping () -> Void) {
    TwilioVoice.handleNotification(payload.dictionaryPayload,
                                   delegate: self,
                                   delegateQueue: nil)
    // ОБОВ'ЯЗКОВО викликати CallKit reportNewIncomingCall до completion
}

Порушення правила вклику CallKit до completion у PushKit делегаті — примусове завершення застосунку iOS. Це не попередження, це крах.

CallKit інтеграція через TVODefaultAudioDevice — Twilio пропонує готовий AVAudioSession менеджер, який правильно взаємодіє з CallKit. Замінити на кастомний через TwilioVoice.audioDevice = customDevice.

TwiML та маршрутизація на сервері

Коли мобільний клієнт звонить через Twilio, запит йде на ваш TwiML Application webhook. Бекенд відповідає TwiML — XML-інструкціями для Twilio:

<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Dial callerId="+1234567890">
    <Client>recipient_user_id</Client>
  </Dial>
</Response>

Для звонків на звичайні телефонні номери — <Number> замість <Client>. Twilio виступає посередником, ваш сервер керує логікою маршрутизації.

Запис звонків та аналітика

Запис через TwiML <Record> або програмно через REST API — доступна без змін у SDK. Twilio зберігає записи на своїх серверах, надаючи URL для скачування. Аналітика звонків (тривалість, якість, статуси) — через Twilio Console або REST API.

Обмеження та коли дивитися в сторону WebRTC

Twilio Voice додає latency через relay — всі медіапотоки йдуть через data centers Twilio, не P2P. Для більшості задач це непомітно (< 50 мс додаткової затримки при найближчому PoP), але в регіонах без близького data center Twilio (Центральна Азія, частина Африки) затримка помітна.

Вартість: Twilio Voice billing — за хвилину з'єднання. При великих обсягах (10 000+ хвилин/день) власний WebRTC + TURN дешевше, але дорожче в розробці та підтримці.

Що входить в роботу

Налаштовуємо Twilio аккаунт (TwiML App, API Keys, Push Credentials), реалізуємо бекенд для генерації Access Token та webhook, інтегруємо Twilio Voice SDK на Android та/або iOS з CallKit/ConnectionService, тестуємо входящі/вихідні звонки на реальних пристроях.

Строка: 1–3 тижні в залежності від складності маршрутизації та вимог до UI звонку.