概览
本节介绍如何创建项目,并将 RTM SDK 集成至你的项目中。
开发环境要求
快速集成
创建项目
导入SDK
方法一:使用CocaPods 自动集成
- 开始前确保本地已安装CocaPods。如未安装请参看考 Getting Started with CocoaPods
- 在 Terminal 里进入项目根目录,并运行 pod init 命令。项目文件夹下会生成一个 Podfile 文本文件。
- 打开 Podfile 文件,修改文件为如下内容。注意将 Your App 替换为你的 Target 名称。
platform :ios,'9.0'
target ‘Your App’ do
pod 'ARtmKit_iOS'
use_frameworks!
end
- 在 Terminal 内运行 pod update 命令更新本地库版本。
- 运行 pod install 命令安装 ARtmKit SDK。成功安装后,Terminal 中会显示 Pod installation complete!,此时项目文件夹下会生成一个 xcworkspace 文件。
- 打开新生成的 xcworkspace 文件。
方法二:手动复制 ARtmKit SDK文件
- 前往 SDK 下载页面,获取最新版的 anyRTC SDK。
- 在项目中找到ARtmKit.framework,复制到项目文件夹下。
- 打开 Xcode(以 Xcode 11.0 为例),进入 TARGETS > Project Name > General > Frameworks, Libraries, and Embedded Content 菜单,点击 +,再点击 Add Other… 添加 ARtmKit.framework。添加完成后,项目会自动链接其他系统库。为保证动态库的签名和 app 的签名一致,你需要将动态库的 Embed 属性设置为 Embed & Sign。
注意事项:
根据 Apple 官方要求,App 的 Extension 不允许包含动态库。如果工程中的 Extension 需要集成 SDK,则集成动态库时需将文件状态改为 Do Not Embed。
动态库添加前:
动态库添加后:
配置权限
添加网络权限
根据场景需要,在 info.plist 文件中,点击 + 图标开始添加如下内容,获取相应的设备权限:
Key | Type | Value |
---|---|---|
App Transport Security Settings | Dictionary | Allow Arbitrary Loads 设置为YES |
添加前:
添加后:
操作流程
初始化SDK
在使用RTM相关功能之前必须要先初始化ARtmKit
- 在初始化
ARtmKit
之前,首先要去官网申请App Id
,把申请到的App Id
替换下面示例代码中的"Your AppId"
func initRtmKit() {
// 实例化rtm对象
rtmKit = ARtmKit(appId: <#T##String#>, delegate: self)
}
登录
APP在成功登录RTM服务器后才能使用点对点消息,群聊等相关服务
- 传入能标识用户角色和权限的 Token。如果安全要求不高,也可以将值设为 nil。
- 传入能标识每个用户的用户 id,用户 id 必须为字符串类型不能设置为空,也不能包含有空格等特殊字符。
ARtmLoginErrorCode
用来标识用户登录的状态比如:登录成功、登录失败、被服务器拒绝登录等。
注意:
1、用户 id 的长度不能超过64个字符
2、用户 id 必须是字符串
3、用户 id 不能传 "" 或者 nil
rtmKit.login(byToken: "", user: <#T##String#>) { (errorCode) in
// errorCode 0 登录成功
}
点对点发送消息
在APP成功登录RTM服务后可使用sendMessageToUser
方法进行发送点对点消息
- 传入需要接收消息的用户ID
- 初始化消息内容对象
ARtmMessage
,完成后使用ARtmMessage
的setText()
方法设置消息内容。 ARtmSendPeerMessageErrorCode
枚举类型状态码用来表示消息发送的状态,如:对端已接收到点对点消息,点对点消息发送失败,发送超时等。ARtmDelegate
的messageReceived:fromPeer
代理回调用来监听接收到点对点消息内容回调
注意:
使用点对点消息回调时必须遵循 ARtmDelegate
//给指定用户发送消息
func sendMessageToUser(message: String, uid: String) {
// 创建一个消息类
let message = ARtmMessage(text: message)
let mOptions = ARtmSendMessageOptions()
rtmKit.send(message, toPeer: uid, sendMessageOptions: mOptions) { (errorCode) in
//errorCode 0 发送成功
}
}
//MARK: - ARtmDelegate
func rtmKit(_ kit: ARtmKit, messageReceived message: ARtmMessage, fromPeer peerId: String) {
//接收到点对点消息回调
}
频道消息
App 成功登录 RTM 服务器之后,可以开始使用 RTM 的频道消息功能
创建和加入频道
- 使用 RTM 服务的频道消息功能必须要创建
createChannel()
和加入join()
频道然后才可以使用ARtmChannel
管理里的send()
方法进行发送频道消息 - 设置
ARtmChannelDelegate
用来监听群聊中用户进入,用户退出,收到消息等服务
注意:
创建频道时的channelId必须为字符串类型,不能为空。
// 创建频道
func createChannel(channelId: String) {
// 创建频道
channel = rtmKit.createChannel(withId: channelId, delegate: self)
// 加入频道
channel.join { (errorCode) in
// errorCode 0 加入成功
}
}
// 发送频道消息
func sendMessageToChannel(message:String) {
// 创建一个消息类
let message = ARtmMessage(text: message)
let mOptions = ARtmSendMessageOptions()
channel.send(message, sendMessageOptions: mOptions) { (errorCode) in
// errorCode 0 发送成功
}
}
//MARK: - ARtmChannelDelegate
func channel(_ channel: ARtmChannel, memberLeft member: ARtmMember) {
//用户进入频道回调
}
func channel(_ channel: ARtmChannel, memberJoined member: ARtmMember) {
//用户离开频道回调
}
func channel(_ channel: ARtmChannel, messageReceived message: ARtmMessage, from member: ARtmMember) {
//接收到频道消息回调
}
登出
退出 RTM 服务器
- 如果是在频道中要先调用
leave()
成功后调用destroyChannel()
释放该频道所有资源,调用logout()
退出 RTM 服务器。 - 没有在频道中可以直接调用
logout()
退出RM服务器
如果想要再次进入RTM服务需要重新登录login()
rtmKit.logout { (errorCode) in
// errorCode 0 登出成功
}