2016-09-22 52 views
2

我試圖將Twilio的可編程視頻嵌入到我的Android應用程序中。如何正確處理Twilio'可編程視頻'JWT訪問令牌? (Android)

我創建了一個終點我的Java服務器,它使用 「com.twilio.sdk」 % 「twilio-Java的SDK」 % 「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應用程序從這個端點,以及與此令牌

new AccessManager(MyActivity.this, 
      videoToken, 
      new AccessManager.Listener() { 
     @Override 
     public void onTokenExpired(AccessManager twilioAccessManager) { 
      //Expired :(
     } 

     @Override 
     public void onTokenUpdated(AccessManager twilioAccessManager) { 
      //Updated! 
     }); 

實例AccessManager,並試圖與在accessManagerListener下面的代碼創建TwilioConversationsClient:

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身份驗證失敗

的奇怪的事情,如果我從'// Updated!'複製新的令牌塊(見上文),並且它

new AccessManager(MyActivity.this, 
      videoToken 

代替videoToken手工粘貼到代碼中,我從服務器之前,只是一個秒接收,一切工作順利,我進入onStartListeningForInvites回調。當我嘗試閱讀答案時,可能是服務器編碼或編碼有問題?我花了幾天,但仍然無法解決這個問題。

甚至更​​多,我試圖用PHP替換我的java服務器代碼,並得到相同的結果!如果我在控制檯(終端)中生成令牌,然後將其粘貼到Android應用代碼中,則一切正常。但是,如果我試圖從遠程服務器獲取令牌,則會收到與'code:103,message:31201 Authentication failed'相同的錯誤。

我還使用與Twilio Voice和Ip-Messaging的集成,並且我從來沒有使用過令牌的問題。

如果我們將解碼JWT令牌(一個從服務器,並在本地另一生成的),我們將看到比唯一的區別是創建和到期時間時間:

enter image description here

任何建議表示讚賞!

回答

0

最後來自Twilio的人給了我們一個解決方法。由於某些原因Ttl 86400無法通過Twilio服務器正確處理。 Ttl與這一生的一半工作正常。