阻止名册中的状态更新

Posted

技术标签:

【中文标题】阻止名册中的状态更新【英文标题】:Block presence updates from roster 【发布时间】:2015-11-29 10:32:48 【问题描述】:

我目前正在为 android 构建一个聊天应用程序。

XMPP Server: MongooseIM.

XMPP Client: Smack 4.1.5.

目前登录的用户不断从他的烘焙伙伴那里获得状态更新。我只想在应用程序打开时接收这些状态更新,并在应用程序关闭时阻止它们。有没有办法实现这种行为?我曾尝试使用隐私列表,但没有成功。

这是我迄今为止尝试过的。

        PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(mXMPPConnection);
        ArrayList privacyItems = new ArrayList();
        PrivacyItem item = new PrivacyItem(PrivacyItem.Type.subscription, "to", false, 1);
        item.setFilterPresenceIn(true);
        privacyItems.add(item);
        privacyManager.createPrivacyList("subscription", privacyItems);

【问题讨论】:

如果不修改服务器路由策略(在源代码级别),则只能使用隐私列表。 Routing of presence stanzas is specified by RFC-6121。为什么隐私列表对您不起作用? 隐私列表应该对我有用。根据 smack 文档,“PrivacyItem”类有助于“允许或阻止入站状态通知”。也许我没有以预期的方式使用课程。最好附上代码 sn-p。如果你以前在 smack 上工作过,请看看。 【参考方案1】:

我假设您希望保持连接以接收消息,但希望限制在线流量。

ejabberd 支持XEP-0352 Client State Indication,它就是这样做的。进入后台时,将您的客户端切换到非活动模式,并且不会发送状态更新。返回前台时,将 CSI 状态切换为活动状态,您将收到相关的状态更新,并通过删除冗余过时的状态信息进行了优化。

您可以查看 ejabberd 文档:mod_client_state

【讨论】:

XEP-0352 正是我所需要的。但是 MoongooseIM 目前不支持。我剩下的唯一选择是使用 PrivacyLists。 嗯,这几乎是相同的代码库,所以你应该能够解决问题:) 是的。要试一试..非常感谢:)

以上是关于阻止名册中的状态更新的主要内容,如果未能解决你的问题,请参考以下文章

使用 React Context 阻止登录状态在主页中更改

如何在 XMPP 中阻止匿名用户

sh 使用iblocklist.com中的阻止列表列表更新传输阻止列表的脚本

如何阻止指针更新前一个循环中的数据?

如何阻止 Eclipse 上的 JPA Facet 一直更新?

Magneto - 来自特定状态的阻止订单