呼叫邀请

最近更新时间:2022-09-20 05:17:40

概述

RTM SDK 除了提供实时消息送达以外事件,还提供了呼叫邀请功能。RTM SDK 提供了简单的流程控制接口,同时还会按时序激活 ARtmLocalInvitationARtmRemoteInvitation 的生命周期,开发者根据自身的业务逻辑可以自由的实现符合产品的场景。

RTM SDK 提供的呼叫邀请功能,仅仅是实现了呼叫邀请的基本控制逻辑(即发送、取消、接受和拒绝呼叫邀请),不会处理邀请接通之后的动作,也不会管理整个邀请的生命周期,需要开发者根据自己的业务逻辑自行维护。

邀请流程:

  • 主叫端发送或取消呼叫邀请

  • 被叫端接受或拒绝呼叫邀请

可用于多种业务场景:

  • 坐席呼叫
  • 主播连麦邀请
  • 在线教育
  • ...

基本流程

RTM SDK 提供了一个完整的呼叫要求过程,主叫和被叫的呼叫邀请状态和生命周期分别用 ARtmLocalInvitationARtmRemoteInvitation 来定义。

发送呼叫邀请

发送呼叫邀请的步骤:

  • 获取 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 提供一个开源的示例项目 ,你可以前往下载体验并参考源代码。