外观
发送、回执与恢复
SDK 先建立本地发送记录,随后根据服务端确认、拒绝与同步结果更新同一条消息,统一管理发送中、已发送、已读和失败状态。
三个判断点
| 判断点 | 含义 | 界面处理 |
|---|---|---|
| 本地出现气泡 | 用户已发起发送 | 展示发送中状态 |
| 服务端接受回执 | 服务端已接受消息 | 更新为已发送 |
| 已读状态更新 | 按会话与回执规则确认阅读状态 | 展示对应的已读状态 |
自定义 UI 订阅 SDK 状态更新;已发送与已读分别展示。
身份与排序
clientMessageId 关联同一条消息的本地记录、回执与重试,网络重试时沿用原标识。服务端序列决定会话顺序与同步水位。
消息和会话摘要通过 messageEventStream 与共享控制器更新。迟到消息可补齐历史,但不应把会话摘要回退到旧内容。
失败如何处理
| 情况 | 处理方向 |
|---|---|
| 临时断网、连接关闭 | 保留状态,等待 SDK 恢复并核对结果 |
| 请求超时、结果不确定 | 维持原消息身份,不立即生成第二条消息 |
| 被禁言、关系不允许、账号受限 | 展示业务原因,停止无意义的自动重发 |
| 内容格式不合法 | 修正内容或让用户重新编辑 |
| 无法续期的鉴权失效 | 回到业务登录流程 |
Flutter 聊天控制器提供 retry(clientMessageId)。是否可重试还取决于具体失败状态;服务端明确拒绝的终态消息不应被无限重放。
断线后的恢复
连接成功和重连成功后,SDK 同步会话、消息与状态变化。应用回前台可调用 syncNow(),当前聊天页可设置活动会话优先级。在线接收和历史补拉会合并到同一状态源。
客户端按服务端授予的历史可见范围恢复记录。需要将业务事件送达客户后端时,可配置 Webhook 可靠投递与重试。
多端接入检查
检查断网重连、应用退出后恢复、同账号多设备同步和重复重试时的消息身份、状态与会话顺序。继续阅读 历史与搜索 与 错误处理。