会话相关问题

最近更新时间:2025-10-15 20:55:11

我的收藏

会话列表分页拉取实现方案?

会话列表加载及刷新方案如下:
1. 首次打开应用登录 IM,通过分页拉取会话列表,只分页调用 getConversationList 拉取数据一次(建议条数:100 条),等用户上滑至底部再拉取下一页会话列表数据。
2. 之后有新增会话会话更新时,上层通过 IM V2TIMConversationListener 监听回调处理:
2.1 onNewConversation:当上层收到此回调时,可直接把新增的会话添加到会话列表适配器内,也就是调用 .addxxx 添加数据。
2.2 onConversationChanged:当上层收到此回调时需要对已加载的会话数据做更新,可能存在当前 UI 层 还没有加载到对应会话数据的情况,因此要分开处理:
触发 onConversationChanged 的会话已在 UI 层加载,则更新下拉列表中对应已加载的会话数据并刷新 UI。
触发 onConversationChanged 的会话还没添加到适配器内,判断不存在时,也走 .addxxx 添加数据逻辑。
2.3 onConversationDeleted:当上层收到此回调时,需要移除对应的会话 item 数据,也可能存在当前 UI 层还没有加载到对应会话数据的情况,因此要分开处理:
触发 onConversationDeleted 的会话已在 UI 层加载,则移除对应的会话数据,并刷新 UI。
触发 onConversationDeleted 的会话还没添加到适配器内,判断不存在时,忽略不处理。

PC 端如何实现类似微信/企微首次进入聊天页面,自动生成仅本地存在一个临时会话需求?

具体方案:
通过 IM 搜索能力,搜索到匹配数据后发起聊天,点击进入聊天页面,先调用 TIMConvGetConvInfo 接口,判断本地是否已经存在对应的会话缓存。
本地已存在情况:走当前默认逻辑,不做任何处理。
本地暂不存在缓存情况:调用 TIMMsgSaveMsg 接口插入一条“本地自定义消息”,消息内容 Message -> kTIMMsgExcludedFromLastMessage 设置为true(此条消息不计入会话 lastMessage),该消息仅作为激活会话能力,不做实际显示。
最终表现:
只要不卸载重装、清除缓存或更换设备,后续再登录依然也能拉取到。

首次打开应用登录,当会话未读数发生变化时,不触发 onTotalUnreadMessageCountChanged(会话未读总数监听回调),如何解决?

对于 onTotalUnreadMessageCountChanged 未读总数监听回调,需要先主动调用一次 getTotalUnreadMessageCount 获取会话未读总数接口才会触发。

客户端怎么实现:删除不在群内或群已解散的会话?

具体方案如下:
1. 大多数情况下,被踢或群解散,都会收到 V2TIMGroupListener 对应的监听回调,业务层在收到回调后调用 deleteConversation 接口删除对应会话即可。
2. 不过也会出现收不到回调的情况,例如在多台设备都登录过同一账号且本地都有已解散的群会话缓存,因为回调只会触发一次,所以只有其中一个设备会收到,其他设备自然也就无法通过回调删除。
这种情况下业务层需要做补充处理:
方案一:调用 getGroupMemberList 只获取群主的资料,如果报错了,说明已经不在群内或群已解散,再调用 deleteConversation 接口删除会话。
方案二:调用 getJoinedGroupList 接口获取已加群列表与 getConversationList 返回的会话数据做比对,如会话列表数据中的某个群会话并不在当前加群列表内,则删除会话。

发送群消息时,已经设置了“不计入未读”,但对方接收消息后,未读数依然产生,是什么原因?

1. IM 服务端对于忽略未读消息计数有数量限制,1000条以内的消息,最多储存100条忽略未读计数的消息数量。
2. 当群内陆续产生的忽略未读数的消息过多,总量超过100条时,受 IM 服务端当前限制所致,就算接收到的消息设置了不计入未读或消息为定向消息,依然会产生未读数。
3. 群会话未读数计算方式:未读数 = 群 lastSequence - readSequence - ignore_sequence
此问题的处理方案:建议客户做已读上报处理。

调用 getConversationList 总是返回 data 为空,该如何处理?

可以确认下接口的调用时机,建议监听 CONVERSATION_LIST_UPDATED 事件,事件触发后再调用 getConversationList 接口 。请参考 相关文档