快速开始
前提条件
- Android X架构(不支持旧Android Support架构,Google官方已不再维护)。
- Android targetSdk最高为33。
- Android Sdk版本最低为21。
- Android Studio版本最低为3.0。
- SDK采用今日头条UI适配方案,会更改UI表现效果。如无需适配,可在Activity中实现CancelAdapt接口,即可跳过当前页适配,建议统一在baseActivity中进行相应配置。
- 如果网络环境有部署防火墙,请根据应用企业防火墙限制打开对应端口,避免无法正常访问全时云会议相关服务。
运行Demo
- 下载云会议Android端SDK压缩包,下载完成后解压缩即可。
- 将示例项目导入Android Studio中,编译和运行项目。
- 配置入会时所需信息,至此就可以体验示例demo了。
集成SDK
创建工程
导入文件
下载解压云会议SDK的压缩包以后,将/libs目录下的所有aar拷贝到您的项目中。
SDK中的aar说明(编译时动态选择库范围,表格中的版本号请忽略,以实际下载的SDK包中的aar文件为准):
文件名 | 说明 | 必选 |
---|---|---|
base-1.0.8.aar common-1.1.35.aar danmaku-1.0.0.aar dsbridge-1.0.7.aar emoiji-1.0.2.aar skin-1.0.2.aar fs-1.0.3.aar pictureselector-v2.7.3-rc09.aar |
基础库 | 是 |
tangmeeting-phone-sdk.aar | 云会议SDK | 是 |
sdk_meeting_proxy_impl_xxx.aar | 各模块连接组件 | 是 |
sdk_messenger_xxx.aar | 消息通道模块 | 是 |
sdk_interaction_xxx.aar | 互动功能模块 | 是 |
sdk_feedback_xxx.aar | 云会议会中问题反馈模块 | 否 |
sdk_kefu_xxx.aar | 云会议会中客服模块 | 否 |
sdk_meeting_login_xxx.aar | 用户登录服务 | 否 |
添加资源
将Quanshi-Android-MeetingSdk/samples/app/src/main/assets文件夹下的domain.json文件拷贝至自己的项目assets父文件夹下。
添加依赖
添加以下依赖,这些依赖是云会议SDK相关的aar必须要依赖的库
// 全时基础库
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'provideLibs')
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
// region Android相关基础库
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9"
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.core:core-ktx:1.3.2'
implementation 'androidx.activity:activity-ktx:1.1.0'
implementation 'androidx.fragment:fragment-ktx:1.2.5'
implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
// endregion
// region tangmeeting.aar依赖
implementation 'com.j256.ormlite:ormlite-android:5.0'
implementation "com.github.bumptech.glide:glide:4.11.0"
implementation 'jp.wasabeef:glide-transformations:4.2.0'
implementation 'com.zhy:base-rvadapter:3.0.3'
// endregion
// region common.aar依赖
implementation 'androidx.annotation:annotation:1.1.0'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.2.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'
implementation "com.squareup.retrofit2:retrofit:2.6.2"
implementation "com.squareup.retrofit2:converter-gson:2.6.2"
implementation "com.squareup.retrofit2:adapter-rxjava2:2.6.2"
implementation "com.squareup.okhttp3:logging-interceptor:3.10.0"
implementation 'androidx.room:room-runtime:2.2.5'
implementation "me.jessyan:autosize:1.1.2"
implementation "com.lxj:easyadapter:1.2.0"
implementation "com.sonnyjack.widget:DragView:0.1.0"
implementation "com.github.promeg:tinypinyin:2.0.3"
implementation "com.gyf.immersionbar:immersionbar:3.0.0"
implementation "com.gyf.immersionbar:immersionbar-ktx:3.0.0"
// endregion
// region skin.aar依赖
implementation 'skin.support:skin-support:4.0.5'
implementation 'skin.support:skin-support-appcompat:4.0.5'
implementation 'skin.support:skin-support-design:4.0.5'
implementation 'skin.support:skin-support-cardview:4.0.5'
implementation 'skin.support:skin-support-constraint-layout:4.0.5'
// endregion
// region 互动模块依赖
implementation "com.airbnb.android:lottie:3.4.0"
implementation 'com.google.zxing:core:3.3.0'
// endregion
// region 反馈模块依赖
implementation "com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.33"
implementation "com.blankj:utilcode:1.30.6"
implementation "me.drakeet.multitype:multitype:3.4.4"
implementation "com.elvishew:xlog:1.9.0"
implementation "com.jeremyliao:live-event-bus:1.5.7"
// endregion
// region 直播消息模块依赖
implementation 'com.netease.nimlib:basesdk:8.3.1'
implementation 'com.netease.nimlib:chatroom:8.3.1'
// endregion
implementation "com.tencent:mmkv-static:1.1.1"
添加声明
在AndroidManifest.xml文件中添加以下权限声明
<uses-sdk
android:targetSdkVersion="33"
tools:replace="android:targetSdkVersion"
tools:ignore="GradleOverrides" />
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<uses-feature
android:name="android.hardware.telephony"
android:required="false" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REORDER_TASKS" />
<!-- 8.0+系统需要-->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<permission
android:name="${applicationId}.permission.RECEIVE_MSG"
android:protectionLevel="signature"/>
<uses-permission android:name="${applicationId}.permission.RECEIVE_MSG"/>
添加混淆
在 app/proguard-rules.pro 文件中添加如下行,防止代码混淆:(按模块分拆)
-keep class com.tang.**{*;}
-keep class com.gnet.**{*;}
-keep class com.quanshi.** {*;}
-keep class org.webrtc.tang.**{*;}
-dontwarn com.netease.**
-keep class com.netease.** {*;}
实现功能
初始化
在工程的Application中进行初始化操作,注意初始化操作必须在主线程进行。
// 初始化云会议(必选)
// java写法:
Domain.init(this,"domain.json") // 注意,该方法需要assets文件夹下的domain.json文件,请将此文件放置于自己的对应文件夹下
BaseContextHolder.initContext(this)
Domain.init(this)
FileManager.init(this)
BaselibManager.init(this)
TangSdkApp.initSdk(this, "", false)
registerActivityLifecycleCallbacks(AppStateCallback()) // 初始化直播消息模块(可选)
TangSdkApp.setCustomMessenger(MessengerProxy(this)) // 初始化互动模块(可选)
TangSdkApp.initInteraction(InteractionProxy()) // 初始化反馈模块(可选)
TangSdkApp.getModules().initFeedback(FeedbackProxy()) // 初始化客服模块(可选)
TangSdkApp.getModules().initCustomerService(KefuProxy()) // 初始化会前登录模块(可选)
LoginSdk.initSdk(this)
自定义
data class CustomConfig(
/* 控制会议报告提示的显示,true(默认):显示;false:隐藏 */
var showMeetingReportTips: Boolean = true,
/* 控制入会自动连接VOIP语音提示的显示,true(默认):显示;false:隐藏 */
var showVoipAutoSwitchTips: Boolean = true,
/* 控制主持人退会时转移主持人提示的显示:true:显示;false(默认):隐藏 */
var showLeaveMeetingTransferHostTips: Boolean = false
)
调用示例:
TangInterface.setCustomConfig(
CustomConfig(
showMeetingReportTips = false,
showVoipAutoSwitchTips = false,
showLeaveMeetingTransferHostTips = false
)
)
入会
将获取到的会议密码pcode,调用入会接口启动入会流程。
TangInterface.joinConference(context: Context, req: MeetingReq, callback: TangCallback<String>)
运行
将程序运行在Android真机设备,部分模拟器可能存在功能或性能上的缺陷,建议使用真机体验。在会中页面中,点击退会按钮,将会退出会中页面,回到app之前页面。