Интеграция Vonage (Nexmo) SDK для связи в мобильном приложении
Мы часто сталкиваемся с ситуацией: клиент уже использует Twilio, но ищет альтернативу с лучшим покрытием в Европе или более гибкими условиями. Или — MVP нужно запустить с голосовыми звонками, а бюджет не позволяет Video API. Vonage (ранее Nexmo, после поглощения Ericsson) — прямой конкурент Twilio, но с рядом нюансов. Разберём, как мы подключаем Vonage Client SDK и Video API, с какими граблями сталкивались и что важно учесть.
Vonage предоставляет несколько независимых SDK для мобильных приложений: Vonage Client SDK для In-App Voice и Messaging, Vonage Video API (ex-TokBox OpenTok) для видео, и отдельные REST API для SMS/WhatsApp. Важно не путать эти продукты — они имеют разный биллинг, разные SDK и разную документацию. Ошибка выбора SDK — одна из частых проблем на старте.
Как настроить push-уведомления для входящих звонков?
Без push входящий звонок не дойдёт, если приложение свёрнуто. Для iOS используем VoIP PushKit, для Android — FCM (Firebase Cloud Messaging). Настройка требует:
- Загрузить сертификат APNs (или ключ) в Vonage Dashboard.
- Указать FCM-ключ для Android.
- В SDK включить соответствующий delivery channel при логине.
// Android: включить push-уведомления val config = VGClientConfig() config.pushConfig = VGPushConfig.Builder(context) .setChannel(VGPushConfig.Channel.FCM) .build() После этого входящие звонки будут приходить даже в убитом состоянии, а система сама покажет native call UI (на iOS — CallKit, на Android — вызов по Notification).
Vonage Client SDK: голосовые звонки
Vonage Client SDK для голоса построен поверх WebRTC, но предоставляет высокоуровневый API с JWT-аутентификацией и интеграцией с Vonage Voice API.
JWT генерация на бэкенде — ключевой момент. Vonage использует RSA-подпись JWT, а не HMAC. Приватный ключ генерируется при создании Vonage Application в Dashboard — это .key файл, который нужно хранить на сервере, не в мобильном приложении.
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") Пример инициализации на Android:
// 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 -> { /* обработать ошибку */ } } } Почему Vonage Client SDK сложнее Twilio?
Основной практический недостаток — документация. client-sdk-android версии 7.x и 8.x имеют несовместимые API, а migration guide неполный. Несколько раз приходилось разбирать changelog SDK, чтобы понять, почему коллбэки перестали вызываться после обновления зависимости. У Twilio с этим лучше: примеры актуальны, breaking changes — редкость. Но Vonage выигрывает в цене на европейских номерах и в гибкости лицензирования Video API.
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, но OpenTok существует дольше, поэтому стабильнее работает на слабых сетях.
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 |
Vonage выигрывает в Европе по покрытию PSTN, но проигрывает в качестве документации. По нашим замерам, интеграция Client SDK на Android занимает на 20–30% дольше, чем аналогичная на Twilio, из-за необходимости разбираться в устаревших примерах.
Что входит в работу
Создаём и настраиваем Vonage Application, генерируем ключевую пару RSA, реализуем бэкенд для JWT, интегрируем Client SDK или Video API на Android/iOS, настраиваем push для входящих звонков, тестируем на реальных устройствах. Мы уже провели более 15 интеграций Vonage для клиентов из Европы и СНГ — все 5+ лет опыта с мобильными SDK.
Срок: 1–3 недели в зависимости от требуемого функционала (только звонки или полная коммуникационная платформа). Закажите интеграцию Vonage SDK — оценим ваш проект и предложим оптимальный стек.
Типичные ошибки при интеграции
- Путаница между Client SDK и Video API — разный подход к аутентификации.
- Использование HMAC вместо RSA для JWT — Vonage отвергает такие токены.
- Хранение приватного ключа на клиенте — утечка приведёт к полной компрометации.
- Неправильная настройка delivery channel для push — звонки не приходят в фоне.
Избежав этих граблей, вы сэкономите до двух дней на отладке. Если нужна помощь — свяжитесь с нами. Источник: Vonage Developer Documentation







