# 快速开始

# 集成客户端

# 添加 SDK

  1. 设置 libs 存放路径。使用 Android Studio 打开你想要运行的项目(本文以 sample 文件为例),选择 app/build.gradle 文件,在android结点下添加repositories,dependencies结点下引入aar。

    添加代码如下:

   repositories {
        flatDir {
            dirs 'libs'
        }
    }
   implementation(name: 'Manis-xxx', ext: 'aar')

aar_set

确保路径名称不包含中文字符。如果路径包含中文字符,则代码无法编译成功且会显示包含随机 ASCII 字符的错误信息。

  1. 添加 aar 文件包。将Manis-xxx.aar添加到libs文件夹下。
  2. 同步项目文件。点击 Sync Project With Gradle Files 按钮,直到同步完成。

# 配置 NDK

  1. 选择app/build.gradle 文件,android->defaultConfig结点下添加ndk配置如下
   ndk {
      abiFilters("arm64-v8a","armeabi-v7a", "x86", "x86_64")
   }

# 添加权限

  1. 打开 app/src/main/AndroidManifest.xml 文件,添加必要的设备权限。例如:
   <manifest xmlns:android="http://schemas.android.com/apk/res/android">  
   <uses-permission android:name="android.permission.CAMERA"/>
   <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
   <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
   <uses-permission android:name="android.permission.RECORD_AUDIO"/>
   <uses-permission android:name="android.permission.INTERNET"/>
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
   <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
   <uses-permission android:name="android.permission.BLUETOOTH"/>
   <!-- The SDK requires Bluetooth permissions in case users are using Bluetooth devices.-->
   <uses-permission android:name="android.permission.BLUETOOTH" />
   <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
   ...
  </manifest>
  1. 点击 Sync Project With Gradle Files , 重新同步 Android 项目文件。

# 防止混淆代码

proguard-rules.pro 文件中,为 Manis SDK 添加 -keep 类的配置,这样可以防止混淆 Manis SDK 公共类名称:

-keep class com.manis.**{*;}
-keep class net.java.**{*;}
-keep class orj.jitsi.**{*;}
-keep class orj.webrtc.**{*;}

# 初始化

# 创建Manis实例

 static Manis create(Context context, String appId, IRtcEngineEventHandler handler)
  • 创建 Manis 实例。

    Manis 类的所有接口函数,如无特殊说明,都是异步调用,对接口的调用建议在同一个线程进行。

  • 注解 请确保在调用其他 API 前先调用该方法创建并初始化 Manis。 目前 Manis RTC Native SDK 只支持每个 app 创建一个 Manis 实例。

  • 参数

参数 描述
context 安卓活动 (Android Activity) 的上下文。
appId Manis 为 app 开发者签发的 App ID,详见获取 App ID。使用同一个 App ID 的 app 才能进入同一个频道进行通话或直播。一个 App ID 只能用于创建一个 Manis。如需更换 App ID,必须先调用 destroy 销毁当前 Manis,并在 destroy 成功返回后,再调用 create 重新创建 Manis。
handler IRtcEngineEventHandler 是一个提供了缺省实现的抽象类,SDK 通过该抽象类向 app 报告 SDK 运行时的各种事件
  • 返回

    方法调用成功,则返回一个Manis对象。

    方法调用失败,则返回错误码。

    ERR_INVALID_APP_ID(-101):不是有效的 App ID。请更换有效的 App ID 重新初始化。建议你检查 App ID 的格式是否有效。

# 加入频道

   void joinChannel(String token, String channelName, String optionalInfo, int optionalUid)
  • 加入频道。

    该方法让用户加入通话频道,在同一个频道内的用户可以互相通话,多个用户加入同一个频道,可以群聊。使用不同 App ID 的 App 是不能互通的。如果已在通话中,用户必须调用 leaveChannel退出当前通话,才能进入下一个频道。

    成功调用该方加入频道后,本地会触发 onJoinChannelSuccess回调;通信场景下的用户和直播场景下的主播加入频道后,远端会触发 onUserJoined 回调。

  • 警告

    频道内每个用户的 UID 必须是唯一的。如果将 uid 设为 0,系统将自动分配一个 UID。如果想要从不同的设备同时接入同一个频道,请确保每个设备上使用的 UID 是不同的。

    请确保用于生成 Token 的 App ID 和 create 方法创建 Manis 一致。

  • 参数

参数 描述
token 在 App 服务器端生成的用于鉴权的 Token:安全要求不高:你可以使用控制台生成的临时 Token。安全要求高:将值设为你的服务端生成的正式 Token
channelName 标识通话的频道名称
optionalInfo (非必选项)开发者需加入的任何附加信息。一般可设置为空字符串,或频道相关信息。该信息不会传递给频道内的其他用户。
optionalUid (非必选项)用户 ID,32 位无符号整数。

# 退出频道

void leaveChannel()
  • 离开频道。

    离开频道,即挂断或退出通话。

    调用 joinChannel后,必须调用 leaveChannel 结束通话,否则无法开始下一次通话。

    不管当前是否在通话中,都可以调用 leaveChannel ,没有副作用。

    该方法会把会话相关的所有资源释放掉。该方法是异步操作,调用返回时并没有真正退出频道。

    成功调用该方法离开频道后,本地会触发 onLeaveChannel 回调;通信场景下的用户离开频道后,远端会触发 onUserOffline回调。

  • 注解

    • 如果你调用了 leaveChannel 后立即调用destroy方法,SDK 将无法触发 onLeaveChannel回调。

# 销毁Manis实例

staic void destroy()
  • 销毁 Manis 实例。

    该方法释放 Manis SDK 使用的所有资源。有些 app 只在用户需要时才进行实时音视频通信,不需要时则将资源释放出来用于其他操作,该方法适用于此类情况。调用 destroy 方法后,你将无法再使用 SDK 的其它方法和回调。如需再次使用实时音视频通信功能,你必须重新调用 create 方法创建一个新的 Manis 实例。

  • 注解 该方法为同步调用,需要等待 Manis 实例资源释放后才能执行其他操作,所以我们建议在子线程中调用该方法,避免主线程阻塞。此外,我们不建议在 SDK 的回调中调用 destroy,否则由于 SDK 要等待回调返回才能回收相关的对象资源,会造成死锁。 如需在销毁后再次创建 Manis 实例,需要等待 destroy 方法执行结束后再创建实例。