【问题标题】:Agora.io token issue AndroidAgora.io 令牌问题 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 天更改一次凭据 并且新生成的令牌在生成后即将到期 因此,如果有人遇到同样的问题并对此提供任何帮助,我们将不胜感激

【问题讨论】:

    标签: android agora.io


    【解决方案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小时。

      【讨论】:

        猜你喜欢
        • 2012-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-19
        • 2011-11-07
        • 1970-01-01
        相关资源
        最近更新 更多