Интеграция Vonage (Nexmo) SDK для связи в мобильном приложении
Vonage (ранее Nexmo, после поглощения Ericsson переименован в Vonage, сейчас часть Ericsson) предоставляет несколько независимых SDK для мобильных приложений: Vonage Client SDK для In-App Voice и Messaging, Vonage Video API (ex-TokBox OpenTok) для видео, и отдельные REST API для SMS/WhatsApp. Важно не путать эти продукты — они имеют разный биллинг, разные SDK и разную документацию.
Vonage Client SDK: голосовые звонки
Vonage Client SDK для голоса построен поверх WebRTC, но предоставляет высокоуровневый API с JWT-аутентификацией и интеграцией с Vonage Voice API.
JWT генерация на бэкенде:
import jwt, time
payload = {
"application_id": VONAGE_APP_ID,
"iat": int(time.time()),
"exp": int(time.time()) + 3600,
"sub": user_id,
"acl": {
"paths": {
"/*/users/**": {},
"/*/conversations/**": {},
"/*/legs/**": {}
}
}
}
token = jwt.encode(payload, private_key, algorithm="RS256")
Vonage использует RSA-подпись JWT, а не HMAC. Приватный ключ генерируется при создании Vonage Application в Dashboard — это .key файл, который нужно хранить на сервере, не в мобильном приложении.
Android SDK:
// build.gradle
implementation 'com.vonage:client-sdk-android:8.x.x'
// Инициализация
val client = VonageClient.Builder(context)
.build()
client.setConnectionListener { connectionStatus, connectionStatusReason ->
// CONNECTED, DISCONNECTED, etc.
}
// Логин с JWT
client.login(jwt) { loginResult ->
when (loginResult) {
is LoginResult.Success -> { /* готов к звонкам */ }
is LoginResult.Failure -> { /* обработать ошибку */ }
}
}
Исходящий звонок через PSTN (на телефонный номер) или In-App (другому пользователю):
// звонок другому пользователю приложения
client.call(callee_user_name, CallType.InApp, callListener)
iOS SDK — аналогичная структура, VGClient:
VGClient.setLogger(VGClientLogger(level: .info))
let config = VGClientConfig(region: .US)
VGClient.shared.configure(config)
VGClient.shared.login(withJWT: jwt) { error in }
Входящие звонки через push — VoIP PushKit для iOS, FCM для Android. Vonage Dashboard настраивает Delivery Channel с сертификатами APNs / FCM ключом.
Vonage Video API (OpenTok)
Если задача — видеозвонки или видеоконференции, Vonage Video API (OpenTok) — отдельный продукт с более богатой функциональностью: экранный шаринг, запись, broadcast, сигнализация через встроенные каналы.
// Android OpenTok SDK
implementation 'com.vonage:client-sdk-video:x.x.x'
val session = Session.Builder(context, API_KEY, sessionId).build()
session.setSessionListener(sessionListener)
session.connect(token)
val publisher = Publisher.Builder(context).build()
session.publish(publisher)
Сессия создаётся на сервере через REST API, клиент получает sessionId и token. Модель аналогична Twilio Video.
Vonage SMS и WhatsApp Business
SMS через Vonage REST API — простейший сценарий, SDK не нужен:
POST https://rest.nexmo.com/sms/json
api_key=xxx&api_secret=yyy&from=Vonage&to=79001234567&text=Hello
WhatsApp Business через Vonage Messages API — требует одобренного шаблона от Meta для первого сообщения (outbound), любой ответ пользователя открывает 24-часовое окно для свободной переписки.
Сравнение с Twilio
| Критерий | Vonage | Twilio |
|---|---|---|
| Зрелость iOS/Android SDK | Достаточная, обновления реже | Хорошая, активная поддержка |
| PSTN покрытие | Сильное в Европе | Сильное в США, хорошее глобально |
| Видео API | OpenTok — зрелый продукт | Twilio Video — активно развивается |
| Документация | Хуже, чем у Twilio | Одна из лучших в индустрии |
| Стоимость голоса | Сопоставима с Twilio |
Основной практический недостаток Vonage Client SDK — документация. client-sdk-android версии 7.x и 8.x имеют несовместимые API, а migration guide неполный. Несколько раз приходилось разбирать changelog SDK чтобы понять, почему коллбэки перестали вызываться после обновления зависимости.
Что входит в работу
Создаём и настраиваем Vonage Application, генерируем ключевую пару RSA, реализуем бэкенд для JWT, интегрируем Client SDK или Video API на Android/iOS, настраиваем push для входящих звонков, тестируем на реальных устройствах.
Срок: 1–3 недели в зависимости от требуемого функционала (только звонки или полная коммуникационная платформа).







