TwilioのProgrammableビデオをAndroidアプリに埋め込もうとしています。
次のコードでアクセストークンを取得するために "com.twilio.sdk"% "twilio-java-sdk"% "6.3.0"ライブラリを使用するエンドポイントをJavaサーバーに作成しました。
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");
});
エラーメッセージが表示された「onFailedToStartListening」コールバックに入るたびに:
com.twilio.conversations.TwilioConversationsException:コード:103、メッセージ:31201認証に失敗しました
最も奇妙なことは、「//更新されました!」から新しいトークンをコピーした場合です。ブロック(上記を参照)し、手動でコードに貼り付けます
new AccessManager(MyActivity.this,
videoToken
代わりに、ほんの数秒前にサーバーから受け取ったvideoTokenはすべてスムーズに機能し、onStartListeningForInvitesコールバックに入ります。答えを読み込もうとしたときに、サーバーのエンコードまたはエンコードに何か問題がありますか?私は数日を過ごしますが、それでもこの問題を解決することはできません。
さらに、JavaサーバーコードをPHPに置き換えようとすると、同じ結果が得られました。コンソール(ターミナル)でトークンを生成し、それをAndroidアプリのコードに貼り付けると、すべてが正常に機能します。しかし、リモートサーバーからトークンを取得しようとすると、「コード:103、メッセージ:31201認証に失敗しました」という同じエラーが発生します。
また、Twilio VoiceおよびIp-Messagingとの統合を使用していますが、トークンで問題が発生したことはありません。
JWTトークン(1つはサーバーから、もう1つはローカルで生成されたもの)をデコードする場合、違いは作成時間と有効期限だけではありません。
どんな提案もありがたいです!
最後に、Twilioの人たちが回避策を教えてくれました。何らかの理由でTtl86400をTwilioサーバーで正しく処理できませんでした。このライフタイムの半分のTtlは正常に機能します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加