Android(XMPP)缓存/同步聊天应用程序中的消息

Vic*_*yan 5 java database android caching xmpp

问题描述

我正在创建基于XMPP协议的android聊天应用程序.Smack用作XMPP客户端库.在应用程序中,消息存储在SQLite数据库中.

如何实现消息缓存(例如在Facebook messenger中完成)?如果服务器下载20上有新消息并向用户显示,如果没有来自本地数据库的显示.如果用户再次向上滚动,请检查数据库和服务器并显示下20条消息.

有可用的开源示例吗?

小智 0

使用SQLiteXMPP MAM ext的组合。


  1. 将新消息存储在数据库中。
  2. 加载并显示本地数据库中的最后 x 条消息。
  3. XMPP MAM扩展将从服务器获取当前、过去的信息,即使它们不存在于客户端内存中。
  4. 当用户想要查看更多消息时,请检查数据库和服务器。
  5. 缓存驱逐策略可重置/从数据库中删除过去的消息,以避免内存使用。

使用XMPP MAM ext检索最后 20 条消息:

int n = 20; // The number of messages to retrieve
MamManager mamManager = MamManager.getInstanceFor(connection);
MamQueryResult mamQueryResult = mamManager.queryArchive(n);
List<Forwarded> forwardedList = mamQueryResult.getForwardedMessages();
for (Forwarded forwarded : forwardedList) {
    Stanza stanza = forwarded.getForwardedStanza();
    if (stanza instanceof Message) {
        Message message = (Message) stanza;
        // Display the message to the user or process it as needed
    }
}
Run Code Online (Sandbox Code Playgroud)

connection代表XMPPnvar 代表消息数并从MAMmamManager.queryArchive(n)检索最后一条消息。n

检查if (stanza instanceof Messages)Message,因为MAM可以像这样检索它Presence


有关详细信息,请参阅XEP-0313 。开源示例可以很好地检查,例如SmackSQLitePix-Art Messanger