# 快速开始
# 集成客户端
# 添加 SDK
设置 libs 存放路径。使用 Android Studio 打开你想要运行的项目(本文以 sample 文件为例),选择 app/build.gradle 文件,在android结点下添加repositories,dependencies结点下引入aar。
添加代码如下:
repositories {
flatDir {
dirs 'libs'
}
}
implementation(name: 'Manis-xxx', ext: 'aar')
确保路径名称不包含中文字符。如果路径包含中文字符,则代码无法编译成功且会显示包含随机 ASCII 字符的错误信息。
- 添加 aar 文件包。将Manis-xxx.aar添加到libs文件夹下。
- 同步项目文件。点击 Sync Project With Gradle Files 按钮,直到同步完成。
# 配置 NDK
- 选择app/build.gradle 文件,android->defaultConfig结点下添加ndk配置如下
ndk {
abiFilters("arm64-v8a","armeabi-v7a", "x86", "x86_64")
}
# 添加权限
- 打开 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>
- 点击 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 方法执行结束后再创建实例。