Xmpp 多设备消息读取状态 Syc

问题描述

我正在尝试实现像 WhatsApp 这样支持多设备和平台(例如 android ios web 和电子应用程序)的消息传递应用程序。用户A可以在任何时间点从该平台的任何一个登录,例如可以在多个设备上同时在线

A 可以同时在网络和移动应用程序中在线

当所有设备都在线时,XMPP carbon 能够同步消息。在一个平台中传递消息并且用户未查看该消息。之后在第二个设备上的检查消息如何识别已读或未读的消息的状态

  • 在网络上收到一条消息,但没有阅读该聊天内容
  • A 打开移动应用并同步来自 MAM 的新消息
  • MAM 同步的消息没有任何已读状态

尝试使用 XMPP 消息标记无法解决这些问题消息生成器不是 MAM 存档消息的一部分

使用的 XMPP 服务器是 ejabberd

解决方法

正是出于这个原因,XEP-0333: Chat Markers 被创建:

摘要:该规范描述了一种在聊天中标记最后接收、显示和确认消息的解决方案。

后来,来自相同的规范:

递送和阅读回执的概念已被其他消息服务(例如 iMessage、Google Hangouts 和 Blackberry Messenger)普及。这些服务提供了消息何时被传递到任何收件人资源以及(可选)何时被阅读的视觉指示。这些视觉指示(此处称为“聊天标记”)在所有发送者和接收者的资源之间自动同步,因此聊天状态始终保持一致。如果一个或多个资源未连接,它可以在重新连接时从消息存档中获取聊天标记。

任何支持 MAM 的服务器都应该支持它,所以这应该包括 ejabberd。