常见问题

产品 / 插件
平台 / 框架

使用互动白板前需要做些什么?

产品 / 插件:互动白板

平台 / 框架:iOS / Android

更新时间:2022-07-12 17:39


问题描述

创建一个互动白板之前需要先完成哪些工作?

解决方案

在使用互动白板 SDK 之前,需要保证以下条件成立:

1 你的 AppID 开通了互动白板的功能

如果你的 AppID 没有开通互动白板的功能,那么当你使用 ZegoExpress SDK 的 loginRoom 接口登录房间时,会登录失败并收到错误码 52005033。

解决方案:请联系技术支持开通互动白板功能。

2 你需要下载包含白板能力的 ZegoExpress SDK

互动白板 SDK 需要与包含白板能力的 ZegoExpress SDK 搭配使用,才能正常工作,所以请确认你的 ZegoExpress SDK 版本包含了白板能力。

互动白板 SDK 中已包含 ZegoExpress-Video SDK(含白板功能),无需单独下载。

3 初始化 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);

4 初始化 ZegoWhiteboardView SDK

  1. 使用 ZegoWhiteboardManagerinitWithCompleteBlock 接口初始化 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 {
            /** 初始化失败 */
        }
    }
});

5 登录房间

调用 ZegoExpressEngineloginRoom 接口登录房间。

错误码详情请参考 登录房间错误码

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();
        }
    });
}

6 创建 ZegoWhiteboardView

在登录房间成功之后,你会收到回调onRoomStateUpdate,当登录成功时,即可创建 ZegoWhiteboardView。 具体流程如下:

  1. 初始化 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");
  1. 调用 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 。 具体可参考 互动白板与文件共享的搭配使用

本篇目录
下载 PDF