集成 SDK
开发环境
Xcode 9.0+
OS X 10.10+ 的 Mac 真机
项目已配置有效的开发者签名
集成 TEduBoard SDK
您可以选择使用 CocoaPods 自动加载的方式,或者先下载 SDK 再将其导入到您当前的工程项目中。由于TEduBoard SDK 内部使用 IMSDK 作为内部信令通道,您还需 CocoaPods 或手动添加 IMSDK 依赖项。
CocoaPods
1. 安装 CocoaPods
在终端窗口中输入如下命令(需要提前在 Mac 中安装 Ruby 环境):
sudo gem install cocoapods
2. 创建 Podfile 文件
进入项目所在路径,输入以下命令行之后项目路径下会出现一个 Podfile 文件。
pod init
3. 编辑 Podfile 文件
编辑 Podfile 文件,支持选择版本号。
platform :macos, '10.11'target 'TICDemo_Mac' do# pod 'TEduBoard_Mac',:podspec=>'https://sdk.qcloudtiw.com/mac/prod/2.8.9.204/TEduBoard_Mac.podspec'pod 'TEduBoard_Mac', '>=2.8.9.204'pod 'TXIMSDK_Plus_Mac', '6.2.2363'pod 'YYModel'end
互动白板默认使用 IMSDK 作为信令通道,如果您有独立的信令通道,无需集成 IMSDK。
4. 更新并安装 SDK
在终端窗口中输入如下命令以更新本地库文件,并安装 TEduBoard SDK:
pod install
或使用以下命令更新本地库版本:
pod update
pod 命令执行完后,会生成集成了 SDK 的 .xcworkspace 后缀的工程文件,双击打开即可。
手动集成
1. 下载 TEduBoard SDK。
2. 前往 即时通信 IM 下载 IMSDK。互动白板默认使用 IMSDK 作为信令通道,如果您有独立的信令通道,请跳过此步。
3. 单击 Link Binary with Libraries 项展开,单击底下的“+”号图标去添加依赖库。
使用 TEduBoard SDK
1.
#import
SDK在项目需要使用 SDK API 的文件里,引入具体的头文件:
#import <TEduBoard_Mac/TEduBoard.h>
2. 创建白板控制器
使用如下代码创建并初始化白板控制器:
// 创建并初始化白板控制器//(1)鉴权配置TEduBoardAuthParam *authParam = [[TEduBoardAuthParam alloc] init];authParam.sdkAppId = _sdkAppId;authParam.userId = _userId;authParam.userSig = _userSig;//(2)白板默认配置TEduBoardInitParam *initParam = [[TEduBoardInitParam alloc] init];_boardController = [[TEduBoardController alloc] initWithAuthParam:authParam roomId:_classId initParam:initParam];//(3)添加白板事件回调[_boardController addDelegate:self];
其中 _sdkAppId、_userId、_userSig、_classId 为需要您自己填写的参数。
3. 白板窗口获取及显示
在
onTEBInit
或 onTEBHistroyDataSyncCompleted
回调方法内,使用如下代码获取并显示白板视图。- (void)onTEBHistroyDataSyncCompleted{//(1)获取白板 NSViewNSView *boardView = [_boardController getBoardRenderView];//(2)设置显示位置和大小boardView.frame = CGRectMake(0, 0, width, height);//(3)添加到父视图中[self.view addSubview:boardView];}
注意
1. onTEBInit 表示白板创建并鉴权完成。
2. onTEBHistroyDataSyncCompleted 表示历史数据加载完成,此时可调用白板的相关接口。
3. SDK 所有回调都在主线程内执行,因此可以在回调里直接执行 UI 操作。
4. 监听白板关键事件
在 onTEBError 和 onTEBWarning 回调方法内监听白板事件。
// 监听白板错误事件- (void)onTEBError:(TEduBoardErrorCode)code msg:(NSString *)msg{}// 监听白板告警事件- (void)onTEBWarning:(TEduBoardWarningCode)code msg:(NSString *)msg{}
5. 白板数据同步
白板在使用过程中,需要在不同的用户之间进行数据同步(涂鸦数据等),SDK 默认使用 IMSDK 作为信令通道,您需要自行实现 IMSDK 的初始化、登录、加入群组操作,确保白板初始化时,IMSDK 已处于所指定的群组内。
步骤1:初始化 IMSDK
V2TIMSDKConfig *config = [[V2TIMSDKConfig alloc] init];config.logLevel = V2TIM_LOG_WARN;[[V2TIMManager sharedInstance] initSDK:sdkAppID config:config];[[V2TIMManager sharedInstance] addIMSDKListener:listener];[[V2TIMManager sharedInstance] addAdvancedMsgListener:self];
说明:
如果您有其他业务使用了 IMSDK 并期望 IMSDK 的生命周期与 App 的生命周期保持一致,请在 AppDelegate 的 application:didFinishLaunchingWithOptions 方法中初始化 IMSDK,否则请在登录前初始化 IMSDK,在登出后反初始化 IMSDK。
步骤2:登录 IMSDK
[[V2TIMManager sharedInstance] login:userID userSig:userSig succ:^{// 登录 IMSDK 成功} fail:^(int code, NSString *desc) {// 登录 IMSDK 失败}];
说明:
步骤3:加入群组
登录 IMSDK 成功后加入白板所在的群组。
[[V2TIMManager sharedInstance] joinGroup:classId msg:nil succ:^{// 加入 IM 群组成功} fail:^(int code, NSString *desc) {// 加入 IM 群组失败}];
说明:
如果 IM 群组不存在,请先创建群组。
V2TIMGroupInfo *groupInfo = [[V2TIMGroupInfo alloc] init];groupInfo.groupID = classId;groupInfo.groupName = classId;groupInfo.groupType = @"Public";groupInfo.groupAddOpt = V2TIM_GROUP_ADD_ANY;__weak typeof(self) ws = self;[[V2TIMManager sharedInstance] createGroup:groupInfo memberList:nil succ:^(NSString *groupID) {// 创建 IM 群组成功} fail:^(int code, NSString *desc) {// 创建 IM 群组失败}];
说明:
注意
1. 推荐业务后台使用 IM REST API 提前创建群组。
2. 不同的群组类型,群组功能以及成员数量有所区别,具体请查看 IM 群组系统。
6. 销毁白板
调用 unInit 方法后,内部将彻底销毁白板并停止计费,请您确保此接口的调用。
[_boardController unInit];
如果您使用 IMSDK 作为信令通道,请根据业务的需要决定是否退出群组、退出登录并反初始化。
步骤1:退出群组
[[V2TIMManager sharedInstance] quitGroup:classId succ:^{// 登出 IMSDK 成功} fail:^(int code, NSString *desc) {// 登出 IMSDK 失败}];
说明:
步骤2:登出 IMSDK
[[V2TIMManager sharedInstance] logout:^{// 登出 IMSDK 成功} fail:^(int code, NSString *desc) {// 登出 IMSDK 失败}];
说明:
步骤3:反初始化 IMSDK
[[V2TIMManager sharedInstance] removeIMSDKListener:self];[[V2TIMManager sharedInstance] removeAdvancedMsgListener:self];[[V2TIMManager sharedInstance] unInitSDK];
说明:
如果您有其他业务使用了 IMSDK 并期望 IMSDK 的生命周期与 App 的生命周期保持一致,无需调用此接口。