# 快速集成
Juphoonn 视频客服除了提供 Android SDK 与 iOS SDK 之外,也提供主流的开发平台及工具集成插件、示例。
可灵活适配 Android 、iOS、Windows 终端。只需调用几个接口,几行代码即可拥有视频通话能力。另外还支持对接行内通知管理平台等,业务集成更加灵活。
本文为您介绍了 Android 端集成 Plugin 的操作步骤,帮助您快速集成 Plugin 并实现音视频通话(访客侧)的基本功能。
# 概览
如果你是第一次使用菊风视频能力平台的服务,我们推荐观看下面的视频,了解关于菊风服务的基本信息以及如何快速集成示例项目。
# 1. 开发环境要求
Android SDK API 等级 21 或以上
Android Studio 3.5及以上版本
支持 Android 5.0 或以上版本的移动设备(非AndroidX)
TIP
注:我们提供的 aar 库都是依赖 Android Support 库的,如果您的工程需要用AndroidX集成,可以通过 Google 官网提供的独立工具 Jetifier (opens new window) 将依赖于Android Support 的库迁移为依赖于等效的 AndroidX 软件包。
# 2. 下载Juphoon_Rtc_Plugin库
通过下面链接下载最新的集成插件包,并解压其中Juphoon_Rtc_Plugin_for_Android_vXXX_CallCenter文件,解压后Plugin文件如下图所示
# 3. 项目配置
# 步骤一:导入库
在工程目录新建存放aar的目录,将JCCGuestPlugin.aar、JRTCDoodlePlugin.aar、JRTCSSL.aar、JRTCKit.aar和JRTCSDK.aar文件拷入
repositories {
flatDir {
dirs '../libs'
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation(name:'JRTCSDK', ext: 'aar')
implementation(name: 'JRTCKit', ext: 'aar')
implementation(name:'JRTCDoodlePlugin', ext: 'aar')
implementation(name: 'JRTCSSL', ext: 'aar')
implementation(name:'JCCGuestPlugin', ext: 'aar')
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'android.arch.lifecycle:livedata:1.1.1'
implementation 'android.arch.lifecycle:viewmodel:1.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
implementation 'com.android.support:recyclerview-v7:28.0.0'
}repositories {
flatDir {
dirs '../libs'
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation(name:'JRTCSDK', ext: 'aar')
implementation(name: 'JRTCKit', ext: 'aar')
implementation(name:'JRTCDoodlePlugin', ext: 'aar')
implementation(name: 'JRTCSSL', ext: 'aar')
implementation(name:'JCCGuestPlugin', ext: 'aar')
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'android.arch.lifecycle:livedata:1.1.1'
implementation 'android.arch.lifecycle:viewmodel:1.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
implementation 'com.android.support:recyclerview-v7:28.0.0'
}
# 步骤二:权限配置
根据项目需要,打开 AndroidManifest.xml 文件,配置如下权限
<!-- 摄像头权限 -->
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature
android:name="android.hardware.bluetooth"
android:required="false" />
<!-- 网络权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- WiFi 状态 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 允许程序访问电话状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 允许程序在手机屏幕关闭后后台进程仍然运行 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- 摄像头权限 -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- 允许程序录制声音通过手机或耳机的麦克 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- 允许程序修改声音设置信息 -->
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<!-- 写SD权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 允许程序振动 -->
<uses-permission android:name="android.permission.VIBRATE" />
<!-- 允许程序连接配对过的蓝牙设备 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<!-- 6.0之后判断是否有悬浮窗权限,没有则申请权限 -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<!-- 6.0之后判断是否有悬浮窗权限,没有则申请权限 -->
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" /><!-- 摄像头权限 -->
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature
android:name="android.hardware.bluetooth"
android:required="false" />
<!-- 网络权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- WiFi 状态 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 允许程序访问电话状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 允许程序在手机屏幕关闭后后台进程仍然运行 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- 摄像头权限 -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- 允许程序录制声音通过手机或耳机的麦克 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- 允许程序修改声音设置信息 -->
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<!-- 写SD权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 允许程序振动 -->
<uses-permission android:name="android.permission.VIBRATE" />
<!-- 允许程序连接配对过的蓝牙设备 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<!-- 6.0之后判断是否有悬浮窗权限,没有则申请权限 -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<!-- 6.0之后判断是否有悬浮窗权限,没有则申请权限 -->
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
# 步骤三:混淆规则
将JRTCSDK类加入不混淆名单
-keep class com.juphoon.rtc.MtcEngine {
private static int notified(java.lang.String , int , java.lang.String );
}
-keep class com.juphoon.rtc.MtcEngineRoom {
static void onAudioOutput(java.lang.String , byte[] ,
int , int , int );
}
-keep interface com.justalk.cloud.zmf.ZmfVideo$*Callback { *; }
-keep interface com.justalk.cloud.zmf.Zmf$*Callback { *; }
-keep interface com.justalk.cloud.lemon.MtcImageFilter { *; }
-keep class com.justalk.cloud.zmf.Zmf { *; }
-keep class com.justalk.cloud.zmf.CamDrv { *; }
-keep class com.justalk.cloud.zmf.UVCCamera { *; }
-keep class com.justalk.cloud.zmf.I420Image { *; }
-keep class com.justalk.cloud.lemon.MtcPathCb { *; }
-keep class com.justalk.cloud.avatar.** { *; }-keep class com.juphoon.rtc.MtcEngine {
private static int notified(java.lang.String , int , java.lang.String );
}
-keep class com.juphoon.rtc.MtcEngineRoom {
static void onAudioOutput(java.lang.String , byte[] ,
int , int , int );
}
-keep interface com.justalk.cloud.zmf.ZmfVideo$*Callback { *; }
-keep interface com.justalk.cloud.zmf.Zmf$*Callback { *; }
-keep interface com.justalk.cloud.lemon.MtcImageFilter { *; }
-keep class com.justalk.cloud.zmf.Zmf { *; }
-keep class com.justalk.cloud.zmf.CamDrv { *; }
-keep class com.justalk.cloud.zmf.UVCCamera { *; }
-keep class com.justalk.cloud.zmf.I420Image { *; }
-keep class com.justalk.cloud.lemon.MtcPathCb { *; }
-keep class com.justalk.cloud.avatar.** { *; }