之前的項(xiàng)目要來(lái)了新需求,需要集成騰訊云IM(別問(wèn)我為什么選擇騰訊云,坑多文檔爛這我都知道),關(guān)鍵人家根據(jù)DAU,可以提供免費(fèi)服務(wù)。上面的意思還有人家是做IM起家的,所以就選擇了騰訊云。那么我們就擼起袖子來(lái)干吧!
首先,下載騰訊云的demo,導(dǎo)入后可以看到除了主包外還有4個(gè)module
先分別介紹下, 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:

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


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

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


接下來(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ù)操作吧~

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

這里把項(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ù),不需要修改。


現(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)方法。

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

現(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)我們想要的效果。



最后看看完成的效果圖:

好像丑了一點(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ǔ)充,就醬,拜~