推送同步实现

两类推送消息

推送消息有两种:

  • 用户通知:评论、点赞等业务通知(展示给用户)。
  • 同步通知:状态同步消息(不显示给用户)。

iOS 静默推送

iOS 通过 content-available: 1 标记静默推送:

  • 会唤醒 App(最多 30 秒)。
  • 不显示通知。
  • App 在后台处理同步,更新未读数。

安卓数据消息

安卓通过不带 notification 字段的数据消息:

  • 不会显示通知。
  • App 在后台 / 前台都能处理。
  • 用于同步未读数、已读状态。

同步时机

什么时候触发同步?

  • 标记已读:单条已读 → 推送未读数变化给其他设备。
  • 创建新消息:新通知到达 → 其他设备未读数 +1。
  • 全部标记已读:广播给所有设备。
  • 删除消息:同步删除。

同步消息的幂等

同步消息可能重复到达,App 端要幂等处理:

  • 未读数以服务端返回的权威值为准,而不是本地累加。
  • 多次收到同一同步消息,结果一致。

一句话

推送同步 = 用「不打扰的推送」(静默推送 / 数据消息)把服务端的权威状态广播到所有设备。关键在区分「用户通知」和「同步通知」。