免打扰多端同步与冲突

单会话级别与会话类型级别是服务端状态,多端共享。理解同步语义可以避免“手机上静音了,电脑还在弹”的问题。

同步语义​

动作本端其它端
设置单会话级别立即更新本地读模型收到 `CONVERSATION` 事件,刷新该会话 `notificationLevel`
设置类型级别立即生效于该类型所有会话下次拉取会话列表 / 收到会话事件时刷新
新消息到达按当前级别决定是否提醒各端独立判断(都读同一份服务端设置)
离线期间修改连接后拉取会话列表得到最新级别以服务端为准

冲突处理​

  • 同一会话两端几乎同时修改:服务端以最后一次写入为准,另一端收到事件后覆盖本地值(不要做“本地优先”合并)。
  • 修改失败(网络错误)时回滚乐观更新,并提示用户重试。
  • 类型级别与单会话级别同时存在时,单会话优先;不要把类型设置复制到每个会话。
  • 本地缓存的级别只用于离线展示,连接恢复后必须刷新。

测试建议​

Shell
# 双端登录同一账号(两台设备 / 模拟器 + 真机)
# 1) A 端把群 g_1001 设为免打扰
# 2) B 端等待 CONVERSATION 事件,检查会话 notificationLevel=2 且无红点
# 3) B 端恢复提醒,A 端同步恢复
# 4) 断网修改 → 恢复网络 → 两端以服务端为准收敛

相关:免打扰总览、连接监听、前台通知处理。