跳到主要内容

开发指南

多设备消息同步

在即时通讯业务中,同一用户账号可能在多个设备上登录。多设备消息同步是融云服务端提供的一项服务,可用于同一用户账号的多个设备之间同步收发消息。

默认情况下,融云不会在设备之间同步消息。新消息被某一端设备收取后,其他端无法收取该消息。

适用场景

在融云即时通讯业务中,多设备消息同步适用于以下情况:

  • 同一用户账号在多设备上同时在线(无论是否为同一端),希望同步收发消息。例如,用户可能拥有多个移动端设备,如两个 Android 设备、一个 iOS 设备。
提示

融云默认已支持多端同时在线,同一用户账号可在移动端、Web 端、桌面端、小程序端最多一个设备上同时在线。但是如果需要允许 App 用户同时在多个移动端设备或多个小程序端上在线,需要分别提交工单申请,详见多端同时在线

  • 同一用户账号换设备登录(无论是否曾在该设备登录过),希望同步收发的消息记录。例如用户从 Android 设备下线后,换到另一个设备从 Web 端登录。
  • 同一用户账号在当前设备卸载重装 App,希望同步收发消息记录。

支持在多设备间同步的消息

并非所有消息均支持多设备消息同步。状态消息仅支持在多设备同时在线时同步接收,不在线的设备无法通过多设备消息同步收到消息。

以下情况均属于状态消息:

  • 融云内置消息类型中定义为状态消息类型的消息。内置状态类型消息的具体包括:正在输入状态消息(RC:TypSts
  • 自定义的状态消息类型的消息。详见各个客户端「自定义消息」文档。
  • 使用服务端 API 状态消息接口发送的所有消息(不区分消息类型)均不支持同步。具体的 API 接口为发送单聊状态消息(/statusmessage/private/publish.json)、发送群聊状态消息(/message/group/publish.json)。

开通服务

请前往控制台,在 IM 服务管理页面的普通服务标签下开通多设备消息同步服务。该服务在开发环境免费使用,默认为关闭状态。生产环境预存费用后才可开通服务。

服务开启、关闭设置完成后 30 分钟内生效。

对其他功能或业务的影响

多设备消息同步服务的状态对即时通讯业务中的离线补偿?、撤回消息、聊天室业务等有影响。

对离线补偿的影响

控制台的多设备消息同步服务包含了融云服务端离线补偿机制?的开关。

开通多设备消息同步服务后,融云服务端自动为 App 启用离线补偿机制。离线补偿机制会在以下场景触发:

  • 换设备登录。用户在新设备上登录后(无论是否曾在该设备登录过),SDK 可获取最近指定天数(默认离线补偿天数为 1 个自然日)在其他终端上发送和接收过的消息。
  • 应用卸载重装。消息与会话列表是存储在本地数据库,用户卸载 App 时会删除本地数据库。用户重新安装 App 后并再次连接时,会触发融云服务端离线补偿机制,SDK 可获取最近指定天数(默认离线补偿天数为 1 个自然日)在其他终端上发送和接收过的消息。
提示

换设备登录应用卸载重装 场景下,离线补偿机制仅可获取到最近(默认离线补偿天数为 1 天,最大 7 天)的会话。早于该天数的会话无法通过离线补偿机制获取。因此,离线补偿后的会话列表可能与原设备上或卸载前的会话列表并不一致(您可能会有丢失部分会话的错觉)。

如需修改离线消息补偿的天数,可提交工单。建议谨慎设置离线补偿天数,当单用户消息量超大时,可能会因为补偿消息量过大,造成端上处理压力较大。

对 Web 平台连接数的影响

开通多设备消息同步服务后,可额外支持多 Web 页面连接(每个浏览器标签页也认为是一个连接),最多 10 个。

对撤回消息的影响

  • 未开通多设备消息同步服务时,多端之间无法同步撤回的消息。
  • 开通多设备消息同步服务后,消息发送端一旦撤回消息,如果用户在其他端在线,则其他端同步撤回该条已发送消息。如果用户在其他端不在线时,则在用户登录后同步撤回已发送的消息。

对服务端 API 发送消息的影响

通过服务端 API 发送消息时,部分接口可通过 isIncludeSender 指定消息发送者可否在客户端接收该已发消息。

  • 未开通多设备消息同步服务时,仅在发送者已登录客户端(在线)的情况下,通过 Server API 发送的消息可即时同步到发送者的在线客户端,无法同步到离线的客户端。
  • 开通多设备消息同步服务后,如果发送者未登录客户端(离线),通过 Server API 发送的消息可在再次上线时同步到发送者的在线客户端。