阻止名册中的状态更新
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。 嗯,这几乎是相同的代码库,所以你应该能够解决问题:) 是的。要试一试..非常感谢:)以上是关于阻止名册中的状态更新的主要内容,如果未能解决你的问题,请参考以下文章
sh 使用iblocklist.com中的阻止列表列表更新传输阻止列表的脚本