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

yrefmtwq  于 2023-04-04  发布在  Android
关注(0)|答案(1)|浏览(166)

问题描述

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

问题

如何实现消息缓存(例如。就像在Facebook Messenger中所做的那样)?如果服务器上有新消息,则下载20并显示给用户,如果本地数据库没有显示。如果用户再次向上滚动检查数据库和服务器并显示下一个20消息。
是否有可用的开源示例?

gzszwxb4

gzszwxb41#

使用SQLiteXMPP MAM ext.
1.将新消息存储在数据库中。
1.从本地数据库加载并显示最近x条消息。

  1. XMPP MAM扩展将从服务器获取信息,从现在,过去,即使它们不存在于客户端的内存中。
    1.当用户想要查看更多消息时,请检查数据库和服务器。
    1.缓存驱逐策略,用于从数据库中重置/删除过去的消息,以避免内存使用。
    使用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表示XMPPn var表示消息数,mamManager.queryArchive(n)MAM检索最后一条n消息。
if (stanza instanceof Messages)检查Message节,因为MAM可以像Presence一样检索它。
查看XEP-0313了解更多信息。开源示例可以很好地检查,如SmackSQLitePix-Art Messanger

相关问题