Я пытаюсь встроить Программируемое видео Twilio в мое приложение для Android.Как правильно обрабатывать токен доступа Twilio 'Programmable video' JWT? (Android)
Я создал конечную точку на моем Java-сервер, который использует «com.twilio.sdk»% «Twilio-ява-СДК»% «6.3.0» библиотека для получения маркера доступа с помощью следующего кода:
private static final String ACCOUNT_SID = "ACxxxxx";
private static final String API_KEY_SID = "SKxxxxx";
private static final String API_KEY_SECRET = "aa8xxxxx";
private static final String TWILIO_CONFIGURATION_SID = "VSxxxxx";
public Result token(String identity) {
return ok(Json.toJson(new ResponseMessage(createToken(identity))));
}
public static String createToken(String identity) {
ConversationsGrant grant = new ConversationsGrant();
grant.configurationProfileSid = TWILIO_CONFIGURATION_SID;
AccessToken token = new AccessToken.Builder(
ACCOUNT_SID,
API_KEY_SID,
API_KEY_SECRET
).identity(identity).grant(grant).ttl(86400).build();
return token.toJWT();
}
Тогда я получать токен в моем Android приложение от этой конечной точки, и инстанцировании AccessManager с этой лексемы
new AccessManager(MyActivity.this,
videoToken,
new AccessManager.Listener() {
@Override
public void onTokenExpired(AccessManager twilioAccessManager) {
//Expired :(
}
@Override
public void onTokenUpdated(AccessManager twilioAccessManager) {
//Updated!
});
, и пытается создать TwilioConversationsClient со следующим кодом в accessManagerListener:
TwilioConversationsClient.create(twilioAccessManager, new TwilioConversationsClient.Listener() {
@Override
public void onStartListeningForInvites(TwilioConversationsClient conversationsClient) {
Log.d(TAG, "TwilioConversationsClient.Listener: onStartListeningForInvites");
}
@Override
public void onStopListeningForInvites(TwilioConversationsClient conversationsClient) {
Log.d(TAG, "TwilioConversationsClient.Listener: onStopListeningForInvites");
}
@Override
public void onFailedToStartListening(TwilioConversationsClient conversationsClientd,
TwilioConversationsException e) {
Log.d(TAG, "TwilioConversationsClient.Listener: onFailedToStartListening");
});
Evetytime Я получаю в обратный вызов 'onFailedToStartListening' с сообщением об ошибке:
com.twilio.conversations.TwilioConversationsException: Код: 103, сообщение: 31201 Ошибка аутентификации
Самое странное, если я копирую новый токен из '// Обновлено!' блок (смотри выше), и вставьте его в код вручную в
new AccessManager(MyActivity.this,
videoToken
вместо videoToken, что я получать от сервера всего за секунды до, все работает гладко, и я получаю в onStartListeningForInvites обратного вызова. Может быть, что-то не так с кодировкой или кодировкой сервера, когда я пытаюсь прочитать ответ? Я провожу несколько дней, но до сих пор не могу решить эту проблему.
И даже больше, я попытался заменить свой код Java-сервера на PHP и получил тот же результат! Если я создаю токен в консоли (терминал), а затем вставляю его в код приложения Android, все работает хорошо. Но если я пытаюсь получить токен с удаленного сервера, я получаю ту же ошибку с кодом: 103, сообщение: 31201 Ошибка аутентификации.
Я также использую интеграцию с Twilio Voice и Ip-Messaging, и у меня никогда не было проблем с токенами.
Если мы будем декодировать JWT маркеры (один из сервера, а другой локально), то мы увидим, чем лишь разницей, время создания и истечения времени:
Любые предложения оценили!