本文介绍如何使用 anyRTC 互动白板 SDK。
前提条件
- Xcode 9.0 或以上版本(本文 Xcode 的界面描述以 Xcode 11.0 为例)
- iOS 9.0 或以上版本的设备
- 有效的 anyRTC 开发者账号
创建 iOS 项目
-
打开 Xcode 并点击 Create a new Xcode project。
-
选择平台类型为 iOS、项目类型为 Single View App,并点击 Next。
-
输入项目名称(Product Name)、开发团队信息(Team)、组织名称(Organization Name)和语言(Language)等项目信息,并点击 Next。
如果你没有添加过开发团队信息,会看到 Add account… 按钮。点击该按钮并按照屏幕提示登入 Apple ID,完成后即可选择你的 Apple 账户作为开发团队。
-
选择项目存储路径,并点击 Create。
获取 SDK
选择如下任意一种方式获取最新版 anyRTC SDK。
方法一:使用 CocoaPods 获取 SDK
- 开始前确保你已安装 Cocoapods。参考 Getting Started with CocoaPods 安装说明。
- 在终端里进入项目根目录,并运行
pod init
命令。项目文件夹下会生成一个Podfile
文本文件。 - 打开
Podfile
文件,修改文件为如下内容。注意将Your App
替换为你的 Target 名称。
# platform :ios, '9.0' use_frameworks!
target 'Your App' do
pod 'ARBoard_iOS'
end
- 在终端内运行
pod install
命令安装 SDK。成功安装后,Terminal 中会显示Pod installation complete!
,此时项目文件夹下会生成一个xcworkspace
文件。 - 打开新生成的
xcworkspace
文件。
方法二:从官网获取 SDK
-
前往 SDK 下载页面,获取最新版的 anyRTC SDK,然后解压。
-
根据你的需求,选择以下一种方法将
ARBoard.framework
动态库复制到项目的./project_name
文件夹下(project_name
为你的项目名称)。 -
打开 Xcode,进入 TARGETS > Project Name > General > Frameworks, Libraries, and Embedded Content菜单。
-
点击 + > Add Other… > Add Files 添加
ARtcKit.framework
动态库,并确保添加的动态库 Embed 属性设置为 Embed & Sign。 添加完成后,项目会自动链接所需系统库。
根据 Apple 官方要求,app 的 Extension 中不允许包含动态库。如果项目中的 Extension 需要集成 SDK,则添加动态库时需将文件状态改为 Do Not Embed。
基本流程
现在,我们已经将 anyRTC SDK 集成到项目中了。接下来我们要在 ViewController
中调用 anyRTC SDK 提供的核心 API 实现基础的白板功能。
1. 初始化白板
Swift
func initializeBoard() {
let authParam = ARBoardAuthParam()
authParam.appId = "你的APPID"
authParam.uid = "XXX"
let baseParam = ARBoardBaseParam()
baseParam.authConfig.drawEnable = false
baseParam.config.ratio = "3:4"
baseParam.config.toolType = .none
boardKit = ARBoardKit(authParam: authParam, roomId: channelId, boardParam: baseParam, delegate: self)
}
2. 白板事件回调
Swift
extension ARBoardViewController: ARBoardDelegate {
func board(_ boardKit: ARBoardKit, didOccurError errorCode: ARBoardErrorCode) {
/// 发生错误回调
Logger.log(message: "didOccurError errorCode = \(errorCode.rawValue)", level: .error)
}
func didHistoryDataSyncCompleted(_ boardKit: ARBoardKit) {
/// 历史数据同步完成回调
boardKit.setDrawEnable(true)
Logger.log(message: "didHistoryDataSyncCompleted", level: .error)
}
func board(_ boardKit: ARBoardKit, addBoard boardIds: [Any], fileId: String) {
/// 添加白板页的回调
Logger.log(message: "addBoard boardIds = \(boardIds) fileId = \(fileId) ", level: .info)
}
func board(_ boardKit: ARBoardKit, deleteBoard boardIds: [Any], fileId: String) {
/// 删除白板页的回调
Logger.log(message: "deleteBoard boardIds = \(boardIds) fileId = \(fileId)", level: .info)
}
func board(_ boardKit: ARBoardKit, gotoBoard fileId: String, boardId: String) {
/// 白板页切换的回调
Logger.log(message: "gotoBoard fileId = \(fileId) boardId = \(boardId)", level: .info)
}
func board(_ boardKit: ARBoardKit, scaleChange boardId: String, scale: CGFloat) {
/// 白板缩放的回调
Logger.log(message: "scaleChannge boardId = \(boardId) scale = \(scale)", level: .info)
}
func board(_ boardKit: ARBoardKit, connectionChangedTo state: ARBoardConnectionStateType, reason: ARBoardConnectionChangedReason) {
/// 网络状态回调
Logger.log(message: "connectionChangedTo state = \(state.rawValue) reason = \(reason.rawValue)", level: .info)
}
func board(_ boardKit: ARBoardKit, undoStateChange enable: Bool) {
/// 当前白板页是否可撤销
Logger.log(message: "undoStateChange enable = \(enable)", level: .info)
}
func board(_ boardKit: ARBoardKit, redoStateChange enable: Bool) {
/// 当前白板页是否可重做
Logger.log(message: "redoStateChange enable = \(enable)", level: .info)
}
func boardReset(_ boardKit: ARBoardKit) {
/// 重置白板(删除所有白板页和涂鸦)
Logger.log(message: "boardReset", level: .info)
}
func board(_ boardKit: ARBoardKit, clear fileId: String, boardId: String, clearBackground isClearBackground: Bool) {
/// 清空白板回调
Logger.log(message: "clear fileId = \(fileId) boardId = \(boardId) isClearBackground = \(isClearBackground)", level: .info)
}
func board(_ boardKit: ARBoardKit, imageStatusChange status: ARBoardImageStatus, fileId: String, boardId: String, data: ARBoardImageData) {
/// 背景图片加载状态变化的回调
Logger.log(message: "imageStatusChange status = \(status.rawValue) fileId = \(fileId) boardId = \(boardId)", level: .info)
}
func board(_ boardKit: ARBoardKit, backgroundColorChange color: UIColor) {
/// 背景颜色改变的回调
Logger.log(message: "backgroundColorChange color = \(color)", level: .info)
}
}
运行项目
在运行项目前,你需要设置签名和开发团队,并添加相应权限。