Інтеграція 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, але пропонує high-level 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, т.ч.
}
// Логін з 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 покриття | Сильне в Європі | Сильне в США, хорошое глобально |
| Video API | OpenTok — зрілий продукт | Twilio Video — активно розвивається |
| Документація | Гірше, ніж у Twilio | Одна з кращих в індустрії |
| Вартість голосу | Порівнювана з Twilio |
Основний практичний недостаток Vonage Client SDK — документація. Версії 7.x та 8.x мають несумісні API, migration guide неповний. Кілька разів доводилося розбирати changelog SDK щоб зрозуміти, чому callbacks перестали викликатися після оновлення залежності.
Що входить в роботу
Створюємо та налаштовуємо Vonage Application, генеруємо ключову пару RSA, реалізуємо бекенд для JWT, інтегруємо Client SDK або Video API на Android/iOS, налаштовуємо push для входящих звонків, тестуємо на реальних пристроях.
Строка: 1–3 тижні в залежності від потрібного функціоналу (тільки звонки або повна комунікаційна платформа).







