概述
RTM SDK 除了提供实时消息送达以外事件,还提供了呼叫邀请功能。RTM SDK 提供了简单的流程控制接口,同时还会按时序激活 ARtmLocalInvitation
和 ARtmRemoteInvitation
的生命周期,开发者根据自身的业务逻辑可以自由的实现符合产品的场景。
RTM SDK 提供的呼叫邀请功能,仅仅是实现了呼叫邀请的基本控制逻辑(即发送、取消、接受和拒绝呼叫邀请),不会处理邀请接通之后的动作,也不会管理整个邀请的生命周期,需要开发者根据自己的业务逻辑自行维护。
邀请流程:
-
主叫端发送或取消呼叫邀请
-
被叫端接受或拒绝呼叫邀请
可用于多种业务场景:
- 坐席呼叫
- 主播连麦邀请
- 在线教育
- ...
基本流程
RTM SDK 提供了一个完整的呼叫要求过程,主叫和被叫的呼叫邀请状态和生命周期分别用 ARtmLocalInvitation
和 ARtmRemoteInvitation
来定义。
发送呼叫邀请
发送呼叫邀请的步骤:
- 获取
ARtmCallKit
实例 - 设置
ARtmCallDelegate
呼叫邀请代理 - 主叫调用
initWithCalleeId
创建ARtmLocalInvitation
,获取ARtmLocalInvitation
对象,此时ARtmLocalInvitation
对象生命周期开始 - 主叫调用
sendLocalInvitation
发送呼叫邀请。被叫收到remoteInvitationReceived
回调,获取ARtmRemoteInvitation
对象,此时ARtmRemoteInvitation
对象生命周期开始。主叫收到localInvitationReceivedByPeer
回调。
发送呼叫邀请的示例代码如下:
rtmKit = ARtmKit.init(appId: <#T##String#>, delegate: self)
//实例化呼叫对象
callKit = rtmKit.getRtmCall()
callKit.callDelegate = self
// 发送呼叫邀请
func sendCall(peerId: String, content: String) {
let localInvitation = ARtmLocalInvitation(calleeId: peerId)
localInvitation.content = content
callKit.send(mLocalInvitation) { (errorCode) in
//errorCode 0 发送成功
}
}
//MARK: - ARtmCallDelegate
func rtmCallKit(_ callKit: ARtmCallKit, remoteInvitationReceived remoteInvitation: ARtmRemoteInvitation) {
//收到一个呼叫邀请
}
func rtmCallKit(_ callKit: ARtmCallKit, localInvitationReceivedByPeer localInvitation: ARtmLocalInvitation) {
//被叫已收到呼叫邀请
}
取消呼叫邀请
主叫调用 cancelLocalInvitation
取消呼叫邀请。被叫收到 remoteInvitationCanceled
回调,此时 ARtmLocalInvitation
生命周期结束。主叫收到 localInvitationCanceled
回调,此时ARtmLocalInvitation
对象 生命周期结束。
取消呼叫邀请的示例代码如下:
// 取消呼叫邀请
func cancelCall() {
callKit.cancel(localInvitation) { (errorCode) in
//errorCode 0 取消成功
}
}
//MARK: - ARtmCallDelegate
func rtmCallKit(_ callKit: ARtmCallKit, remoteInvitationCanceled remoteInvitation: ARtmRemoteInvitation) {
//主叫已取消呼叫邀请
}
func rtmCallKit(_ callKit: ARtmCallKit, localInvitationCanceled localInvitation: ARtmLocalInvitation) {
//呼叫邀请已被取消
}
接受呼叫邀请
被叫从 remoteInvitationReceived
回调获取 ARtmRemoteInvitation
对象并调用 acceptRemoteInvitation
接受呼叫邀请。被叫收到 remoteInvitationAccepted
回调,此时 ARtmRemoteInvitation
对象生命周期结束。主叫收到 localInvitationAccepted
回调,此时 ARtmLocalInvitation
对象生命周期结束。
// 接收呼叫邀请
func acceptRemoteInvitation() {
callKit.accept(remoteInvitation) { (errorCode) in
//errorCode 接受成功
}
}
//MARK: - ARtmCallDelegate
func rtmCallKit(_ callKit: ARtmCallKit, remoteInvitationAccepted remoteInvitation: ARtmRemoteInvitation) {
//接受呼叫邀请成功
}
func rtmCallKit(_ callKit: ARtmCallKit, localInvitationAccepted localInvitation: ARtmLocalInvitation, withResponse response: String?) {
//被叫已接受呼叫邀请
}
拒绝呼叫邀请
被叫从 remoteInvitationReceived
回调获取 ARtmRemoteInvitation
对象 并调用 refuseRemoteInvitation
拒绝呼叫邀请。被叫收到 remoteInvitationRefused
回调,此时 ARtmRemoteInvitation
对象生命周期结束。主叫收到 localInvitationRefused
回调,此时 ARtmLocalInvitation
对象生命周期结束。
// 拒绝呼叫邀请
func refuseRemoteInvitation() {
callKit.refuse(remoteInvitation) { (errorCode) in
// errorCode 0 拒绝成功
}
}
//MARK: - ARtmCallDelegate
func rtmCallKit(_ callKit: ARtmCallKit, remoteInvitationRefused remoteInvitation: ARtmRemoteInvitation) {
//拒绝呼叫邀请成功
}
func rtmCallKit(_ callKit: ARtmCallKit, localInvitationRefused localInvitation: ARtmLocalInvitation, withResponse response: String?) {
//被叫已拒绝呼叫邀请
}
API参考
API 详见呼叫邀请 API 文档呼叫邀请管理。
示例项目
我们在 GitHub 提供一个开源的示例项目 ,你可以前往下载体验并参考源代码。