如何正确处理Twilio'可编程视频'JWT访问令牌? (机器人)

时间:2016-09-22 18:58:50

标签: android playframework-2.0 twilio twilio-api

我尝试将Twilio的可编程视频嵌入到我的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应用程序接收来自此端点的令牌,并使用此令牌实例化AccessManager

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

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

,并尝试使用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:code:103,message: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

任何建议都赞赏!

1 个答案:

答案 0 :(得分:0)

最后来自Twilio的人给了我们一个解决方法。 Twilio服务器无法正确处理Ttl 86400。这一生中有一半的Ttl工作正常。

相关问题