2016-09-22 3 views
2

Я пытаюсь встроить Программируемое видео 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 маркеры (один из сервера, а другой локально), то мы увидим, чем лишь разницей, время создания и истечения времени:

enter image description here

Любые предложения оценили!

ответ

0

Наконец, ребята из Twilio дали нам обходной путь. Ttl 86400 по какой-то причине не может быть правильно обработана серверами Twilio. Ttl с половиной этой жизни отлично работает.

Смежные вопросы