騰訊雲IM官網文檔上提供了帶UI模塊和不帶UI模塊的,本文是基於帶UI模塊進行了Module封裝,可以方便各位快速接入,至於后面的頁面改造,相信對於各位也是輕車熟路了,這里就不再贅述
接入步驟
1.申請賬號
第一步,是申請賬號,好像有個體驗版可以使用,不過只能創建100個賬戶,可以用這個先來對接
2.下載module文件
這里的module文件,是我個人基於官方文檔上稍微改動些東西,沒有做功能的刪改,可以快速接入到現有的項目中
module注意點:
- androidx版本
- 內置使用Glide4.x
- 使用的SDK為
imsdk-plus
,版本號為6.0.1975
舊項目如果使用了support
版本和Glide3.x
版本,記得做兼容處理:將舊項目的遷移到androidx版本和升級GLide版本並作代碼調整處理
module下載地址:>>>點擊打賞獲取
3.配置Gradle,引入依賴
我以一個常規的Android項目來說明
1.將壓縮包的文件解壓出來,放入的同級目錄,如下圖所示
2.在根目錄的settings.gradle
文件中添加下面代碼
//以下是騰訊雲IM的Module接入
include ':tim'
// 引入內部組件通信模塊 (必要模塊)
include ':tuicore'
project(':tuicore').projectDir = new File(settingsDir, '/TUIKit/TUICore/tuicore')
// 引入聊天功能模塊 (基礎功能模塊)
include ':tuichat'
project(':tuichat').projectDir = new File(settingsDir, '/TUIKit/TUIChat/tuichat')
// 引入關系鏈功能模塊 (基礎功能模塊)
include ':tuicontact'
project(':tuicontact').projectDir = new File(settingsDir, '/TUIKit/TUIContact/tuicontact')
// 引入會話功能模塊 (基礎功能模塊)
include ':tuiconversation'
project(':tuiconversation').projectDir = new File(settingsDir, '/TUIKit/TUIConversation/tuiconversation')
// 引入群組功能模塊
include ':tuigroup'
project(':tuigroup').projectDir = new File(settingsDir, '/TUIKit/TUIGroup/tuigroup')
3.在根目錄的build.gradle
文件中添加下面的代碼
ext {
compileSdkVersion = 28
minSdkVersion = 19
targetSdkVersion = 28
versionCode = 1
versionName = "6.0.1992"
abiFilters = ['armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'] //['armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64']
arguments = "-DANDROID_STL=c++_static"
cppFlags = "-std=c++11"
}
同時,在加上騰訊雲的倉庫源
maven { url "https://mirrors.tencent.com/nexus/repository/maven-public/" }
5.app的module中添加依賴
implementation project(path: ':tim')
同時,還需要加上下面的代碼(否則編譯會出錯)
manifestPlaceholders = [
// TPNS 推送服務 accessId、accessKey
XG_ACCESS_ID : "",
XG_ACCESS_KEY: ""
]
注意:這里
compileSdkVersion
不要使用31版本的,要使用30版本的,31版本默認使用的jdk11,會導致編譯錯誤
添加完上述代碼,重新構造一下項目(sync project)
4.配置騰訊雲IM的key
這里需要注意的是,騰訊雲IM的登錄需要userId
和userSig
,而userSig
是通過SDKAPPID
和SECRETKEY
加密計算userId
得出的
而這種,官方推薦是后台去計算,然后提供接口返回數據給到我們APP來使用,否則容易泄露密鑰被他人盜刷
不過為了測試,我們可以先暫時放在本地來做加密計算流程
直接找到GenerateTestUserSig.java
這個文件,修改里面的SDKAPPID
和SECRETKEY
即可
5.測試使用
使用的話,需要在AndroidManifest配置application
可能這里有同學疑問了,那之前舊項目有個application了,應該怎么解決呢?這里作擴展,就單獨放在下面再講了
android:name="com.tencent.qcloud.tim.demo.DemoApplication"
tools:replace="allowBackup"
xmlns:tools="http://schemas.android.com/tools"
之后,在你想要的點擊事件地方加上頁面跳轉即可(如下代碼)
Intent intent = new Intent(this, SplashActivity.class);
startActivity(intent);
效果就出來(樣式似乎有所沖突,不過項目都接入進來了,后面都好調整)
補充:多個application解決方案
多個application的情況,需要判斷application類位於哪個module中,有下面兩種情況:
- 位於主Module中(即app里)
- 位於其他Module(包含第三方庫那種)
如果是第一種情況,比較好解決,因為app中的application代碼我們可修改,所以,讓其繼承於DemoApplication即可,然后AndroidManifest文件中使用DemoApplication
簡單起見,MyApplication里面並沒有編寫如何代碼
如果是第二種情況,又可以分為兩種情況:
- 主模塊app依賴了模塊C,
AndroidManifest
中聲明的ApplicationC
,此時,需要使用Tim模塊里的DemoApplication
- 主模塊app依賴了模塊C,主模塊同時繼承
ApplicationC
寫了個ApplicationB
,AndroidManifest
中聲明的是ApplicationB
,此時,需要使用Tim模塊里的DemoApplication
上面的兩種情況,
第1個情況解決方案:
Tim模塊去依賴模塊C,並且讓我們的DemoApplication
繼承於ApplicationC
,AndroidManifest
中使用DemoApplication
第2個情況解決方案:
Tim模塊去依賴模塊C,並且讓我們的DemoApplication
繼承於ApplicationC
之后,還要修改主模塊里的ApplicationB
,讓其繼承於DemoApplication
,AndroidManifest
中使用ApplicationB
這里還有一種方法,就是利用ContentProvider
或者是官方出的App Startup
的庫來進行初始化,詳情可以參考Jetpack架構組件學習(4)——App Startup庫的使用 - Stars-One的雜貨小窩