Android騰訊云IM實(shí)踐,踩坑填坑

之前的項(xiàng)目要來(lái)了新需求,需要集成騰訊云IM(別問(wèn)我為什么選擇騰訊云,坑多文檔爛這我都知道),關(guān)鍵人家根據(jù)DAU,可以提供免費(fèi)服務(wù)。上面的意思還有人家是做IM起家的,所以就選擇了騰訊云。那么我們就擼起袖子來(lái)干吧!

首先,下載騰訊云的demo,導(dǎo)入后可以看到除了主包外還有4個(gè)module
image.png

先分別介紹下, presentation是業(yè)務(wù)邏輯處理層,tlslibrary是騰訊的TLS集成層(集成騰訊云IM可選擇分為獨(dú)立模式/托管模式,TLS是托管模式所依附的模塊),SDK為IM的SDK層,UI更簡(jiǎn)單了,顧名思義,就是UI的繪制與渲染全部都在這一層(只提供了一個(gè)模板),正因?yàn)閐emo中是使用MVP+模塊化,已經(jīng)把業(yè)務(wù)分解出來(lái)了,所以我們?cè)谔子胐emo中的代碼就簡(jiǎn)單了。

下面來(lái)說(shuō)一下怎么集成,在我們自己的項(xiàng)目中選擇Import Module:


image.png

選擇demo中的ui層即可,因?yàn)槠渌哪K都是互相依賴引用,所以只導(dǎo)入U(xiǎn)I,系統(tǒng)會(huì)自動(dòng)幫我們把其他的模塊也導(dǎo)入。


image.png

在導(dǎo)入之后,需要一些版本不兼容的問(wèn)題, 修改項(xiàng)目中的sdk版本并一致
image.png

如果你的項(xiàng)目是SDK21或以下,騰訊云的demo中已經(jīng)對(duì)6.0的運(yùn)行時(shí)權(quán)限做了處理。這里你需要手動(dòng)處理一下,給6.0的permission代碼干掉。比如這樣:


image.png

如果你的項(xiàng)目中還引入的別的SDK,也調(diào)用了JNI .so文件,那么請(qǐng)?zhí)砑酉聢D所示的代碼來(lái)解決.so文件沖突


image.png

image.png

接下來(lái),請(qǐng)?jiān)谀愕腶pp.gradle文件下添加

multiDexEnabled true
compile 'com.android.support:multidex:1.0.1'
javaMaxHeapSize "4g"

application中重寫attachBaseContext(Context base)并添加

MultiDex.install(base);

這里不多說(shuō),解決65535。

如果你做到了這一步,正好,application中你還需要初始化騰訊云IMSDK,來(lái)繼續(xù)操作吧~


image.png

好,我們?cè)诶^續(xù)進(jìn)入InitBusiness這個(gè)類中看一下是如何封裝的。


image.png

這里把項(xiàng)目申請(qǐng)的APPID和ACCOUNT_TYPE,替換成我們自己的。

注意標(biāo)紅的地方,如果你在看騰訊云demo的時(shí)候,一定是沒(méi)有這一句的,我們是使用的獨(dú)立模式,所以這里要手動(dòng)添加上這行代碼,并使用騰訊分發(fā)給我們account_type。否則會(huì)出現(xiàn)初始化失敗的提示,錯(cuò)誤碼是70XX,或者100XX?靠,我忘記了。好吧,這不重要。

在接下來(lái),就需要配置我們的androidmanifest.xml,參考demo,copy過(guò)來(lái)就可以,沒(méi)有配置的參數(shù),不需要修改。


.png

image.png

現(xiàn)在想實(shí)現(xiàn)可視化頁(yè)面,就需要把demo中的activity,model,util,res,drawble等復(fù)制過(guò)來(lái)了,有什么錯(cuò)誤,缺什么資源就去對(duì)應(yīng)找什么資源。
如果你是第一次用的話,根據(jù)不同的需求,估計(jì)會(huì)用上你2-3個(gè)小時(shí)的時(shí)間。

當(dāng)你的項(xiàng)目不再報(bào)錯(cuò),不在有紅線的時(shí)候,
你可以先進(jìn)入聊天頁(yè)面看一下,ChatActivity,這里已經(jīng)封裝好了靜態(tài)方法。


image.png

我們這里只需要實(shí)現(xiàn)群聊功能,說(shuō)一下,好友關(guān)系鏈,群關(guān)系鏈,群管理鏈這些都是由騰訊控制,不需要你來(lái)操心了,而且這些關(guān)系鏈的初始化操作最好放在登錄之前。


image.png

現(xiàn)在再試試,看看我們的基本功能,
文本,沒(méi)問(wèn)題,語(yǔ)言,沒(méi)問(wèn)題。等等,上滑取消語(yǔ)言發(fā)送的功能沒(méi)有,我們?nèi)emo里看一下,果然demo里也沒(méi)有,這里需要自己實(shí)現(xiàn),或者砍到這個(gè)功能,隨你。繼續(xù)看,發(fā)送圖片沒(méi)問(wèn)題,表情也沒(méi)問(wèn)題,發(fā)送文件。好吧,又來(lái)了,這是什么鬼,只顯示了文件的名字。體驗(yàn)太差了吧,好吧,那么我們自己來(lái)修改一下,

找到model下的FileMessage類, 顧名思義,文件消息類,看來(lái)是這里控制的。
好的,看到這一行代碼了,

tv.setText(e.getFileName();

原來(lái)如此,我們看看通過(guò)還可以get到什么,是不是有個(gè)e.getFileSize()的方法。這樣我們還可以得到這個(gè)文件的大小。
那么我們來(lái)修改吧,通過(guò)動(dòng)態(tài)添加控制來(lái)實(shí)現(xiàn)我們想要的效果。


image.png
image.png

image.png

最后看看完成的效果圖:


image.png

好像丑了一點(diǎn),不過(guò)還可以,只要再找UI切點(diǎn)酷炫的切圖,在重新設(shè)計(jì)下字體的尺寸顏色,就可以了。
至于用戶頭像的顯示,這個(gè)是本地的資源目錄,如果你想你服務(wù)器上存儲(chǔ)的用戶頭像也可以,騰訊云應(yīng)該提供了獲取頭像的辦法,還是蠻周到的。
至于聊天文本的氣泡效果更換,這是.9圖,如果你自己不會(huì)做.9圖,那就讓UI切給你就好了。

以上呢,就是接入騰訊云IM的實(shí)踐工作,做的比較簡(jiǎn)單比較lower。請(qǐng)各位大佬不要嫌棄,對(duì)于初次嘗試接入IM的小伙伴有所幫忙就好了。

先寫到這里,想起來(lái)的話再補(bǔ)充,就醬,拜~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,983評(píng)論 25 709
  • 恒等運(yùn)算符 因?yàn)轭愂且妙愋?有可能有多個(gè)常量和變量在幕后同時(shí)引用同一個(gè)類實(shí)例。(對(duì)于結(jié)構(gòu)體和枚舉來(lái)說(shuō),這并不 成...
    FengxinLi閱讀 291評(píng)論 0 0
  • 熾熱天中日, 相襯澄云天。 疊影雖輝耀, 卻臨清風(fēng)寒。
    小袁Jill閱讀 504評(píng)論 0 6
  • 今天聽(tīng)著新伙伴們分享自己的一些故事,真的被大家深深的震撼到,大家都有很多很棒的精彩的故事。 有的從未出過(guò)遠(yuǎn)門一個(gè)人...
    夢(mèng)游世界閱讀 270評(píng)論 0 1

友情鏈接更多精彩內(nèi)容