Express 如何从 AppSign 鉴权升级为 Token 鉴权?
产品 / 插件:实时音视频 / 实时语音 / 低延迟直播 / 互动白板 / 文件共享 / 本地服务端录制 / 屏幕共享 / 小程序直播 / GO课堂 / 超低延迟直播
平台 / 框架:iOS / Android / macOS / Windows / Linux / Flutter / Electron / React Native / uni-app / Unity3D
更新时间:2024-01-16 17:40
文档导读
为了提高项目的安全性,对于使用 AppSign 鉴权的开发者,当您的产品升级如下版本后,可以使用 Token 鉴权且鉴权通过后才能使用相关服务(如果您不需要,可继续使用 AppSign 鉴权方式),您可以参考本文档进行升级。
实时音视频
- iOS/Android/macOS/Windows/Unity3D:2.17.0 及以上版本
- Flutter:2.17.1 及以上版本
- React Native:0.17.0 及以上版本
- uni-app:1.5.0 及以上版本
- Electron:2.17.3 及以上版本
- Linux(C++):2.17.3 及以上版本
本地服务端录制
ga01596a1c8 及以上版本(2022-03-23 发布)
超级白板
iOS/Android:2.3.0 及以上版本(2022-05-26 发布)
互动白板
说明:使用互动白板 SDK 时,Token 鉴权相关步骤,请参考 使用 Token - 实时音视频 即可,下文不再赘述。
- iOS/Android:2.3.0 及以上版本(2022-05-26 发布)
- Electron:2.1.6 及以上版本(2022-05-26 发布)
文件共享
- iOS/Android:2.3.0 及以上版本(2022-05-26 发布)
- Electron:2.1.6 及以上版本(2022-05-26 发布)
鉴权方式
鉴权方式 | 功能描述 | 安全级别 |
---|---|---|
AppSign 鉴权 |
在创建引擎时传入 AppSign,鉴权通过后即可使用实时音视频功能。 |
安全级别很低。 原因为:如果 AppSign 被泄漏,攻击者会盗用您的云服务流量,并且 AppSign 没有过期机制,建议您尽快升级为 Token 鉴权。 |
Token 鉴权(推荐) |
Token 鉴权是在创建引擎时将 AppSign 传空或不传,并且在登录房间时必须传入 Token,鉴权通过后即可使用实时音视频功能。 该方式能兼容 Appsign 鉴权,即当您同时传入了 AppSign 和 Token 时,SDK 会把这两个参数都传给 ZEGO 服务端,只要其中一个校验通过则表示鉴权通过。 |
安全级别高。 原因为:通过开发者自建服务端下发 Token,并且在客户端上进行认证,且下发的 Token 具有时效性。因此,我们推荐您使用 Token 鉴权。 |
强制 Token 鉴权 |
该方式指的是通过 ZEGO 技术支持配置强制 Token 鉴权服务,此时必须使用 Token 鉴权,鉴权通过后即可使用实时音视频功能。 该方式不兼容 AppSign 鉴权。 |
安全等级最高。 原因为:强制使用 Token 鉴权后,不再兼容 AppSign 鉴权,安全性进一步提高,但是线上使用 AppSign 鉴权的老版本则不能正常使用,您需要谨慎使用。 |
兼容性说明
使用 AppSign 鉴权、Token 鉴权、强制 Token 鉴权三种方式具有一定的兼容性,若您历史版本使用 AppSign 鉴权,则:
- 不开启强制 Token 鉴权开关(默认):ZEGO Express SDK 新版本可以使用 Token 鉴权或 AppSign 鉴权。
- 开启强制 Token 鉴权开关:ZEGO Express SDK 无论新老版本,都强制使用 Token 鉴权,不兼容 AppSign 鉴权。
版本信息请参考 文档导读。
升级指导
服务开通
Token 鉴权默认开通。
若您需要开启强制 Token 鉴权,则需联系 ZEGO 技术支持开通。
生成 Token
开发者客户端向开发者服务端发送请求申请 Token,由开发者服务端生成 Token 后返回给到对应客户端。
ZEGO 在 GitHub/Gitee 提供了一个开源的 zego_server_assistant 插件,支持使用 Go、C++、Java、Python、PHP、.NET、Node.js 语言,在开发者的服务端或客户端部署生成 Token(不推荐客户端生成)。
zego_server_assistant 中包含 token03 和 token04 两个版本的插件,以 ZEGO Express SDK iOS 平台为例, SDK 对插件的支持情况如下:
- token03:ZEGO Express SDK 2.8.0 及以上版本都支持。
- token04:只有 ZEGO Express SDK 2.17.0 及以上版本支持。
生成 Token 的详细介绍请参考如下文档:
产品 | 参考文档 |
---|---|
实时音视频 |
|
实时语音 |
|
本地服务端录制 |
|
超级白板 |
|
互动白板 |
|
文件共享 |
使用 Token
本章主要介绍您升级 SDK 后如何使用 Token 功能。
产品 | 平台 |
---|---|
实时音视频/实时语音 |
|
本地服务端录制 |
|
超级白板 |
|
文件共享 |
实时音视频/实时语音
各平台的实现流程如下:
iOS
- 已下载并集成最新版本的 SDK,详情请参考 集成 SDK。
- 调用 createEngine 接口创建引擎时,ZegoEngineProfile 中的 “AppSign” 传空或者不传。
ZegoEngineProfile *profile = [[ZegoEngineProfile alloc] init];
// 请通过官网注册获取,格式为:1234567890
profile.appID = appID;
//通用场景接入,请根据实际情况选择合适的场景
profile.scenario = ZegoScenarioDefault;
// 创建引擎,并注册 self 为 eventHandler 回调。不需要注册回调的话,eventHandler 参数可以传 nil,后续可调用 "-setEventHandler:" 方法设置回调
[ZegoExpressEngine createEngineWithProfile:profile eventHandler:self];
- 调用 loginRoom 接口登录房间时,房间进阶配置 ZegoRoomCofig 中需要填入开发者服务器生成的 Token。
NSString *roomID = @"xxx"; // 要登录的房间ID
ZegoUser *user = [ZegoUser userWithUserID:@"xxxx"];
ZegoRoomConfig *config = [[ZegoRoomConfig alloc] init];
config.token = @"xxxxxxxx"; // 请求开发者服务端获取
[[ZegoExpressEngine sharedEngine] loginRoom:roomID user:user config:config];
- 在收到的 onRoomTokenWillExpire 回调后,调用 renewToken 接口更新 Token 并传入 SDK 即可。
NSString *token = [MyToken getToken]; // 重新请求开发者服务端获取 Token
[[ZegoExpressEngine sharedEngine] renewToken:token roomID:roomID];
Android
- 已下载并集成最新版本的 SDK,详情请参考 集成 SDK。
- 调用 createEngine 接口创建引擎时,ZegoEngineProfile 中的 “AppSign” 传空或者不传。
// 创建引擎,通用场景接入,并注册 self 为 eventHandler 回调
// 不需要注册回调的话,eventHandler 参数可以传 null,后续可调用 "setEventHandler:" 方法设置回调
ZegoEngineProfile profile = new ZegoEngineProfile();
profile.appID = ; // 请通过官网注册获取,格式为:1234567890L
profile.scenario = ZegoScenario.DEFAULT; // 通用场景接入,请根据实际情况选择合适的场景
profile.application = getApplication();
engine = ZegoExpressEngine.createEngine(profile, null);
- 调用 loginRoom 接口登录房间时,房间进阶配置 ZegoRoomConfig 中需要填入开发者服务器生成的 Token。
String roomID = "xxx" // 要登录的房间ID
ZegoUser user = new ZegoUser("xxxx");
ZegoRoomConfig config = new ZegoRoomConfig();
config.token = "xxxxxxxxxx"; // 请求开发者服务端获取
engine.loginRoom(roomID, user, config);
- 在收到的 onRoomTokenWillExpire 回调后,调用 renewToken 接口更新 Token 并传入 SDK 即可。
String token = getToken(); // 重新请求开发者服务端获取 Token;
engine.renewToken(roomID, token);
macOS
- 如果您使用的是 Objective-C:请参考 iOS。
- 如果您使用的是 C++:请参考 Windows。
Windows
- 已下载并集成最新版本的 SDK,详情请参考 集成 SDK。
- 调用 createEngine 接口创建引擎时,ZegoEngineProfile 中的 “AppSign” 传空或者不传。
ZegoEngineProfile profile;
// AppID 由 ZEGO 分配给各 App
profile.appID = appID;
// 通用场景接入,请根据实际情况选择合适的场景
profile.scenario = ZegoScenario::ZEGO_SCENARIO_DEFAULT;
// 创建引擎实例
auto engine = ZegoExpressSDK::createEngine(profile, nullptr);
- 调用 loginRoom 接口登录房间时,房间进阶配置 ZegoRoomConfig 中需要填入开发者服务器生成的 Token。
std::string roomID = 'xxx'; // 要登录的房间ID
ZegoUser user;
user.userID = 'xxxx';
user.userName = 'xxxx';
ZegoRoomConfig config;
config.token = 'xxxxxxxxxx' // 请求开发者服务端获取
engine->loginRoom(roomID, user, config);
- 在收到的 onRoomTokenWillExpire 回调后,调用 renewToken 接口更新 Token 并传入 SDK 即可。
void onRoomTokenWillExpire(const std::string& /*roomID*/, int /*remainTimeInSecond*/) override {
std::string token = getToken(); // 重新请求开发者服务端获取 Token
engine->renewToken(roomID, token);
}
Unity3D
- 已下载并集成最新版本的 SDK,详情请参考 集成 SDK。
- 调用 CreateEngine 接口创建引擎时,ZegoEngineProfile 中的 “AppSign” 传空或者不传。
// 定义 SDK 引擎对象
ZegoExpressEngine engine;
ZegoEngineProfile profile = new ZegoEngineProfile();
profile.appID = appID; // 请通过官网注册获取,格式为 123456789
profile.scenario = ZegoScenario.Default; // 通用场景接入,请根据实际情况选择合适的场景
// 初始化SDK
engine = ZegoExpressEngine.CreateEngine(profile);
- 调用 LoginRoom 接口登录房间时,房间进阶配置 ZegoRoomConfig 中需要填入开发者服务器生成的 Token。
string roomID = "xxx"; // 要登录的房间ID
ZegoUser user = new ZegoUser();
user.userID = "xxxx";
user.userName = "xxxx";
ZegoRoomConfig config = new ZegoRoomConfig();
config.token = "xxxxxxxxxx"; // 请求开发者服务端获取
engine.LoginRoom(roomID, user, config);
- 在收到的 onRoomTokenWillExpire 回调后,调用 renewToken 接口更新 Token 并传入 SDK 即可。
void OnRoomTokenWillExpire(string roomID, int remainTimeInSecond){
string token = getToken(); // 重新请求开发者服务端获取 Token
engine.RenewToken(roomID, token);
}
Flutter
- 已下载并集成最新版本的 SDK,详情请参考 集成 SDK。
- 调用 createEngineWithProfile 接口创建引擎时,ZegoEngineProfile 中的 “AppSign” 传空或者不传。
ZegoEngineProfile profile = ZegoEngineProfile(
appID, // 请通过官网注册获取,格式为:1234567890
ZegoScenario.General, // 通用场景接入
enablePlatformView: true);
// 创建引擎
ZegoExpressEngine.createEngineWithProfile(profile);
- 调用 loginRoom 接口登录房间时,房间进阶配置 ZegoRoomConfig 中需要填入开发者服务器生成的 Token。
// 创建用户对象
ZegoUser user = ZegoUser.id('user1');
// 只有传入 “isUserStatusNotify” 参数取值为 “true” 的 ZegoRoomConfig,才能收到 onRoomUserUpdate 回调。
ZegoRoomConfig config = ZegoRoomConfig.defaultConfig();
config.isUserStatusNotify = true;
// token 由用户自己的服务端生成,为了更快跑通流程,也可以通过即构控制台获取临时的音视频 token
config.token = "xxxx";
// 开始登录房间
ZegoExpressEngine.instance.loginRoom('room1', user, config: config);
- 在收到的 onRoomTokenWillExpire 回调后,调用 renewToken 接口更新 Token 并传入 SDK 即可。
ZegoExpressEngine.onRoomTokenWillExpire = (String roomID, int remainTimeInSecond) {
String token = getToken(); // 重新请求开发者服务端获取 Token;
ZegoExpressEngine.instance.renewToken(roomID, token);
};
React Native
- 已下载并集成最新版本的 SDK,详情请参考 集成 SDK。
- 调用 createEngineWithProfile 接口创建引擎时,ZegoEngineProfile 中的 “AppSign” 传空或者不传。
// 导入
import ZegoExpressEngine from 'zego-express-engine-reactnative';
// 采用通用场景
const profile = {
appID : xxx,
scenario : 0
};
ZegoExpressEngine.createEngineWithProfile(profile)
- 调用 loginRoom 接口登录房间时,房间进阶配置 ZegoRoomConfig 中需要填入开发者服务器生成的 Token。
let roomConfig = {};
//token 由用户自己的服务端生成,为了更快跑通流程,也可以通过即构控制台获取临时的音视频 token
roomConfig.token = "xxxx";
// 只有传入 “isUserStatusNotify” 参数取值为 “true” 的 ZegoRoomConfig,才能收到 onRoomUserUpdate 回调。
roomConfig.isUserStatusNotify = true;
// 登录房间
// 开始登录房间
ZegoExpressEngine.instance().loginRoom('room1', {'userID': 'id1', 'userName': 'user1'}, roomConfig);
- 在收到的 roomTokenWillExpire 回调后,调用 renewToken 接口更新 Token 并传入 SDK 即可。
ZegoExpressEngine.instance().on("roomTokenWillExpire", (roomID, remainTimeInSecond){
let token = getToken(); // 重新请求开发者服务端获取 Token;
ZegoExpressEngine.instance().renewToken(roomID, token);
});
uni-app
- 已下载并集成最新版本的 SDK,详情请参考 集成 SDK。
- 调用 createEngineWithProfile 接口创建引擎时,ZegoEngineProfile 中的 “AppSign” 传空或者不传。
// 导入
import ZegoExpressEngine from '@/zego-express-video-uniapp/lib/ZegoExpressEngine';
// 采用通用场景
const profile = {
appID : xxx,
scenario : 0
};
ZegoExpressEngine.createEngineWithProfile(profile)
- 调用 loginRoom 接口登录房间时,房间进阶配置 ZegoRoomConfig 中需要填入开发者服务器生成的 Token。
let roomConfig = {};
//token 由用户自己的服务端生成,为了更快跑通流程,也可以通过即构控制台获取临时的音视频 token
roomConfig.token = "xxxx";
// 只有传入 “isUserStatusNotify” 参数取值为 “true” 的 ZegoRoomConfig,才能收到 onRoomUserUpdate 回调。
roomConfig.isUserStatusNotify = true;
// 登录房间
// 开始登录房间
ZegoExpressEngine.instance().loginRoom('room1', {'userID': 'id1', 'userName': 'user1'}, roomConfig);
- 在收到的 roomTokenWillExpire 回调后,调用 renewToken 接口更新 Token 并传入 SDK 即可。
ZegoExpressEngine.instance().on("roomTokenWillExpire", (roomID, remainTimeInSecond){
let token = getToken(); // 重新请求开发者服务端获取 Token;
ZegoExpressEngine.instance().renewToken(roomID, token);
});
Electron
- 已下载并集成最新版本的 SDK,详情请参考 集成 SDK。
- 调用 createEngine 接口创建引擎时,ZegoEngineProfile 中的 “AppSign” 传空或者不传。
// 引入 ZegoExpressEngine
const zgEngine = window.require('zego-express-engine-electron/ZegoExpressEngine');
const zgDefines = window.require('zego-express-engine-electron/ZegoExpressDefines');
// AppID 由 ZEGO 分配给各 App;从 2.17.3 版本开始,ZEGO 不再下发 appSign,即用户在创建引擎时可将 appSign 填空或者不填,但是要正常使用 SDK 的功能,必须在登录房间时传入 token 进行鉴权校验;
// 采用通用场景
const profile = {
appID : xxx,
scenario : zgDefines.ZegoScenario.General
};
zgEngine.createEngine(profile)
.then(() => {
console.log("init succeed")
}).catch((e) => {
console.log("init failed", e)
});
- 调用 loginRoom 接口登录房间时,房间进阶配置 ZegoRoomConfig 中需要填入开发者服务器生成的 Token。
zgEngine.loginRoom('roomID', { userID: 'zego', userName: zego}, config = {token: 'xxxx'});
- 在收到的 onRoomTokenWillExpire 回调后,调用 renewToken 接口更新 Token 并传入 SDK 即可。
zgEngine.on("onRoomTokenWillExpire", res=>
{
zgEngine.renewToken(roomID = TheRoomID, token = 'xxxx');
});
Linux(C++)
- 已下载并集成最新版本的 SDK,详情请参考 集成 SDK。
- 调用 createEngine 接口创建引擎时,ZegoEngineProfile 中的 “AppSign” 传空或者不传。
ZegoEngineProfile profile;
// AppID 由 ZEGO 分配给各 App
profile.appID = appID;
profile.scenario = ZegoScenario::ZEGO_SCENARIO_DEFAULT;
// 创建引擎实例
auto engine = ZegoExpressSDK::createEngine(profile, nullptr);
- 调用 loginRoom 接口登录房间时,房间进阶配置 ZegoRoomConfig 中需要填入开发者服务器生成的 Token。
std::string roomID = 'xxx'; // 要登录的房间ID
ZegoUser user;
user.userID = 'xxxx';
user.userName = 'xxxx';
ZegoRoomConfig config;
config.token = 'xxxxxxxxxx' // 请求开发者服务端获取
engine->loginRoom(roomID, user, config);
- 在收到的 onRoomTokenWillExpire 回调后,调用 renewToken 接口更新 Token 并传入 SDK 即可。
void onRoomTokenWillExpire(const std::string& /*roomID*/, int /*remainTimeInSecond*/) override {
std::string token = getToken(); // 重新请求开发者服务端获取 Token
engine->renewToken(roomID, token);
}
本地服务端录制
Linux
unsigned int appId = appID;//此处填写 AppID
LIVEROOM::InitSDK(appId);
- 在登录房间之前调用 SetCustomToken 接口将 Token 传入 SDK。
LIVEROOM::SetCustomToken("token"); // 此处填写正确的鉴权 Token
超级白板
iOS
- 已下载并集成最新版本的 ZegoSuperBoard SDK(已包含 ZegoExpressEngine SDK),详情请参考 集成 SDK。
- 调用 ZegoExpressEngine 的 createEngine 接口创建引擎时,ZegoEngineProfile 中的 “AppSign” 传空或者不传。
ZegoEngineProfile *profile = [[ZegoEngineProfile alloc] init];
// 请通过官网注册获取,格式为:1234567890
profile.appID = appID;
//通用场景接入,请根据实际情况选择合适的场景
profile.scenario = ZegoScenarioDefault;
// 创建引擎,并注册 self 为 eventHandler 回调。不需要注册回调的话,eventHandler 参数可以传 nil,后续可调用 "-setEventHandler:" 方法设置回调
[ZegoExpressEngine createEngineWithProfile:profile eventHandler:self];
- 使用 ZegoSuperBoardManager 的 initWithConfig 方法初始化 ZegoSuperBoard SDK 时,传入 userID,并填入开发者服务器生成的 Token。
/** 填写 appID*/
unsigned int appID = ; /** 请通过官网注册获取,格式为 123456789L */
//创建一个初始化配置类ZegoSuperBoardInitConfig
ZegoSuperBoardInitConfig * config = [ZegoSuperBoardInitConfig new];
config.appID = appID; //赋值 appID
config.token = token; //赋值 token
config.userID = userID; //赋值 userID
//设置ZegoSuperBoardManager监听,需要在登录房间之前设置
[ZegoSuperBoardManager sharedInstance].delegate = self;
[[ZegoSuperBoardManager sharedInstance] initWithConfig:config complete:^(ZegoSuperBoardError errorCode) {
if (errorCode == ZegoSuperBoardSuccess) {
/** 初始化成功 */
} else {
/** 初始化失败 */
}
}];
- 调用 ZegoExpressEngine 的 loginRoom 接口登录房间时,房间进阶配置 ZegoRoomConfig 中需要填入开发者服务器生成的 Token。
NSString *roomID = @"xxx"; // 要登录的房间ID
ZegoUser *user = [ZegoUser userWithUserID:@"xxxx"];
ZegoRoomConfig *config = [[ZegoRoomConfig alloc] init];
config.token = @"xxxxxxxx"; // 请求开发者服务端获取
[[ZegoExpressEngine sharedEngine] loginRoom:roomID user:user config:config];
- 在收到的 onRoomTokenWillExpire 回调后,调用 renewToken 接口更新 Token 并传入 SDK 即可。
NSString *token = [MyToken getToken]; // 重新请求开发者服务端获取 Token
[[ZegoExpressEngine sharedEngine] renewToken:token roomID:roomID];
Android
- 已下载并集成最新版本的 ZegoSuperBoard SDK(已包含 ZegoExpressEngine SDK),详情请参考 集成 SDK。
- 调用 ZegoExpressEngine 的 createEngine 接口创建引擎时,ZegoEngineProfile 中的 “AppSign” 传空或者不传。
// 创建引擎,通用场景接入,并注册 self 为 eventHandler 回调
// 不需要注册回调的话,eventHandler 参数可以传 null,后续可调用 "setEventHandler:" 方法设置回调
ZegoEngineProfile profile = new ZegoEngineProfile();
profile.appID = ; // 请通过官网注册获取,格式为:1234567890L
profile.scenario = ZegoScenario.DEFAULT; // 通用场景接入,请根据实际情况选择合适的场景
profile.application = getApplication();
engine = ZegoExpressEngine.createEngine(profile, null);
- 使用 ZegoSuperBoardManager 的 init 方法初始化 ZegoSuperBoard SDK 时,传入 userID,并填入开发者服务器生成的 Token。
// 配置superBoard初始化所需要的appID,token和UserID
ZegoSuperBoardInitConfig config = new ZegoSuperBoardInitConfig();
config.appID = appID; //赋值 appID
config.token = token; //赋值 token
config.userID = userID; //赋值 userID
// 调用SuperBoardManager初始化SuperBoard sdk
// this 为Android的Application上下文,因此此段代码建议放在Application中实现
ZegoSuperBoardManager.getInstance().init(this, config, new IZegoSuperBoardInitCallback() {
@Override
public void onInit(int errorCode) {
Log.d(TAG, "init ZegoSuperBoardManager result: errorCode = [" + errorCode + "]");
if (errorCode == ZegoSuperBoardError.ZegoSuperBoardSuccess) {
/** 初始化成功 */
} else {
/** 初始化失败 */
}
}
});
- 调用 ZegoExpressEngine 的 loginRoom 接口登录房间时,房间进阶配置 ZegoRoomConfig 中需要填入开发者服务器生成的 Token。
String roomID = "xxx" // 要登录的房间ID
ZegoUser user = new ZegoUser("xxxx");
ZegoRoomConfig config = new ZegoRoomConfig();
config.token = "xxxxxxxxxx"; // 请求开发者服务端获取
engine.loginRoom(roomID, user, config);
- 在收到的 onRoomTokenWillExpire 回调后,调用 renewToken 接口更新 Token 并传入 SDK 即可。
String token = getToken(); // 重新请求开发者服务端获取 Token;
engine.renewToken(roomID, token);
文件共享
iOS
- 已下载并集成最新版本的 ZegoDocsView SDK,详情请参考 集成 SDK。
- 使用 ZegoDocsViewManager 的 initWithConfig 方法初始化 ZegoDocsView SDK 时,传入 userID,并填入开发者服务器生成的 Token。
ZegoDocsViewConfig *config = [ZegoDocsViewConfig new];
config.appID = appID;//即构 AppID
config.userID = userID;//用户 userID
config.token = token;//鉴权token,从客户自己的服务器拿到
config.dataFolder = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/ZegoDocs"] stringByAppendingString:@"data"];//SDK 相关数据目录
config.cacheFolder = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/ZegoDocs"] stringByAppendingString:@"doc"];//SDK 相关缓存目录
config.logFolder = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/ZegoDocs"] stringByAppendingString:@"log"];//SDK 相关日志目录
[[ZegoDocsViewManager sharedInstance] initWithConfig:config completionBlock:^(ZegoDocsViewError errorCode) {
if (errorCode == ZegoDocsViewSuccess) {
NSLog(@"初始化 SDK 成功");
} else {
NSLog(@"初始化 SDK 失败 %ld",errorCode);
}
}];
- 在收到的
tokenWillExpire
回调后,调用renewToken
接口更新 Token 并传入 SDK 即可。
- (void)tokenWillExpire
{
NSString * token = **; //后台获取到的token
[[ZegoDocsViewManager sharedInstance] renewToken:token];
}
Android
- 已下载并集成最新版本的 ZegoDocsView SDK,详情请参考 集成 SDK。
- 使用 ZegoDocsViewManager 的 init 方法初始化 ZegoDocsView SDK 时,传入 userID,并填入开发者服务器生成的 Token。
long appID = ; /** 请通过官网注册获取,格式为 123456789L */
String token = ; /** 鉴权token*/
String UserID = ; /** 用户唯一ID*/
Application application ; //android app的 application
ZegoDocsViewConfig config = new ZegoDocsViewConfig();
config.setAppID(appID);
config.setToken(token);
config.setUserID(userID);
ZegoDocsViewManager.getInstance().init(application,config, new IZegoDocsViewInitListener() {
@Override
public void onInit(int errorCode) {
if (errorCode == 0) {
/** 初始化成功 */
} else {
/** 初始化失败 */
}
}
});
- 在收到的
onTokenWillExpire
回调后,调用renewToken
接口更新 Token 并传入 SDK 即可。
ZegoDocsViewManager.getInstance().setTokenListener(new IZegoDocsViewSetTokenListener() {
@Override
public void onTokenWillExpire(int remainTimeInSecond) {
//从服务器获取新的token
String token = getTokenFromServer();
ZegoDocsViewManager.getInstance().renewToken(token);
}
});
Electron
- 已下载并集成最新版本的 ZegoDocsView SDK,详情请参考 集成 SDK。
- 初始化 ZegoDocsView SDK 时,传入 userID,并填入开发者服务器生成的 Token。
/** 引入 ZegoExpressDocs SDK */
const ZegoExpressDocs = window.require('zego-express-docsview-electron');
/**
* 初始化 ZegoExpressDocs SDK
* @param appID: ZEGO 为开发者签发的应用 ID,请从 ZEGO 管理控制台申请
* @param dataFolder: 可选,SDK 内部数据保存目录,开发者无需关注此目录下的具体内容
* @param cacheFolder: 可选,SDK 缓存保存目录
* @param logFolder: 可选,日志保存目录,记录 SDK 运行过程中的日志,便于定位
* @param token: 用于验证身份的 Token
* @param userID: 同一个 AppID 内,需保证 “userID” 全局唯一
*/
const zegoExpressDocs = new ZegoExpressDocs({
appID,
dataFolder,
cacheFolder,
logFolder,
token,
userID
});
- 在收到的
onTokenWillExpire
回调后,调用renewToken
接口更新 Token 并传入 SDK 即可。
zegoExpressDocs.on('onTokenWillExpire', function(data){
var newToken = 'new token';
zegoExpressDocs.renewToken(newToken)
})