Agora.io 令牌问题 Android

Posted

技术标签:

【中文标题】Agora.io 令牌问题 Android【英文标题】:Agora.io token issue Android 【发布时间】:2021-04-29 08:10:27 【问题描述】:

我们正在从 agora 提供的令牌服务器生成 agora 令牌,但令牌在生成后立即过期,它抛出错误代码 109 的 DYNAMIC-KEY-EXPIRY,我尝试使用下面 SDK 中提供的 onRequestToken() 回调方法是代码sn-p

override fun onRequestToken() 
            //this will be called when the token expires
            //so generate new token and renew the existing token
            runOnUiThread 
                regenerateToken()
            
        

并从服务器获取另一个令牌并使用 mRtcEngine.renewToken(token) 更新令牌 我们已就此联系 agora 团队,但有时无法找到令牌生成的问题,我们有两个帐户,一个是测试帐户,另一个是主帐户,当我们使用一个凭证时,它可以工作一天左右,之后我们需要每 2 天更改一次凭据 并且新生成的令牌在生成后即将到期 因此,如果有人遇到同样的问题并对此提供任何帮助,我们将不胜感激

【问题讨论】:

【参考方案1】:

生成令牌时,可以在请求参数中设置令牌过期时间。这是令牌生成指南。 https://docs.agora.io/en/Video/token_server?platform=android

如果您设置了过期时间但仍有问题,请告诉我。

【讨论】:

Hi Yang 我们已经解决了由于时区差异导致的问题,因为 agora 的服务器在美国,我们需要相应地设置过期时间【参考方案2】:

我们正在使用 agora 令牌服务器生成令牌,到期时间为 3600

const  RtcTokenBuilder, RtmTokenBuilder, RtcRole, RtmRole  = require('agora-access-token');

const 角色 = RtcRole.PUBLISHER;

const expirationTimeInSeconds = 3600

const currentTimestamp = Math.floor(Date.now() / 1000)

const privilegeExpiredTs = currentTimestamp + expirationTimeInSeconds

const generateAuthTokenToInititateCall = async (channel, cb) =>

const token = RtcTokenBuilder.buildTokenWithUid(appID, appCertificate, channel, 0, role, privilegeExpiredTs);

cb( "token": token, "channel": channel )

这是节点js代码sn-p

【讨论】:

【参考方案3】:

有人能解决这个问题吗?尽管将过期时间设置为 3600 秒(距当前时间 1 小时),但仍会发生这种情况。

【讨论】:

嗨 my3vshenoy 我们已经解决了由于时区差异导致的问题,因为 agora 的服务器在美国,我们需要相应地设置过期时间【参考方案4】:

让我为你做这个令牌生成非常简单,也是后面的过程。

*首先如何生成token?

您需要一个后端服务器,当您为服务器提供频道名称时,该服务器会为您提供令牌。没有你会被告知不需要这个后端服务器的地方。相反,您可以将令牌生成代码以目录形式直接复制粘贴到应用程序中。

*这个令牌生成代码在哪里?

https://github.com/AgoraIO/Tools/tree/master/DynamicKey/AgoraDynamicKey/java/src 这段代码可用于flutter,也可以研究一下。

*如何使用它生成token?

在项目中拥有所有 java 文件后,您就可以使用它们来生成令牌。在这里您可以看到一个变量 expireTimeInSeconds,这将是您希望令牌处于活动状态的总时间。剩下的所有工作都交给它将为您完成的代码。

package io.agora.sample;

import io.agora.media.RtcTokenBuilder;
import io.agora.media.RtcTokenBuilder.Role;

public class RtcTokenBuilderSample 
    static String appId = "970CA35de60c44645bbae8a215061b33";
    static String appCertificate = "5CFd2fd1755d40ecb72977518be15d3b";
    static String channelName = "7d72365eb983485397e3e3f9d460bdda";
    static String userAccount = "2082341273";
    static int uid = 2082341273;
    static int expirationTimeInSeconds = 3600; 

    public static void main(String[] args) throws Exception 
        RtcTokenBuilder token = new RtcTokenBuilder();
        int timestamp = (int)(System.currentTimeMillis() / 1000 + expirationTimeInSeconds);
        String result = token.buildTokenWithUserAccount(appId, appCertificate,  
                 channelName, userAccount, Role.Role_Publisher, timestamp);
        System.out.println(result);
        
        result = token.buildTokenWithUid(appId, appCertificate,  
             channelName, uid, Role.Role_Publisher, timestamp);
        System.out.println(result);
    

这里的结果是生成的令牌,有效期为3600秒,即1小时。

【讨论】:

以上是关于Agora.io 令牌问题 Android的主要内容,如果未能解决你的问题,请参考以下文章

用于 android kotlin 的 agora io 1on 1 视频聊天在 firebase 中生成令牌

Agora.io 多个房间用于 veideochat

Web Agora.io DYNAMIC_KEY_EXPIRED

使用 agora.io 向远程用户发送用户信息元数据?

录制 Agora 时只获得一个屏幕

错误:包 io.agora.rtm 不存在