集成遇到的坑:
1.添加好友不能一次添加成功,如果失败不能马上自动添加
2.好友人数限制只能3000人,环信的没有限制
3.文档太粗糙了,很多重点没有说出来
4.技术支持貌似只有一个人,恢复很慢。
5.官方提供的Demo代码混乱,基本上没有注释,逻辑不清晰
6.代码易于耦合
解决方案:
1.好友的功能可以使用类似单聊或者和服务端深度配合共同完成添加成功。
有很多重点可以直接在上面提交工单向他咨询,电话一般只是给你往后面推
上面的代码很容易与自己的代码混淆,自己命名的时候需要注意了,特别提示,导航,工具条
如果你对他的代码里不清楚的话,可以先对上面加一下注释,这样方便你下次去用
用他的代码需要注意组件化的概念
遇到的坑:
目的就是为了登录后可以立即获得新消息,以防消息漏接,最重要的千万别忘了在登录进行sdk初始化
TIMManager.getInstance().init(context);缺少这一句,程序就会崩溃。
事件监听中需要注意的是消息监听器public void addMessageListener(TIMMessageListener listener);我看他的内部是放了一个消息监听器数组的,就是你add多少个都会进行回调,如果你有多种回调处理,但同一个时刻只要一种回调处理,那么在add之前,请将之前的监听器移除掉,方法public void removeMessageListener(TIMMessageListener listener);
3.public void getMessage(int count,TIMMessage lastMsg,TIMValueCallBack> callback)获取历史消息不全 原因:
1.一次获取的消息最多20条,即使参数count你传大于20的值,他返回的最多也只有20条。
2.默认情况IMSDK会进行消息存储,在本地有缓存后就会读取本地缓存,官方说法是通过’IMSDK’的getMessage接口可以获取漫游消息,如果本地消息全部都是连续的,则不会通过网络获取,如果本地消息不连续,会通过网络获取断层消息。且腾讯云IM提供的漫游记录默认保存7天,所以在这个时间有接收过的消息会有缓存以后也可以读取得到,但如果是之前未登录的,那么就会获取不到消息了。
3.这个方法本地有缓存则缓存切异步的,所以有时 是离线消息还没同步下来。解决方法,可以设置同步离线消息回调public void setRefreshListener(TIMRefreshListener listener),getMessage改为在onRefresh()方法中调用。
TIMManager.getInstance().setConnectionListener(newTIMConnListener() {
@Override
public void onConnected() {//连接建立
Log.e(tag, "connected");
}
@Override
public void onDisconnected(int code, Stringdesc) {//连接断开
//接口返回了错误码code和错误描述desc,可用于定位连接断开原因
//错误码code含义请参见错误码表
Log.e(tag, "disconnected");
}
});
在这两个方法中做标记,来区分当前是否断线,和onRefresh()是否为重新连上线后而调用的,同时也可以利用该标记用来获取期间的历史消息
5.最后一条消息重复
在获取历史消息时,有时最新的那一条消息也会新消息通知onNewMessage收到,个人处理方式是登录后的第一条新消息和历史消息的最新一条的ID进行比较,以此来判断是否重复。
6.部分消息的getSenderProfile()返回值为null
这部分的消息是由该手机发出的消息。这是个坑
[conversationsendMessage:msg succ:^(){
NSLog(@"SendMsg Succ");
}fail:^(intcode, NSString * err) {
NSLog(@"SendMsgFailed:%d->%@", code, err);
}];
并没有把发送出去的消息返回。所以只能拿自己构建的消息去显示。
虽然有返回TIMMessage,但其实就是将你给他的原原本本的还给你
所以自己发出的消息getSenderProfile()是为null的
个人处理方法是如果TIMMessage.isSelf()为true就直接显示自己的信息,不去getSenderProfile()。