记使用腾讯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逻辑,方便之后改动。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值