本文展示如何使用 anyRTC 提供的代码在服务端生成 RTC Token。
RTC Token 在你的业务服务端生成。用户登录 RTC 系统时,客户端需要向服务端申请 RTC Token;服务器生成 RTC Token 后,再将其传给客户端。
前提条件
- 注册开发者。
- 创建项目。
- 项目在控制台已开启权限认证。详见 RTC Token 鉴权
生成 RTC Token
请参考 anyRTC 在 GitHub 的Demo ARDynamicKey ,支持使用 C++、Java、Python、PHP、Node.js、Go 语言在你的服务端部署生成 RTM Token。下图以 C++ 为例,展示生成 RTM Token 代码的文件结构:
./sample/RtcTokenBuilderSample.cpp
文件包含用于生成 RTC Token 的示例代码。
./src/RtcTokenBuilder.h
文件包含用于生成 RTC Token 的 API 源代码。
C++
int main(int argc, char const *argv[]) {
// 请填入你的项目 App ID
std::string appID = "xxxxxxxxxxxxxxxxxxxxxxxx";
// 请填入你的项目权限密钥
std::string appCertificate = "xxxxxxxxxxxxxxxxxxxxxxxx";
// 请填入频道名称
std::string channelName= "123456";
// 请填入用户 ID
std::string userAccount = "test_user_id";
uint32_t expirationTimeInSeconds = 3600;
uint32_t currentTimeStamp = time(NULL);
uint32_t privilegeExpiredTs = currentTimeStamp + expirationTimeInSeconds;
std::string result;
result = RtcTokenBuilder::buildTokenWithUserAccount(
appID, appCertificate, channelName, userAccount, UserRole::Role_Publisher,
privilegeExpiredTs);
std::cout << "Token With UserAccount:" << result << std::endl;
return 0;
}
参考步骤
开始前请确保已安装 openssl 库。
-
将 ARDynamicKey 仓库下载或克隆至本地。
-
打开
ARDynamicKey/cpp/sample/RtcTokenBuilderSample.cpp
文件,使用自己的 App ID、权限密钥、频道名称、用户 ID 替换示例代码中的值。 -
进入
RtcTokenBuilderSample.cpp
所在路径,然后运行如下命令行。运行结束后,相同文件夹下会生成一个可执行文件RtcTokenBuilderSample
。g++ -std=c++0x -O0 -I../../ -L. RtcTokenBuilderSample.cpp -lz -lcrypto -o RtcTokenBuilderSample
-
运行如下命令行生成 RTC Token。生成的 RTC Token 会显示在 Terminal 中。
./RtcTokenBuilderSample
Java
public class RtcTokenBuilderSample {
// 请填入你的项目 App ID
static String appId = "xxxxxxxxxxxxxxxxxxxxxxxx";
// 请填入你的项目权限密钥
static String appCertificate = "xxxxxxxxxxxxxxxxxxxxxxxx";
// 请填入频道名称
static String channelName = "123456";
// 请填入用户 ID
static String userAccount = "test_user_id";
// Token 服务过期时间
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);
}
参考步骤
-
将 ARDynamicKey 仓库下载或克隆至本地。
-
在你的 Java IDE 中打开
ARDynamicKey/java
文件。 -
打开
ARDynamicKey/java/src/main/java/io/ar/sample/RtcTokenBuilderSample.java
文件。使用自己的 App ID、权限密钥、用户 ID 、频道名称替换示例代码中的值。 -
在你的 Java IDE 中运行项目。生成的 RTC Token 会显示在 IDE 中。
Python
// 请填入你的项目 App ID
appID = "xxxxxxxxxxxxxxxxxxxxxxxx"
// 请填入你的项目权限密钥
appCertificate = "xxxxxxxxxxxxxxxxxxxxxxxx"
// 请填入频道名称
channelName = "123456"
// 请填入用户 ID
userAccount = "test_user_id"
// Token 服务过期时间
expireTimeInSeconds = 3600
currentTimestamp = int(time.time())
privilegeExpiredTs = currentTimestamp + expireTimeInSeconds
def main():
token = RtcTokenBuilder.buildTokenWithAccount(appID, appCertificate, channelName, userAccount, Role_Attendee, privilegeExpiredTs)
print("Token with user account: {}".format(token))
if __name__ == "__main__":
main()
参考步骤
-
将 ARDynamicKey 仓库下载或克隆至本地。
-
打开
ARDynamicKey/python/sample/RtmTokenBuilderSample.py
文件。使用自己的 App ID、权限密钥、用户 ID、频道名称替换示例代码中的值。 -
进入
RtcTokenBuilderSample.py
所在路径,然后运行如下命令行生成 RTC Token。 生成的 RTC Token 会显示在 Terminal 中。 -
python RtcTokenBuilderSample.py
Python3
// 请填入你的项目 App ID
appID = "xxxxxxxxxxxxxxxxxxxxxxxx"
// 请填入你的项目权限密钥
appCertificate = "xxxxxxxxxxxxxxxxxxxxxxxx"
// 请填入频道名称
channelName = "123456"
// 请填入用户 ID
userAccount = "test_user_id"
// Token 服务过期时间
expireTimeInSeconds = 3600
currentTimestamp = int(time.time())
privilegeExpiredTs = currentTimestamp + expireTimeInSeconds
def main():
token = RtcTokenBuilder.buildTokenWithAccount(appID, appCertificate, channelName, userAccount, Role_Attendee, privilegeExpiredTs)
print("Token with user account: {}".format(token))
if __name__ == "__main__":
main()
开始前请确保已安装 Python 3,且运行环境为 Python 3。你可以运行如下命令行查询当前 Python 版本。
参考步骤
-
将 ARDynamicKey 仓库下载或克隆至本地。
-
打开
ARDynamicKey/python3/sample/RtcTokenBuilderSample.py
文件。使用自己的 App ID、权限密钥、用户 ID、频道名称替换示例代码中的值。 -
进入
RtcTokenBuilderSample.py
所在路径,然后运行如下命令行生成 RTC Token。 生成的 RTC Token 会显示在 Terminal 中。 -
python RtcTokenBuilderSample.py
PHP
// 请填入你的项目 App ID
$appID = "xxxxxxxxxxxxxxxxxxxxxxxx";
// 请填入你的项目权限密钥
$appCertificate = "xxxxxxxxxxxxxxxxxxxxxxxx";
// 频道名称
$channelName = "123456";
// 请填入用户 ID
$uidStr = "test_user_id";
$role = RtcTokenBuilder::RoleSubscriber;
// Token 服务过期时间
$expireTimeInSeconds = 3600;
$currentTimestamp = (new DateTime("now", new DateTimeZone('UTC')))->getTimestamp();
$privilegeExpiredTs = $currentTimestamp + $expireTimeInSeconds;
$token = RtcTokenBuilder::buildTokenWithUserAccount($appID, $appCertificate, $channelName, $uidStr, $role, $privilegeExpiredTs);
echo 'Token with user account: ' . $token . PHP_EOL;
开始前请确保已安装最新版本的 PHP。
参考步骤
-
将 ARDynamicKey 仓库下载或克隆至本地。
-
打开
ARDynamicKey/sample/RtcTokenBuilderSample.php
文件。使用自己的 App ID、权限密钥、用户 ID、频道名称替换示例代码中的值。 -
进入
RtcTokenBuilderSample.php
所在路径,然后运行如下命令行生成 RTC Token。 生成的 RTC Token 会显示在 Terminal 中。 -
php RtcTokenBuilderSample.php
<
Node.js
// 请填入你的项目 App ID
const appID = 'xxxxxxxxxxxxxxxxxxxxxxxx';
// 请填入你的项目权限密钥
const appCertificate = 'xxxxxxxxxxxxxxxxxxxxxxxx';
// 频道名称
const channelName = '123456';
// 请填入用户 ID
const account = "2882341273";
const role = RtcRole.PUBLISHER;
// Token 服务过期时间
const expirationTimeInSeconds = 3600
const currentTimestamp = Math.floor(Date.now() / 1000)
const privilegeExpiredTs = currentTimestamp + expirationTimeInSeconds
// IMPORTANT! Build token with either the uid or with the user account. Comment out the option you do not want to use below.
// Build token with user account
const tokenB = RtcTokenBuilder.buildTokenWithAccount(appID, appCertificate, channelName, account, role, privilegeExpiredTs);
console.log("Token With UserAccount: " + tokenB);
开始前请确保已安装最新版本的 Node.js LTS 版本。
参考步骤
-
将 ARDynamicKey 仓库下载或克隆至本地。
-
打开
ARDynamicKey/nodejs/sample/RtcTokenBuilderSample.js
文件。使用自己的 App ID、权限密钥、用户 ID 替换示例代码中的值。 -
进入
RtcTokenBuilderSample.js
所在路径,然后运行如下命令行生成 RTC Token。 生成的 RTC Token 会显示在 Terminal 中。 -
node RtcTokenBuilderSample.js
Go
// 请填入你的项目 App ID
appID := "xxxxxxxxxxxxxxxxxxxxxxxx"
// 请填入你的项目权限密钥
appCertificate := "xxxxxxxxxxxxxxxxxxxxxxxx"
// 频道名称
channelName := "123456"
// 请填入用户 ID
uidStr := "test_user_id"
// Token 服务过期时间
expireTimeInSeconds := uint32(3600)
currentTimestamp := uint32(time.Now().UTC().Unix())
expireTimestamp := currentTimestamp + expireTimeInSeconds
result, err = rtctokenbuilder.BuildTokenWithUserAccount(appID, appCertificate, channelName, uidStr, rtctokenbuilder.RoleAttendee, expireTimestamp)
if err != nil {
fmt.Println(err)
} else {
fmt.Printf("Token with userAccount: %s\n", result)
}
开始前请确保已安装最新版本的 Golang。
参考步骤
-
将 ARDynamicKey 仓库下载或克隆至本地。
-
打开
ARDynamicKey/go/sample/RtcTokenBuilder/sample.go
文件。使用自己的 App ID、权限密钥、用户 ID、频道名称替换示例代码中的值。 -
进入
sample.go
所在路径,然后运行如下命令行。 运行结束后,相同文件夹下会生成一个可执行文件RtcTokenBuilder
。go build
-
运行如下命令行生成 Token。生成的 Token 会显示在 Terminal 中。
./RtcTokenBuilder
参数说明
下文以 C++ 的 API 为例,介绍生成 RTM Token 的 API 参数含义。具体参数解释也适用于其他语言。
static std::string buildTokenWithUserAccount(
const std::string& appId,
const std::string& appCertificate,
const std::string& channelName,
const std::string& userAccount,
UserRole role,
uint32_t privilegeExpiredTs = 0);
参数 | 描述 |
---|---|
appId | 项目 App ID。 |
appCertificate | 项目权限密钥。 |
channelName | 字符串长度不可超过 64 字节。不可设为空、null 或 "null"。支持以下字符集范围: |
userAccount | 用户 ID,64位字符串类型。如果不填或设置为nil,SDK 会自动分配一个。 规则同 channelName 。 |
userRole | 用户角色。暂时只支持一种角色,请使用默认值 Role_Publisher = 1 。 注:使用 php 生成 Token 时请勿携带。 |
privilegeExpiredTs | Token 过期的 Unix 时间戳,单位为秒。该值为当前时间戳和 Token 有效期的总和。 例如,如果你将 privilegeExpiredTs 设为当前时间戳再加 600 秒,则 Token 会在 10 分钟内过期。 Token 的最大有效期为 24 小时。 如果你将此参数设为 0,或时间长度超过 24 小时,Token 有效期依然为 24 小时。 |
注意事项
参数匹配
生成 RTC Token 时填入的参数,需要加入频道时填入的参数一致。
权限密钥与 RTC Token
生成 RTC Token 需要先在控制台启用对应项目的权限密钥。项目一旦开启了权限密钥功能,就必须使用 RTC Token 鉴权。
RTC Token 过期
Token 的最大有效期为 24 小时。为保证通信体验,anyRTC 会在 Token 即将过期或已经过期时,分别触发以下回调:
onTokenPrivilegeWillExpire:
该回调表示 Token 即将失效。onRequestToken
(Web 平台为onTokenPrivilegeDidExpire
):该回调表示 Token 已经失效。
收到任一回调后,你需要在服务端重新生成 Token,然后调用 renewToken
方法更新 Token。