javascript - Agora.io DYNAMIC_USE_STATIC_KEY 生成的 RTC Token (php)
问题描述
我有一个问题:我在控制台中得到 DYNAMIC_USE_STATIC_KEY 试图建立连接。
2 Agora 控制台和 rtcTokenBuilder 生成的 Token 不同,第二个较长,使用会出现这个错误。使用控制台令牌一切正常。
令牌示例: 控制台:0068bedd2631cf24edea47479b64ad219ceIAAYXDdhxjKQyDWQEoqK0qEiAYo+dLSyd/YNAaflVD4PJO/ZQc0AAAAEACMMKzfQDg1YAEAAQA/ODVg
rtcTokenBuilder: 0068bedd2631cf24edea47479b64ad219ceIAADpmWghbJIToZQMC9YrQjBhtFgpdZS4tIlOkXTjk+LKe/ZQc0h39v0IgCa0wUAjQY2YAQAAQA5tjRgAwA5tjRgAgA5tjRgBAA5tjRg
rtcTokenBuilder代码片段:
$appID = "8*************************";
$appCertificate = "+++++++++++++++++++++++++++7";
$channelName = "Test Chamber";
$uid = 0;
$role = RtcTokenBuilder::RoleAttendee;
$expireTimeInSeconds = 300; // 5 min for test purposes
$currentTimestamp = (new DateTime("now", new DateTimeZone('UTC')))->getTimestamp();
$privilegeExpiredTs = $currentTimestamp + $expireTimeInSeconds;
$token = RtcTokenBuilder::buildTokenWithUid($appID, $appCertificate, $channelName, $uid, $role, $privilegeExpiredTs);
echo $token;
.js 文件:
client.join(token, room, 0, (uid) => { // 0 -> uid
let localStream = AgoraRTC.createStream({
audio: true,
video: true
});
localStream.init(() =>
.....
client.on("onTokenPrivilegeWillExpire", function(){
$.ajax({
url: tokenGenPath, // path to rtcTokenBuilder php generator
method: "POST",
success: function(data){
newToken = data;
},
error: function(){
}
});
client.renewToken(newToken);
});
它在这里说,我不提供 Token 事先连接:Agora Docs
PS 我还注意到,如果我在 Agora 控制台中生成一个 Token 作为开始,并且在这个 Token 到期的情况下,一个新的有效Token 会从 rtcTokenBuilder 生成并且连接/对话继续。
解决方案
所以,问题出在两个地方。首先,我改变了 AJAX 调用
从
client.on("onTokenPrivilegeWillExpire", function(){
$.ajax({
url: tokenGenPath, // path to rtcTokenBuilder php generator
method: "POST",
success: function(data){
newToken = data;
},
error: function(){
}
});
client.renewToken(newToken);
});
至:
client.on("onTokenPrivilegeWillExpire", function(){
$.post(tokenGenPath, function (token){
client.renewToken(token);
});
});
第二,我通过客户端初始化将第一个令牌生成移出主函数:
$.post(tokenGenPath, function (data){
token = data;
});
function runApp (room, client, token){
client.join(token, room, 0, (uid) => { // 0 -> uid
let localStream = AgoraRTC.createStream({
audio: true,
video: true
});
localStream.init(() =>
.....
}
推荐阅读
- javascript - 在 TypeScript 中使用 Backbone 模型
- c - 谁能帮我看看这段代码有什么问题?
- php - 如何在codeigniter中添加Textlocal api?
- kernel - 如何使用misc_register可以自动创建设备节点
- sharepoint - 从 Power Apps 中的 zip 文件导入现有解决方案时,错误为“DynamicOperationRequestClientFailure”
- r - 如何使用循环在 R 中运行具有不同变量的回归?
- java - 无法向 Google Cloud 进行身份验证
- ruby-on-rails - 是否有可能为一个特定的 grant_flows 发布 JWT?
- javascript - Apps 脚本 - Gmail 插件 - 获取 Gmail 邮件中的选定文本
- python - Disord.py - 如何列出机器人所在的所有服务器?