前提条件

你可以通过阅读密钥说明了解更多 Token 相关。

本文操作步骤和示例图以 Xcode 13.1 为例。

步骤 1: 创建项目
  1. 打开 Xcode, 点击 File > New > Project。

  2. 选择 iOS > App , 点击 Next。

  3. 输入项目名称、团队名称、选择开发语言,点击 Next。

  1. 选择项目存储位置,点击 Create。

  2. 签名设置:进入 TARGETS > Project Name  > Signing & Capabilities。勾选 Automatically manage signing, 并在弹出菜单中选择 Enable Automatic。

步骤 2: 创建用户界面

根据场景需要,为你的项目创建互动白板的用户界面。
为实现基本的白板功能,我们建议在项目中添加如下视图或元素:

步骤 3: 集成 SDK
  1. 为 podfile 文件的 target 工程添加依赖项,例如:
platform :ios, '9.0'
source 'https://github.com/volcengine/volcengine-specs.git'
target '你的项目名字' do
  pod 'VolcEngineWhiteboard', '1.3.0'
end
  1. 在项目的配置文件里加入 SDK 依赖。
  spec.dependency 'VolcEngineWhiteboard', '1.3.0'
  1. 引入头文件

在调用了白板 SDK API 的文件中引入头文件。

//引入  头文件
#import "WhiteBoard/ByteWhiteBoardRoomManager.h"
#import "WhiteBoard/ByteWhiteBoardRoom.h"
#import "WhiteBoard/ByteWhiteBoard.h"
objectivec
步骤 4: 实现功能
基础互动白板 API 时序图

alt

1. 创建和初始化白板房间
  1. 为白板创建以下 3 个属性。
@property (nonatomic, strong) ByteWhiteBoardRoomManager * boardRoomManager;
@property (nonatomic, strong) ByteWhiteBoardRoom * boardRoom;
@property (nonatomic, strong) ByteWhiteBoard * board;
objectivec
  1. 调用类 ByteWhiteBoardRoomManager 中的方法绑定设备信息和环境。
+ (void)setDeviceID:(NSString*)deviceID;  // 指定设备 ID,方便定位和排查问题
+ (void)setACacheLocatidon:(NSString*)paith; // 设置 SDK 数据缓存路径
+ (void)setELogLocationv:(ByteWhiNSSteBoardEinvg*)envpath;   // 设置 SDK 本地日志缓存路径
objectivec
  1. 创建白板 ByteWhiteBoardRoomManager。
+ (instancetype)sharedEngineWithAppId:(NSString *)appId delegate:(id<ByteWhiteBoardRoomManagerDelegate>)delegate;
objectivec

参考 开通服务 获取 AppID。
4. 调用 createWhiteBoardRoom:userID:token:delegate: 创建白板房间。

- (ByteWhiteBoardRoom *)createWhiteBoardRoom:(NSString *)roomID userID:(NSString*)userID token:(NSString*)token delegate:(id<ByteWhiteBoardRoomDelegate>)delegate;
objectivec
2. 加入白板房间

使用刚创建的 ByteWhiteBoardRoom 进入房间。

- (void)joinRoom;
objectivec

白板服务在当前用户加入白板房间后开始计费,直到该用户调用 leaveRoom 退出房间后停止计费。建议在即将使用白板前创建白板实例。并结束使用后及时销毁白板实例。

3. 绑定白板到指定窗口

成功进入房间后,SDK 将通过 byteWhiteBoardRoom:onWhiteBoardCreated:elapsed: 回调通知白板创建完毕。

- (void)byteWhiteBoardRoom:(ByteWhiteBoardRoom *)boardRoom onWhiteBoardCreated:(ByteWhiteBoard *)board elapsed:(NSInteger)elapsed;
objectivec

在这个回调中,调用 bindToWindow 将白板绑定到一个视图上。
绑定后,白板会填满绑定的 UI 控件。根据业务的需求指定 UI 控件尺寸和比例。注意,各端的 UI 比例必须保持一致,否则将导致各端显示效果有差异。例如,老师端和学生端白板都是固定 4:3 比例。

{
    self.board = board;//很重要,给你刚刚创建的WhiteBoard属性初始化
    [self.board updateByteWhiteBoardDelegate:self];
    [self.board bindToWindow:self.view];//调用本接口后才能进行图形有关设置。只能被调用一次,重复绑定将使多个 View 叠加。
    //设置笔迹格式
    [self.board setPenSize:70];// 所有 size 的单位都是 View 宽度的万分之一
    [self.board setPenColor:[UIColor redColor]];
    [self.board setEditType:ByteWhiteBoardShapeTypePen];
    [self.board setEditMode:ByteWhiteBoardEditModeEditAll];//当前白板允许所有用户编辑。ByteWhiteBoardEditModeReadOnly 是只读
}
objectivec

至此,我们实现了互动白板的基础功能。

4. 结束使用白板

在结束白板使用时,释放资源的步骤如下。

  1. 调用 ByteWhiteBoardRoom 的 leaveRoom 离开房间,结束通话过程,释放所有通话相关的资源。
    此方法是异步操作,调用返回时并没有真正退出房间。真正退出房间后,本地会收到 byteWhiteBoardRoom:onLeaveRoomResult:reason: 回调通知。
- (void)leaveRoom;
objectivec
  1. 调用 destroyWhiteBoard 销毁白板对象。
- (int)destroyWhiteBoard:(ByteWhiteBoard *)board;
objectivec
  1. 调用 ByteWhiteBoardRoomManager 的 destory 释放资源。
[ByteWhiteBoardRoomManager destroy];
objectivec
常见问题
  1. 日志和缓存文件的路径在哪里?

默认路径为:

你可以调用 setLogLocation: 和 setCacheLocation: 自定义日志和缓存文件路径。

  1. bitcode_strip 报错
bitcode_strip ****/byteaudio.framework/byteaudio: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/bitcode_strip exited with 1

解决方法:
关闭 bitcode:自定义环境设置 STRIP_BITCODE_FROM_COPIED_FILES = NO

  1. ENABLE_BITCODE 报错
'***/WhiteBoardDemo/Lib/WhiteBoard.framework/WhiteBoard' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. file '***/WhiteBoardDemo/Lib/WhiteBoard.framework/WhiteBoard' for architecture arm64

解决方法:
设置 target 的 Enable BitCode 字段为 NO。