跳到主要内容

消息与会话管理概述

uni-app IMKit 的 UI 页面通过 uni.$RongKitStore 使用 imkit-store。本目录介绍 UI 之外的消息与会话状态管理能力;页面路由参见UI 页面,RCUIKit 页面、组件与 Store 的关系参见RCUIKit 源码结构

Store 职责

Store 或模块主要职责常用入口
RCKitConversationStore管理会话列表、当前打开会话、会话缓存和未读数getConversationsopenConversationcreateCachedConversationremoveConversationupdateCacheConversationgetTotalUnreadCountclearUnreadCount
RCKitMessageStore管理消息内存缓存、历史消息、发送和消息操作getMessagesgetHistoryMsgListsendMessagesendMediaMessageinsertMessagerecallMessageforwardMessage
RCKitTypingStore发送和读取单聊或群聊的正在输入状态sendTypingisTypingreleaseTypingThrottle
SpeechToTextStore管理高清语音转文字的请求、结果、转换中和失败状态requestForMessagegetSTTTextisConvertinghasError
appDataAppDataModule管理用户、群组、系统会话和群成员资料缓存,并通过业务 Hook 补充资料getUserProfilegetGroupProfilegetSystemProfilegroupMembersCache

以上对象由 RCKitStore 在初始化时创建,业务代码通常通过 uni.$RongKitStore 访问,不需要自行实例化各 Store。

会话管理

conversationStoreopenedConversation 是聊天页、输入区域、转发页和阅读状态页之间共享的当前会话状态。打开指定会话时,先创建或取得内存会话,再调用 openConversation

typescript
const conversation = uni.$RongKitStore.conversationStore.createCachedConversation({
conversationType: RongIMLib.ConversationType.PRIVATE,
targetId: 'YourTargetId',
});

uni.$RongKitStore.conversationStore.openConversation(conversation);

会话列表页使用 getConversations 分页读取会话;删除、修改草稿或更新会话展示信息时,使用对应的 removeConversationupdateCacheConversation。不要直接修改 Store 内部的会话数组,以免 UI 响应式状态和未读数不一致。

消息管理

messageStore 为 RCUIKit 页面提供统一消息入口:

  • 聊天页从 getMessages 读取当前缓存,并使用 getHistoryMsgList 加载更多历史消息。
  • 文本和自定义消息使用 sendMessage;图片、语音、视频和文件使用媒体消息上传流程后发送。
  • 消息组件的撤回、失败重发和转发分别调用 recallMessagesendMessage/媒体重发逻辑和 forwardMessage
  • 转发页通过 setSelectedMessagesgetSelectedMessages 在路由之间暂存待转发消息。
  • 启用消息已读 V5 时,消息列表通过 sendV5Receipts 上报可见消息,阅读状态页使用回执查询接口展示成员状态。

自定义消息的注册、发送、消息组件接入和会话列表摘要处理,请参见自定义消息。内置消息类型与 message-item.vue 的分发关系,请参见消息列表与消息组件

输入状态与语音转文字

输入区域在单聊输入时通过 typingStore.sendTyping 发送文本正在输入状态,在语音录制时发送对应的语音状态;发送完成后释放限流。聊天页通过 typingStore.isTyping 更新导航栏标题。

SpeechToTextStore 只负责语音转文字的状态管理。是否展示入口取决于 IMLib getAppSettings() 返回的 isSpeechToTextEnabled 配置,与消息已读 V5 开关无关;具体消息 UI 入口位于 RCUIKit/pages/chat/message/messageType/message-audio.vue

业务资料与缓存

appData 负责缓存用户、群组、系统会话和群成员资料。资料缺失时,UI 会使用默认名称或头像;业务项目应在初始化 RCKitStoreInstaller 时实现资料 Hook,详见业务数据管理

群聊 @ 成员面板通过 appData.groupMembersCache 读取群成员,阅读状态页也依赖该缓存补全成员名称和头像。因此,资料 Hook 的返回值应保持与 IUserProfileIGroupProfileIGroupMemberProfile 类型一致。

注意

不要在页面中绕过 Store 直接调用 IMLib 的发送接口。这样可能导致消息缓存、发送状态、会话摘要和未读数无法同步;如需在 UI 外发送消息,请使用对应的 messageStore 接口。