多端同步问题分析

一条用户投诉

入职第四周,老王给我看了一条用户投诉:

「我在手机上看了通知,标记已读,但在电脑上还是显示未读。这是 bug 吗?」

我查看这个用户的设备表:

id  user_id  device_token  platform  brand      last_active
1   123      abc123        ios       iphone     2026-04-01 09:00
2   123      def456        ios       ipad       2026-04-01 08:30
3   123      ghi789        android   pixel      2026-04-01 07:00

这个用户有 3 台设备:iPhone、iPad、安卓手机。

问题分析

我画了一个时间线:

时间 09:00                时间 09:05
iPhone: 用户标记已读      iPhone: 已读 ✓
                         iPad: 未读 ✗(状态没更新)
                         安卓: 未读 ✗(状态没更新)

核心问题:设备之间的状态没有同步。

为什么会出现

  • 用户多设备登录:手机、平板、电脑是常态。
  • 已读状态存在服务端(单一事实来源),但展示在各设备上。
  • 一台设备改了状态,其他设备不知道。

这本质是「一份状态,多个视图」的同步问题:视图要跟随权威状态变化。

解决目标

同步要满足:

  1. 及时:改了状态,其他设备尽快更新。
  2. 不打扰:同步消息不能弹出通知栏。
  3. 可降级:同步失败时,至少打开 App 后能拉平。

一句话

多端同步问题的本质:一个用户多个设备共享同一份通知状态,状态变了要同步到所有视图。下一节对比三种同步方案。

发现内容有问题?

告诉我们哪里需要改进。