【问题标题】:How do I create a channel and server token using AgoraRtcEngineKit in Swift?如何在 Swift 中使用 AgoraRtcEngineKit 创建通道和服务器令牌?
【发布时间】:2020-07-08 21:28:33
【问题描述】:

我正在关注 Agora.io channel management guide 加入使用 iOS 版 AgoraRtcEngineKit 的频道。它指出我应该调用 AgoraRtcEngineKit 类的 createRtcChannel 来创建一个带有频道 ID 的 AgoraRtcChannel 对象。但是,AgoraRtcEngineKit 在 Swift 中没有 createRtcChannel 方法。另一种方法是我使用 Obj-C 代码,但这似乎有点 hacky。

其次,在token generation reference之后,我需要使用RtcTokenBuilder生成一个服务器令牌。它指出“您的令牌需要在您自己的服务器上生成,因此您需要首先在服务器上部署令牌生成器。”理想情况下,我可以在 Swift 中生成令牌,但源代码唯一可用的语言是 C++、Java、Python、PHP、Node.js、Go、Ruby。我假设我可以使用 JavaScriptCore 做到这一点,但是,就像通道生成一样,这似乎不是一个最佳解决方案。

根据文档:

  • 生成令牌(或临时令牌)后,客户端应 使用令牌在 24 小时内加入频道。否则,你需要 生成新令牌(或临时令牌)。

  • 令牌(或临时令牌)在一段时间后过期 时间。当 SDK 通知客户端 token 即将发送时 expire 或已由 onTokenPrivilegeWillExpire 过期或 onTokenExpired 回调,需要生成新的令牌并调用 renewToken 方法。

  • 令牌编码使用标准 HMAC/SHA1 方法和 库在常见的服务器端开发平台上可用, 例如 Node.js、Java、PHP、Python 和 C++。

通过 Agora.io 在 iOS Swift 中使用 AgoraRtcEngineKit 生成频道和令牌以加入频道的标准方法是什么?

提前致谢!

【问题讨论】:

  • 我也有同样的问题。如果您自己找到答案,您介意将其发布吗?谢谢
  • @Jaqueline 我想通了——您需要在 Heroku 上部署动态密钥令牌生成脚本并解析 HTTP 获取请求(请参阅下面的答案)。

标签: ios swift api token agora.io


【解决方案1】:

我最终在this guide on deploying a Dynamic Key Server 之后想通了。您只需部署一个 Heroku 动态密钥服务器,它位于 TokenServer-nodeJS 中。转到此部署 link 并输入您各自的 Agora.io APP_ID 和 APP_CERTIFICATE。部署令牌服务器后,我们可以使用 HTTP 获取请求来获取令牌作为 JSON 格式的响应,然后您可以使用 SwiftyJSON 之类的框架对其进行解析。即,一旦服务器运行,您将下面替换为您的实例 url 并使用此端点生成令牌: https://<heroku url>/access_token?channel=test&uid=1234

使用此实例 url 示例:

let request = AF.request("https://matchr-token.herokuapp.com/access_token?channel=test&uid=1234")

request.responseJSON { (response) in

    guard let tokenDict = response.value as! [String : Any]? else { return }

    let token = tokenDict["token"] as! String

    // use the generated token here

 }

此实例url中有两个参数,即channel和uid,可根据需要设置生成唯一令牌。

【讨论】:

  • 我按照你说的做了,我查看了你的媒体链接。我生成了一个令牌链接和请求的 http,但是当我使用从 https:///access_token?channel=test&uid=1234 获取的令牌时,它不起作用。当我使用来自 agora 的临时令牌时,它可以工作。为什么从heroku获取的令牌不起作用。我是这样用的;等待 _engine.joinChannel(token,channelId, null, 0);我应该把 0 改成别的吗
  • 我认为必须使用令牌,但事实并非如此。据我了解,它应该用于安全性,所以我没有使用令牌。我写 null 而不是 token 并且它起作用了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 2022-10-18
  • 2014-07-30
  • 2017-06-18
  • 2016-03-18
相关资源
最近更新 更多