呼叫邀请

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

概述

RTM 呼叫邀请包括以下场景:

  • 主叫发送邀请和取消邀请
  • 被叫接收邀请和拒绝邀请

RTM SDK呼叫邀请主要分为四个模块:发送、取消、接收、拒绝呼叫邀请。

RTM SDK是以发信令的形式来实现呼叫邀请的基本逻辑,收到邀请接通后的动作,以及逻辑RTM SDK不做处理,这里需要根据自己的业务逻辑来实现。

适用场景

  • app呼叫邀请的响铃功能
  • 拨打语音电话呼叫邀请功能
  • 需要同步状态的呼叫场景

实现流程

在一个完整的呼叫过程中,主叫和被叫的呼叫邀请状态分别由 LocalInvitationRemoteInvitation 来定义。

发送呼叫邀请

发送呼叫邀请的步骤:

  • 获取 RtmCallManager 实例
  • 设置 setEventListener 呼叫邀请监听器
  • 主叫调用createLocalInvitation 创建LocalInvitation,获取LocalInvitation对象,此时LocalInvitation对象生命周期开始
  • 主叫调用 sendLocalInvitation 发送呼叫邀请。被叫收到 onRemoteInvitationReceived 回调,获取RemoteInvitation对象,此时 RemoteInvitation 对象生命周期开始。主叫收到 onLocalInvitationReceivedByPeer 回调。

发送呼叫邀请的示例代码如下:

//获取RtmCallManager实例
mRtmCallManager=rtmClient.getRtmCallManager();
void sendLocalInvitation(String peerId) {
    //创建 LocalInvitation对象
    LocalInvitation mLocalInvitation=mRtmCallManager.createLocalInvitation(peerId);
    JSONObject param = new JSONObject();
    try {
        param.put("xxx",xxx);
    } catch (JSONException e) {
        e.printStackTrace();
    }
    //可以设置Json字符串。
    mLocalInvitation.setContent(param.toString());
    //发送呼叫邀请
    mRtmCallManager.sendLocalInvitation(mLocalInvitation);
}

/**
 * 返回给被叫:收到一个呼叫邀请。
 * @param remote 一个 RemoteInvitation 对象。
  */
@Override
public void onRemoteInvitationReceived(RemoteInvitation remote) {
    mRemoteInvitation=remote;
    //something
}

/**
 * 返回给主叫:被叫已收到呼叫邀请。
 * @param local 一个 LocalInvitation 对象。
 */
@Override
public void onLocalInvitationReceivedByPeer(LocalInvitation local) {
    //something
}

取消呼叫邀请

主叫调用 cancelLocalInvitation 取消呼叫邀请。被叫收到 onRemoteInvitationCanceled 回调,此时 RemoteInvitation 生命周期结束。主叫收到 onLocalInvitationCanceled 回调,此时LocalInvitation对象 生命周期结束。

取消呼叫邀请的示例代码如下:

//取消呼叫邀请
void cancelLocalInvitation() {
    if (mRtmCallManager != null && mLocalInvitation != null) {
        mRtmCallManager.cancelLocalInvitation(mLocalInvitation);
    }
}
/**
 *  返回给被叫:主叫已取消呼叫邀请。
 * @param remote 一个 RemoteInvitation 对象。
 */
@Override
public void onRemoteInvitationCanceled(RemoteInvitation remote) {
    //something     
}

/**
 * 返回给主叫:呼叫邀请已被取消。
 * @param local 一个 LocalInvitation 对象。
 */
@Override
public void onLocalInvitationCanceled(LocalInvitation local) {
    //something
}

接受呼叫邀请

被叫从 onRemoteInvitationReceived 回调获取 RemoteInvitation 对象并调用 acceptRemoteInvitation 接受呼叫邀请。被叫收到 onRemoteInvitationAccepted 回调,此时 RemoteInvitation 对象生命周期结束。主叫收到 onLocalInvitationAccepted 回调,此时 LocalInvitation 对象生命周期结束。

// 接受呼叫邀请
void acceptRemoteInvitation() {
    if (mRtmCallManager != null && mRemoteInvitation != null) {
        //mRemoteInvitation对象在onRemoteInvitationReceived回调获取
        mRtmCallManager.acceptRemoteInvitation(mRemoteInvitation);
    }
}

/**
 *  返回给被叫:接受呼叫邀请成功。
 * @param remote 一个 RemoteInvitation 对象。
 */
@Override
public void onRemoteInvitationAccepted(RemoteInvitation remote) {
    //something
}

/**
 * 返回给主叫:被叫已接受呼叫邀请。
 * @param local 一个 LocalInvitation 对象。
 * @param content LocalInvitation 的响应内容。
 */
@Override
public void onLocalInvitationAccepted(LocalInvitation local, String content) {
    //something
}

拒绝呼叫邀请

被叫从 onRemoteInvitationReceived 回调获取 RemoteInvitation对象 并调用 refuseRemoteInvitation 拒绝呼叫邀请。被叫收到 onRemoteInvitationRefused 回调,此时 RemoteInvitation 对象生命周期结束。主叫收到 onLocalInvitationRefused 回调,此时 LocalInvitation 对象生命周期结束。

// 拒绝呼叫邀请
void refuseRemoteInvitation() {
    if (mRtmCallManager != null) {
        //mRemoteInvitation对象在onRemoteInvitationReceived回调获取
        mRtmCallManager.refuseRemoteInvitation(mRemoteInvitation);
    }
}
/**
 * 返回给被叫:拒绝呼叫邀请成功。
 * @param remote 一个 RemoteInvitation 对象。
 */
@Override
public void onRemoteInvitationRefused(RemoteInvitation remote) {
    //something
}

/**
 * 返回给主叫:被叫已拒绝呼叫邀请。
 * @param local 一个 LocalInvitation 对象。
 * @param content LocalInvitation 的响应内容。
 */
@Override
public void onLocalInvitationRefused(LocalInvitation local, String content) {
    //something
}

API参考

API 详见呼叫邀请 API 文档呼叫邀请管理

示例项目

我们在 GitHub 提供一个开源的示例项目 ,你可以前往下载体验并参考源代码。