XMPP XEP-0313 Smack Android获取所有花名册成员的最新消息

时间:2018-08-16 02:09:09

标签: java android xmpp smack

一旦有了花名册,我就可以遍历所有成员并使用MamManager查询 mamManager.mostRecentPage(jid, QUERY_META_DATA_PAGE_SIZE)

但是,这一次只能让我一次获取一次jid的数据,这意味着如果用户有1000个连接,则我必须进行1000个网络呼叫。有什么方法可以获取有关多个jid的最新消息?

编辑

因此,我已将smack的版本从4.2.3更新到4.3,以获取最新的api,我仍然可以找到一种方法来执行我想要的查询而无需遍历jids

for (int i = 0; i < jidList.size(); i++) {
    MamQueryArgs mamQueryArgs = MamQueryArgs.builder()
        .setResultPageSize(1)
        .limitResultsToJid(jidList.get(i))
        .queryLastPage().build();
    MamQuery mamQuery = mamManager.queryArchive(mamQueryArgs);
}

因此,在首次登录新用户时,我将在服务器上访问1000次

编辑2

实际上,第一次查询时,上面的查询什么都不返回,可能是因为本地存档为空,所以我必须执行以下操作:

for (Jid : jidList) {
    MamQuery mamQuery = mamManager.queryMostRecentPage(jid, 1);
}

1 个答案:

答案 0 :(得分:1)

  

有什么办法可以获取多个短消息的最新消息吗?

与您的帖子标题“获取所有花名册成员的最新消息”中的问题不同,不是吗?但是我相信两个问题的答案都是相同的。邮件存档管理(XEP-0313)查询查询存档。 'jid'参数仅将结果限制为仅包含具有该JID的消息。

如果您查询本地用户档案(常见情况),则可以使用Smack和

来查询最后的X条消息。
MamQueryArgs mamQueryArgs = MamQueryArgs.builder()
                                .setResultPageSize(<X>)
                                .queryLastPage()
                                .build();
MamQuery mamQuery = mamManager.queryArchive(mamQueryArgs);

有关更多信息,请查看MamManager's javadoc