产品 / 插件:互动白板
平台 / 框架:iOS / Android
更新时间:2022-07-12 17:39
创建一个互动白板之前需要先完成哪些工作?
在使用互动白板 SDK 之前,需要保证以下条件成立:
如果你的 AppID 没有开通互动白板的功能,那么当你使用 ZegoExpress SDK 的 loginRoom 接口登录房间时,会登录失败并收到错误码 52005033。
解决方案:请联系技术支持开通互动白板功能。
互动白板 SDK 需要与包含白板能力的 ZegoExpress SDK 搭配使用,才能正常工作,所以请确认你的 ZegoExpress SDK 版本包含了白板能力。
互动白板 SDK 中已包含 ZegoExpress-Video SDK(含白板功能),无需单独下载。
初始化 ZegoExpress-Video SDK,详情可参考实时音视频的 快速开始 - 实现流程。
如果您需要切换鉴权方式,请参考 如何从 AppSign 鉴权升级为 Token 鉴权。
iOS 示例:
ZegoEngineProfile *profile = [[ZegoEngineProfile alloc] init];
// 请通过官网注册获取,格式为:1234567890
profile.appID = <#appID#>;
//请通过官网注册获取,格式为:@"0123456789012345678901234567890123456789012345678901234567890123"(共64个字符)
profile.appSign = appSign;
//通用场景接入
profile.scenario = ZegoScenarioGeneral;
// 创建引擎,并注册 self 为 eventHandler 回调。不需要注册回调的话,eventHandler 参数可以传 nil,后续可调用 "-setEventHandler:" 方法设置回调
[ZegoExpressEngine createEngineWithProfile:profile eventHandler:self];
Android 示例:
// 创建引擎,通用场景接入,并注册 self 为 eventHandler 回调
// 不需要注册回调的话,eventHandler 参数可以传 null,后续可调用 "setEventHandler:" 方法设置回调
ZegoEngineProfile profile = new ZegoEngineProfile();
profile.appID = ; // 请通过官网注册获取,格式为:1234567890L
profile.appSign = appSign; //请通过官网注册获取,格式为:@"0123456789012345678901234567890123456789012345678901234567890123"(共64个字符)
profile.scenario = ZegoScenario.GENERAL; // 通用场景接入
profile.application = getApplication();
engine = ZegoExpressEngine.createEngine(profile, null);
ZegoWhiteboardManager
的 initWithCompleteBlock
接口初始化 ZegoWhiteboardView SDK。详情可参考互动白板的 快速开始 - 实现流程。如果回调 completeBlock 中的 “errorCode” 为 0,代表初始化成功,可进行更多操作。errorCode 可参考 常见错误码。
iOS 示例:
[[ZegoWhiteboardManager sharedInstance] initWithCompleteBlock:^(ZegoWhiteboardViewError errorCode) {
//errorCode = 0 代表初始化成功
}];
Android 示例:
ZegoWhiteboardManager.getInstance().init(context, new IZegoWhiteboardInitListener() {
@Override
public void onInit(int errorCode) {
if (errorCode == 0) {
/** 初始化成功 */
} else {
/** 初始化失败 */
}
}
});
调用 ZegoExpressEngine
的 loginRoom
接口登录房间。
错误码详情请参考 登录房间错误码 。
iOS 示例:
- (void)loginRoom {
// roomID 由您本地生成,需保证 “roomID” 全局唯一。不同用户要登陆同一个房间才能进行通话
NSString *roomID = @"room1";
// 创建用户对象,ZegoUser 的构造方法 userWithUserID 会将 “userName” 设为与传的参数 “userID” 一样。“userID” 与 “userName” 不能为 “nil”,否则会导致登录房间失败。
// userID 由您本地生成,需保证 “userID” 全局唯一。
ZegoUser *user = [ZegoUser userWithUserID:@"user1"];
// 只有传入 “isUserStatusNotify” 参数取值为 “true” 的 ZegoRoomConfig,才能收到 onRoomUserUpdate 回调。
ZegoRoomConfig *roomConfig = [[ZegoRoomConfig alloc] init];
roomConfig.isUserStatusNotify = YES;
// 登录房间
[[ZegoExpressEngine sharedEngine] loginRoom:roomID user:user config:roomConfig callback:^(int errorCode, NSDictionary * _Nullable extendedData) {
// (可选回调) 登录房间结果,如果仅关注登录结果,关注此回调即可
if (errorCode == 0) {
NSLog(@"房间登录成功");
} else {
// 登录失败,请参考 errorCode 说明 https://doc-zh.zego.im/article/4377
NSLog(@"房间登录失败");
}
}];
}
Android 示例:
//登录房间
void loginRoom() {
// ZegoUser 的构造方法 public ZegoUser(String userID) 会将 “userName” 设为与传的参数 “userID” 一样。“userID” 与 “userName” 不能为 “null” 否则会导致登录房间失败。
ZegoUser user = new ZegoUser("user2");
ZegoRoomConfig roomConfig = new ZegoRoomConfig();
// 只有传入 “isUserStatusNotify” 参数取值为 “true” 的 ZegoRoomConfig,才能收到 onRoomUserUpdate 回调。
roomConfig.isUserStatusNotify = true;
// roomID 由您本地生成,需保证 “roomID” 全局唯一。不同用户要登陆同一个房间才能进行通话
String roomID = "room1";
// 登录房间
engine.loginRoom(roomID, user, roomConfig, (int error, JSONObject extendedData)->{
// 登录房间结果,如果仅关注登录结果,关注此回调即可
if (error == 0) {
// 登录成功
Toast.makeText(this, "登录成功", Toast.LENGTH_LONG).show();
} else {
// 登录失败,请参考 errorCode 说明 https://doc-zh.zego.im/article/4378
Toast.makeText(this, "登录失败,请参考 errorCode 说明 https://doc-zh.zego.im/article/4378", Toast.LENGTH_LONG).show();
}
});
}
在登录房间成功之后,你会收到回调onRoomStateUpdate
,当登录成功时,即可创建 ZegoWhiteboardView。
具体流程如下:
ZegoWhiteboardViewModel
iOS 示例:
// 创建白板模型
ZegoWhiteboardViewModel *model = [[ZegoWhiteboardViewModel alloc] init];
model.aspectWidth = 16.0 * 5; // 希望创建的白板的等比宽,如果我们创建超过一页的白板,需要乘以相应页数的倍数
model.aspectHeight = 9.0; // 希望创建的白板的等比高
model.roomID = @"123456"; // 传入房间ID,便于接收端判断
model.name = @"白板";
Android 示例:
//创建白板模型
ZegoWhiteboardViewModel zegoWhiteboardViewModel = new ZegoWhiteboardViewModel();
zegoWhiteboardViewModel.setAspectHeight(9); // 希望创建的白板的等比高
zegoWhiteboardViewModel.setAspectWidth(16 * 5); // 希望创建的白板的等比宽,如果需要创建多页的白板,需要乘以相应的倍数
zegoWhiteboardViewModel.setName("白板1");
zegoWhiteboardViewModel.setPageCount(5); // 白板的页数
zegoWhiteboardViewModel.setRoomId("123");
createWhiteboardView
接口创建 ZegoWhiteboardView
。iOS 示例:
[[ZegoWhiteboardManager sharedInstance] createWhiteboardView:model completeBlock:^(ZegoWhiteboardViewError errorCode, ZegoWhiteboardView *whiteboardView) {
whiteboardView.frame = CGRectMake(0, 0, 500, 300);
[self.view addSubView: whiteboardView];
}];
Android 示例:
ZegoWhiteboardManager.getInstance().createWhiteboardView(zegoWhiteboardViewModel, new IZegoWhiteboardCreateListener() {
@Override
public void onCreate(int errorCode, @Nullable ZegoWhiteboardView whiteboardView) {
}
});
如果是需要创建 文件白板
,那么在创建 ZegoWhiteboardView
之前,还需要先初始化文件共享 SDK,成功后调用 ZegoDocsView 类的loadFile
接口,在回调成功中去创建 ZegoWhiteboardView
。
具体可参考 互动白板与文件共享的搭配使用。
联系我们
文档反馈