記使用騰訊TIM開發聊天通訊遇到的問題及解決方案

目錄

一、V1和V2在ITIMMessage上接口不同,V1支持多個Elem,V2不支持,對應的解決方案,使用java反射

二、向Message塞入多個Elem時,語音Elem順序會發生變化

三、IM在app存活時,切出去修改權限後,返回app,出現找不到Native方法問題

四、IM的IMMessage時間戳的單位是秒而不是毫秒,這個就有點奇怪了,需要手動處理一下

五、IM的提供消息列表,頭像更新不及時


一、V1和V2在ITIMMessage上接口不同,V1支持多個Elem,V2不支持,對應的解決方案,使用java反射

在V1版本,使用TIMMessage,到了V2版本,就使用的是V2TIMMessage,可是到了這個版本就不開放添加多個Elem的接口了

在V1添加多個Elem的接口:

在V2TIMMessage默認取的是第一個Elem

 

如果此時是從V1升到V2,或者是ios端使用V1,而安卓使用的是V2,ios往消息裏塞入其他的Elem,此安卓就沒有接口可以拿得到數據了。

但是V2版本其實就是在V1的基礎上又封裝了一層,提供了更加簡潔的接口,從代碼中就可以發現其實V2TIMMessage中就帶着一個TIMMessage,對於V2版本沒有提供提取多個Elem問題,就可以通過反射的方法直接拿到TIMMessge,這樣V1版本能做到的事情在V2版本同樣也可以做到了。

val timMessageField: Field =
            message::class.java.getDeclaredField("timMessage")
timMessageField.isAccessible = true
val timMessage: TIMMessage = timMessageField.get(v2TimMessage) as TIMMessage
val elem: TIMTextElem= timMessage.getElement(0) as TIMTextElem

二、向Message塞入多個Elem時,語音Elem順序會發生變化

在實際開發,發現了這個問題

發送出去前:

收到時:

其實這種問題不大,只要在拿數據時,特殊處理一下即可,我放這裏只是爲了記錄有這個現象存在

三、IM在app存活時,切出去修改權限後,返回app,出現找不到Native方法問題

出現這個現象的場景是,當app存活時,切出去去設置頁修改相關權限,此時,可能會造成app整個進程被殺死(比如關閉允許錄音權限),等app返回前臺時,會重新新開一個進程,但是僅僅會重新打開上次最後一個Activity,而不會按照正常的流程打開app,即經過閃屏頁(一般僅初始化一次代碼,都會放在閃屏頁),此時就沒有重新調到TiMManager的initSdk()的方法或者是相關方法,此時就還沒有將so加載進來。只有調到除TIMManager類之外的其他IM的類方法就會出現奔潰。其實不止是IM會導致崩潰,只是是需要在閃屏頁初始化的都有可能會造成奔潰。其實要解決這個問題也不難,只要在Application中加一個標誌,經過閃屏初始化後置爲true,如果在其他Activity的OnCreate方法中發現這個值爲false,就跳到閃屏重新走正常打開流程即可

四、IM的IMMessage時間戳的單位是秒而不是毫秒,這個就有點奇怪了,需要手動處理一下

五、IM的提供消息列表,頭像更新不及時

其實這個問題是因爲IM服務器爲了節省過多的消耗,在其他好友更新頭像後,並不會刷新到你的消息列表中,如果這個問題測試覺得嚴重,可以讓自己的服務器提供好友資料頭像的接口,自己手動替換最新到頭像。

以上是最近在開發一款陌生人好友軟件時,負責聊天模塊遇到相關問題和最後的解決方案,之後遇到其他的坑也會繼續補充

如果是正準備使用TIMSDK接入聊天通訊開發,我有幾點小建議:

1、如果是多端一起同步開發的,最好統一一下使用騰訊TIMsdk的版本,V1和V2的版本接口變化很多,V2版本相對V1版本少了一些接口,例如:上面說到的,V1版本一條TimMessage可以塞入多elem,即發一條文本消息時,你可以塞入額外的信息,可是到V2就不開放這個接口了。

2、在使用自定義消息時,最好定好數據結構,方便之後擴展,不然可能存在下個版本,產品拍一拍腦袋,一更新之前的版本就全都崩潰了,畢竟自定義消息類型只有一個。

3、TIM提供了TUIKIT含UI庫,並且提供可以替換部分的UI比如氣泡,文字大小之類,雖然使用這個庫可以快速集成,聊天基本操作都有,但是還是不建議使用,如果之後設計有特殊想法,此時就改不動了,還是隻能換成常規集成,還不如一開始麻煩點自己寫UI邏輯,方便之後改動。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章