用户鉴权
鉴权是指在用户访问你的系统前,对其进行身份校验。用户在使用声网服务,如加入音视频通话或登录信令系统时,声网使用 Token 对其鉴权。
RTM 提供 Message Channel、User Channel 和 Stream Channel 三种频道类型,使用不同类型的频道,对应的 Token 类型也不同:
- 使用 Message Channel 或 User Channel:只需在调用
login
方法登录 RTM 系统时,传入开通了 RTM 服务的 Token(以下简称 RTM Token)。 - 使用 Stream Channel:在使用 RTM Token 鉴权的基础上,还需要在调用
join
方法加入 Stream Channel 时传入开通了 RTC 服务的 Token(以下简称 RTC Token)。
Token 的有效期最长为 24 小时,声网推荐你在 Token 过期前更新 Token。本文介绍如何更新 Token。
想要了解生成和使用 Token 的更多信息,可以查看:
AgoraRtmClientKit.renewToken
接口描述
调用 AgoraRtmClientKit.renewToken
方法更新 RTM Token。
为保证及时更新 Token,声网推荐你监听 tokenPrivilegeWillExpire
回调,详见事件监听。成功添加事件监听后,当 RTM Token 还有 30 秒过期时,SDK 会触发 tokenPrivilegeWillExpire
回调,提醒用户 Token 即将过期。收到该回调时,你可以在服务端重新生成 RTM Token,然后调用 renewToken
方法,将新生成的 RTM Token 传给 SDK。
接口方法
你可以通过以下方式调用 AgoraRtmClientKit.renewToken
方法:
renewToken(_ token: String, completion completionBlock: AgoraRtmOperationBlock? = nil)
renewToken(_ token: String) async -> (AgoraRtmCommonResponse?, AgoraRtmErrorInfo?)
参数 | 类型 | 是否必填 | 默认值 | 描述 |
---|---|---|---|---|
token | String | 必填 | - | 新生成的 RTM Token。 |
completion | AgoraRtmOperationBlock | 选填 | - | 调用结果回调:
|
基本用法
// async-await
let (response, error) = await rtmClient.renewToken(token: "your_token_here")
if let error = error {
print("Login failed with error: \(error.reason)")
} else if let response = response {
print("renew token successful!")
} else {
print("Unknown error")
}
// callback
rtmClient.renewToken(token: "your_token_here") { response, error in
if let errorInfo = error {
print("renew token failed with error: \(errorInfo.reason)")
} else let loginResponse = response {
print("renew token successful: \(loginResponse)")
}
}
AgoraRtmStreamChannel.renewToken
接口描述
调用 AgoraRtmStreamChannel.renewToken
方法更新 RTC Token。
为保证及时更新 Token,声网推荐你监听 tokenPrivilegeWillExpire
回调,详见事件监听。成功添加事件监听后,当 RTC Token 还有 30 秒过期时,SDK 会触发 tokenPrivilegeWillExpire
回调,提醒用户 Token 即将过期。收到该回调时,你可以在服务端重新生成 RTC Token,然后调用 renewToken
方法,将新生成的 RTC Token 传给 SDK。
接口方法
你可以通过以下方式调用 AgoraRtmStreamChannel.renewToken
方法:
renewToken(_ token: String, completion completionBlock: AgoraRtmOperationBlock? = nil)
renewToken(_ token: String) async -> (AgoraRtmCommonResponse?, AgoraRtmErrorInfo?)
参数 | 类型 | 是否必填 | 默认值 | 描述 |
---|---|---|---|---|
token | String | 必填 | - | 新生成的 RTC Token。 |
completion | AgoraRtmOperationBlock | 选填 | - | 调用结果回调:
|
接口方法
// async-await
let (response, error) = await streamChannel.renewToken(token: "your_token_here")
if let error = error {
print("Login failed with error: \(error.reason)")
} else if let response = response {
print("renew token successful!")
} else {
print("Unknown error")
}
// callback
streamChannel.renewToken(token: "your_token_here") { response, error in
if let errorInfo = error {
print("renew token failed with error: \(errorInfo.reason)")
} else let loginResponse = response {
print("renew token successful: \(loginResponse)")
}
}