会话
理解会话为什么是用户自己的聊天列表视图,以及它与频道、未读和删除的关系。
会话(Conversation)是某个用户看到的一项聊天记录,通常对应聊天列表中的一行:它指向一个频道,并展示最近消息、未读数和其他个人状态。
会话不是另一个装消息的容器。消息仍然保存在频道中;WuKongIM 根据用户的频道关系、已提交消息和个人可见状态构建会话视图。
为什么会话重要
- 组织聊天列表:把已有可见消息或被用户显式激活的频道汇总成可进入的列表。
- 提示新消息:为当前用户计算未读数和可见范围。
- 帮助离线恢复:客户端先找到有哪些会话,再分别同步各频道缺失的消息。
- 支持个人操作:隐藏、清除未读等操作只影响当前用户,不改变其他成员的频道历史。
与其他概念的关系
- 频道是会话指向的通信空间,也是消息历史的来源。
- 消息会改变会话中可展示的最近内容和未读投影。
- 用户拥有自己的会话视图,不同用户的状态彼此独立。
- 设备同步同一 UID 的会话状态,同时保留各自的本地 UI 状态。
会话与频道的区别
| 频道 | 会话 |
|---|---|
| 是多人共享的通信空间 | 是某个用户对该频道的个人视图 |
| 保存频道内有序消息 | 引用最近消息并呈现未读、隐藏等状态 |
由 channel_id + channel_type 标识 | 还必须结合当前 UID 才有完整含义 |
| 成员看到同一份已提交历史范围 | 每个成员可以有不同的已读位置和可见范围 |
例如,Alice 和 Bob 都在“周末出行”群频道中。频道里最新消息只有一份,但 Alice 可能已经读完,Bob 仍有 5 条未读,所以两个人看到的会话状态不同。
一个会话通常展示什么
| 信息 | 用途 |
|---|---|
| 频道 ID 与类型 | 确定打开哪个单聊或群聊 |
| 最近消息 | 在聊天列表中显示摘要 |
| 未读数 | 提示当前用户还有多少新内容 |
| 已读与可见边界 | 决定从哪里计算未读、哪些历史仍对当前用户可见 |
| 本地展示状态 | 置顶、草稿和最终排序通常由客户端维护 |
服务端会使用 activated_at 作为活动会话目录的排序依据。它表示用户显式激活频道的时间,不是最新消息时间;未激活且没有可见消息的空频道不会出现在会话列表中。客户端拿到最近消息后,再决定置顶、分组和最终 UI 顺序。
服务端会话列表和每个频道的消息列表使用不同的同步进度。客户端不能用一个游标同时代替两者。
常见操作如何理解
- 清除未读:推进当前 UID 的未读基线,不等于向对方发送“已读回执”。
- 隐藏或删除会话:只隐藏当前用户此刻的会话视图,不会退群,也不会删除其他成员的消息;之后出现更高序号的新消息时,会话可以再次出现。
- 退出或被移除:改变频道成员关系,与隐藏聊天列表不是一回事。
- 多设备同步:会话和未读通常按 UID 共享,一个设备的更新可能在其他设备下一次同步时出现。
聊天列表的最终展示由客户端决定
WuKongIM 提供会话、最近消息和未读等服务端状态;置顶、草稿、分组以及最终 UI 排序仍应由客户端产品逻辑维护。
继续阅读消息,再选择你的完整版 SDK 平台查看会话 API。需要理解目录分页和服务端构建过程时,再查看会话目录相关架构说明。