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



问题描述

我正在基于XMPP协议创建Android聊天应用程序。Smack用作XMPP客户库库。在应用程序中存储在SQLITE数据库中。

问题

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

是否有一个开源示例?

使用sqlite和xmpp 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
    }
}

connection表示XMPP,n VAR表示消息的数量,mamManager.queryArchive(n)从MAM中检索最后的n消息。

if (stanza instanceof Messages)检查Message节的MAM可以像Presence一样检索。


有关更多信息,请参见XEP-0313。开源示例可以很好地检查Smack,Sqlite和Pix-Art Messanger。

最新更新