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 中生成令牌