Android 接入騰訊IM即時通訊(詳細圖文)

one發表於2022-04-02

原文地址:Android 接入騰訊IM即時通訊(詳細圖文) | Stars-One的雜貨小窩

騰訊雲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的登入需要userIduserSig,而userSig是通過SDKAPPIDSECRETKEY加密計算userId得出的

而這種,官方推薦是後臺去計算,然後提供介面返回資料給到我們APP來使用,否則容易洩露金鑰被他人盜刷

不過為了測試,我們可以先暫時放在本地來做加密計算流程

直接找到GenerateTestUserSig.java這個檔案,修改裡面的SDKAPPIDSECRETKEY即可

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中,有下面兩種情況:

  1. 位於主Module中(即app裡)
  2. 位於其他Module(包含第三方庫那種)

如果是第一種情況,比較好解決,因為app中的application程式碼我們可修改,所以,讓其繼承於DemoApplication即可,然後AndroidManifest檔案中使用DemoApplication

簡單起見,MyApplication裡面並沒有編寫如何程式碼

如果是第二種情況,又可以分為兩種情況:

  1. 主模組app依賴了模組C,AndroidManifest中宣告的ApplicationC,此時,需要使用Tim模組裡的DemoApplication
  2. 主模組app依賴了模組C,主模組同時繼承ApplicationC寫了個ApplicationBAndroidManifest中宣告的是ApplicationB,此時,需要使用Tim模組裡的DemoApplication

上面的兩種情況,

第1個情況解決方案:

Tim模組去依賴模組C,並且讓我們的DemoApplication繼承於ApplicationCAndroidManifest中使用DemoApplication

第2個情況解決方案:
Tim模組去依賴模組C,並且讓我們的DemoApplication繼承於ApplicationC

之後,還要修改主模組裡的ApplicationB,讓其繼承於DemoApplicationAndroidManifest中使用ApplicationB

相關文章