本章节主要指导你完成 TUILiveKit UI 组件库接入的环境配置。
注意:集成方案说明:
注意:这篇档提供的是 UI 组件库接入方案,包含视频直播、语聊房的完整 UI 界面与全套业务逻辑。如果你有极高的 UI 定制需求,需要采用 无 UI(Core SDK) 集成方式,请直接参考 Core SDK 快速开始。
一、功能预览
TUILiveKit UI 组件为你提供的是功能闭环、交互丰富的直播全链路逻辑,集成后可快速实现一套交互完整、业务丰富的直播系统。
二、视频直播
| 主播准备页 | 主播开播页 | 直播列表 | 观众观看页 |
| | | | |
三、语聊房
| 主播准备页 | 主播开播页 | 直播列表 | 观众观看页 |
| | | | |
五、开通服务
在使用 TUILiveKit 前,请先参考 开通服务,领取 TUILiveKit 体验版或者开通付费版。
六、环境要求
·Android Studio Arctic Fox (2020.3.1) 及以上版本。
·Gradle 7.0 及以上的版本。
·Android 5.0 及以上的手机设备。
八、步骤 1:下载 TUILiveKit 组件
在 GitHub 中克隆/下载代码,然后将 live 目录和 atomic_x 目录拷贝到你当前 Android 项目的 app 文件夹同级目录中。
十、1. 配置 JitPack 仓库
在工程根目录下的 settings.gradle.kts 或 settings.gradle 文件中,添加 JitPack 仓库地址,项目中播放礼物 SVG 动画的第三方库托管在 JitPack 仓库中,需要从 JitPack 仓库中查找依赖项。
settings.gradle.ktssettings.gradledependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() // 添加 JitPack 仓库地址 maven { url = uri("https://jitpack.io") } }}dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() // 添加 JitPack 仓库地址 maven { url 'https://jitpack.io' } }}
十一、2. 导入 TUILiveKit 组件
在工程根目录下的 settings.gradle.kts 或 settings.gradle 文件中,增加以下代码以导入 tuilivekit 组件。
settings.gradle.ktssettings.gradleinclude(":tuilivekit")project(":tuilivekit").projectDir = File(settingsDir, "live/tuilivekit")include(":atomic_x")project(":atomic_x").projectDir = File(settingsDir, "atomic_x")include ':tuilivekit'project(':tuilivekit').projectDir = new File(settingsDir, "live/tuilivekit")include(":atomic")project(':atomic').projectDir = new File(settingsDir, "atomic_x")
十二、3. 添加组件依赖
在 app 目录下找到 build.gradle.kts(或 build.gradle)文件,并在文件中增加以下代码,该步骤的作用是声明当前 App 对新加入的 tuilivekit 组件的依赖。
build.gradle.ktsbuild.gradledependencies { // 添加 tuilivekit 依赖 api(project(":tuilivekit"))}dependencies { // 添加 tuilivekit 依赖 api project(':tuilivekit')}
注意:说明:
注意:TUILiveKit 内部已默认依赖 TRTC SDK、IM SDK 等公共库,你无需单独配置。
十三、4. 配置混淆规则
由于 SDK 内部使用了 Java 反射,请在 proguard-rules.pro 文件中添加以下代码,将相关类加入不混淆名单,以确保功能正常运行。
-keep class com.tencent.** { *; }-keep class com.tencent.beacon.** { *; }-keep class com.tencent.cloud.iai.lib.** { *; }-keep class com.tencent.qimei.** { *; }-keep class com.tencent.xmagic.** { *; }-keep class com.trtc.uikit.livekit.component.gift.store.model.** { *; }-keep class com.trtc.uikit.livekit.livestreamcore.** { *; }-keep class com.tcmediax.** { *; }# Google 序列化/反序列化框架 Gson 库相关混淆-keep class com.google.gson.** { *; }# 美颜特效相关混淆-keep class androidx.exifinterface.** { *; }-keep class com.gyailib.** { *; }-keep class org.extra.** { *; }-keep class org.libpag.** { *; }-keep class org.light.** { *; }# 播放礼物 SVG 动画相关混淆-keep class com.opensource.svgaplayer.proto.** { *; }-keep class com.squareup.wire.** { *; }
十四、5. 修改 AndroidManifest.xml
为了防止编译时 AndroidManifest 合并过程中产生属性冲突,你需要在 app/src/main/AndroidManifest.xml 文件的 <application> 节点中,添加 tools:replace="android:allowBackup" 和 android:allowBackup="false",用以覆盖组件内的设置。
<application … // 添加如下配置覆盖 依赖的 sdk 中的配置 android:allowBackup="false" tools:replace="android:allowBackup">
十五、6. 完成项目同步
在你完成上述步骤后,通常情况下 Android Studio 会自动为你弹出 Sync Now 按钮,你需要点击该同步按钮完成项目的同步,若 IDE 没有自动弹出同步按钮,请你手动点击工具栏中的同步按钮进行项目的同步,同步后 IDE 会完成项目的构建配置和索引等工作,你就可以在你的项目中正常使用 TUILiveKit 组件了。
十六、完成登录
代码集成完成后,你需要完成登录。这是使用 TUILiveKit 的关键步骤,因为只有在登录成功后才能正常使用 TUILiveKit 的各项功能,故请你耐心检查相关参数是否配置正确:
注意:说明:
注意:在示例代码中,直接进行了登录接口的调用。但在实际项目场景下,强烈推荐你在完成自己的用户身份验证等相关登录操作后,再调用 TUILiveKit 的登录服务。这样可以避免因过早调用登录服务,导致业务逻辑混乱或数据不一致的问题,同时也能更好地适配你项目中现有的用户管理和权限控制体系。
Kotlin// 1.导入依赖import io.trtc.tuikit.atomicxcore.api.CompletionHandlerimport io.trtc.tuikit.atomicxcore.api.login.LoginStoreprivate const val TAG = "LoginStore"// 2.调用登录接口,推荐你在自己登录业务完成后再调用 LoginStore 登录LoginStore.shared.login(applicationContext, 1400000001, // 请替换为开通服务控制台的 SDKAppID "denny", // 请替换为你的 UserID "xxxxxxxxxxx", // 你可以在控制台中计算一个 UserSig 并填在这个位置 object : CompletionHandler { override fun onSuccess() { Log.i(TAG, "LoginStore login success") } override fun onFailure(code: Int, desc: String) { Log.e(TAG, "LoginStore login failed, $code errorMessage:$desc") } })
登录接口参数说明
| 参数 | 类型 | 说明 |
| SDKAppID | Int | 从 TRTC 控制台 > 应用管理 获取。 |
| UserID | String | 当前用户的唯一 ID,仅包含英文字母、数字、连字符和下划线。 |
| userSig | String | 用于腾讯云鉴权的票据。请注意:开发环境:你可以采用本地 GenerateTestUserSig.genTestSig 函数生成 UserSig 或者通过 UserSig 辅助工具 生成临时的 UserSig。生产环境:为了防止密钥泄露,请务必采用服务端生成 UserSig 的方式。详细信息请参见 服务端生成 UserSig。更多信息请参见 如何计算及使用 UserSig。 |
十七、登录异常状态处理【可选】
LoginStore 提供了登录状态回调机制,方便你处理可能出现的登录异常情况,主要包括 “被踢下线” 和 “签名过期” 这两种异常状态的回调:
·被踢下线:用户在线情况下被踢,SDK 会通过 onKickedOffline 回调通知给你,此时可以在 UI 提示用户,并调用 LoginStore.shared.login 重新登录。
·签名过期:用户在线期间收到 onUserSigExpired 回调,说明你之前给该用户签发的 userSig 已经过期了,这个时候如果当前用户在你后台的登录态依然有效,你可以让你的 app 向你的后台请求新的 userSig,并调用 LoginStore.shared.login 续签登录态。
kotlinimport io.trtc.tuikit.atomicxcore.api.login.LoginListenerimport io.trtc.tuikit.atomicxcore.api.login.LoginStoreclass YourLoginService { // 实例化监听器 private val loginListener = object : LoginListener() { // 用户被踢下线回调 override fun onKickedOffline() { // 你的业务代码:UI 交互提示用户,然后重新登录 } // 用户签名过期回调 override fun onLoginExpired() { // 你的业务代码:如果当前用户在你后台的登录态依然有效,你可以让你的 app 向你的后台请求新的 userSig, // 并调用 LoginStore.shared.login 续签登录态。 } } // 监听登录状态回调 fun subscribeLoginStatus() { LoginStore.shared.addLoginListener(loginListener) } // 取消监听登录状态回调 fun unsubscribeLoginStatus() { LoginStore.shared.removeLoginListener(loginListener) }}
十八、下一步
恭喜你,现在你已经成功集成了直播组件并完成了登录。接下来,你可以根据你的业务场景实现主播开播、观众观看、直播列表等功能。
| 业务场景 | 描述 | 集成指引 |
| 视频直播 | 包含主播开播、观众观看、连麦互动、美颜设置、礼物弹幕等全套功能。 | 主播开播观众观看 |
| 语聊房 | 包含麦位管理、背景音乐、礼物互动、语聊控场等完整业务逻辑。 | 主播开播观众观看 |
| 直播列表 | 展示直播间/语聊房列表,支持封面、人数、房间标题等信息展示。 | 直播列表 |
20、每次进房都需要调用登录吗?
不需要。通常你只需要完成一次 TUILogin.login 调用即可,我们建议你将 TUILogin.login 和 TUILogin.logout 与自己的登录业务关联。
21、集成代码后产生如下所示编译报错 allowBackup 异常,如何处理?
·问题原因:多个模块的 AndroidManifest.xml 中都配置了 allowBackup 属性,造成冲突。
·解决方法:你可以在你工程的 AndroidManifest.xml 文件中删除 allowBackup 属性或将该属性改为 false,表示关闭备份和恢复功能;并在 AndroidManifest.xml 文件的 application 节点中添加 tools:replace="android:allowBackup" 表示覆盖其他模块的设置,使用你自己的设置。修复示例如下:
22、集成代码后还需要添加摄像头麦克风等权限的声明吗?
不需要,TUILiveKit 中已经内置了摄像头麦克风等权限的声明,在接入过程中你无需再关心这些权限的声明。