1.A方发送消息的话,B方 完成 TIMMessageListener 接口并开启的页面都会通过 onNewMessages 接收到消息,而这时B方再调用 TIMManagerExt.getInstance().getConversationList() 方法获取 所有未读消息时,与A方通讯的消息通话中未读消息就会更新 +1,B方可以处理,但由于 A方是发送方,所以即使调用获取未读消息的方法,与B方通讯的消息通话中的未读数还是不会有变化,不会 +1 。
2.如果B方收到消息后没有设置已读的话,A方再发来消息,信息未读数只会不断叠加。
3. List<TIMConversation> conversationList = TIMManagerExt.getInstance().getConversationList(); 是获取消息通话的列表。
循环过滤 for (TIMConversation timConversation : conversationList) 时,先要获取单个用户的通讯信息
TIMConversationExt conExt = new TIMConversationExt(timConversation); 而 TIMMessage lastMsg = conExt.getLastMsg() 指的是最后一条信息, TIMElem elem = lastMsg.getElement(0) 是里面具体的内容,之后可以判断类型,进而转换,获取里面的数据后进行数据操作。
TIMMessage 中包含 TIMElem 数组,TIMElem 里面才是真正对话的内容,可以用 isSelf() 方法来判断是否自己发的,大部分返回接口会返回 TIMMessage 数组,要用循环但反向的来获取 TIMMessage 。
getLastMsg() 只返回一个,而且里面的 TIMElem 也只有一个或没有,所以要判断是否为空。
4. 如果根据数据判断后想把某位用户到当前为止的通讯记录设置为已读的话,可以调用
conExt.setReadMessage(null, new TIMCallBack() {
@Override
public void onError(int i, String s) {
}
@Override
public void onSuccess() {
}
});
来进行设置。conExt是与单个用户的通讯信息,可以用上面的方法获取,也可以
TIMConversation mConversation = TIMManager.getInstance().getConversation(TIMConversationType.C2C, peer);
C2C 是通话类型,peer 就对方ID,之后 TIMConversationExt conExt = new TIMConversationExt(timConversation);
就可以获取了。
5. 在聊天页面 chatactivity 注册 TIMMessageListener 接口,退出时 注销接口 并 标记当前通话已读 。、
6. 在mainactivity 和单独聊天的 chatactivity 都注册 TIMMessageListener 接口,
在 mainactivity 的 onNewMessages 和 onResume 都统计未读数,
在 chatactivity 页面结束时标记当前通话已读,
这样一来虽然在chatactivity页面时两个都会收到消息统计未读数,但当切换回页面到 mainactivity 时,就会重新统计,之前通话的都变为已读,就不会出错了。而在 mainactivity 页面时,可以实时获取未读信息进行统计。
7.在IM的好友资料中,getUsersProfile 获取的好友资料
这里面的信息,如头像,性别,生日等是用户自己通过 modifySelfProfile 方法上传的信息,对所有好友可见的,公开的,是一对多的信息。
但用 getFriendList 所获取的好友信息
是当前用户对好友的自定义描述信息,是一对一的。上面的备注是当前用户对指定用户所写的备注,分组也是当前用户对指定用户的分组,是私密非公开的,只对自己的,是一对一的。所有如果有一些只对自己或对方可见的,和别人无关的信息,可以写入备注当中,比如系统自定义的亲密度,只有当前用户和对方主播之前的关系,别人看不到的,就可以写在双方的备注当中。