如何在 asmack 中使用 PubSubManager 发布和解析

Posted

技术标签:

【中文标题】如何在 asmack 中使用 PubSubManager 发布和解析【英文标题】:How to Publish and parse back with PubSubManager in asmack 【发布时间】:2014-02-11 13:28:43 【问题描述】:

我正在使用 asmack lib 和 openfire 作为 xmpp 服务器在 android 平台上开发 IM 应用程序。由于用户在与服务器断开连接时无法在聊天室中持续存在,我决定实现 PubSubManager 概念。而且我浏览了很多链接,但对于使用 Payload 发布和从有效负载中检索消息无法得到任何好的解释。这是我创建和订阅该节点并发布有效负载的代码....

ConfigureForm form = new ConfigureForm(FormType.submit);
form.setAccessModel(AccessModel.open);
form.setDeliverPayloads(true);
form.setNotifyRetract(true);
form.setNotifyDelete(true);
form.setPublishModel(PublishModel.open);

leafNode = pubSubManager.createNode("testnode");
leafNode.sendConfigurationForm(form);

leafNode.subscribe(MY_JID);

SimplePayload payload = new SimplePayload(
            "elementname",
            "pubsub:testnode:elementname",
            "<elementname>my content</elementname>");
PayloadItem<SimplePayload> item = new PayloadItem<SimplePayload>(
             null, payload);

leafNode.publish(item);

发布此项目时我没有问题。发布此项目时,我的聊天侦听器被触发(因为我在该节点中订阅了自己)使用消息对象,我无法从中获取消息正文(null)。那么我的发布过程是否正确,如果是,接收时如何找回呢?

【问题讨论】:

【参考方案1】:

您不想通过聊天接收消息,毕竟它实际上不是聊天消息。

查看pubsub documentation,特别是接收发布订阅消息

部分

【讨论】:

以上是关于如何在 asmack 中使用 PubSubManager 发布和解析的主要内容,如果未能解决你的问题,请参考以下文章

如何在消息 asmack/smack 中添加其他数据?

如何检查用户是不是已在 ejabberd 服务器中注册或未使用 asmack

如何在 Android aSmack 中实现 DeliveryReceiptManager

如何访问在android asmack库中具有私有访问修饰符的访问IQTypeFilter?

如何使用 aSmack 获取 MultiUserChat 房间的 DiscussionHistory?

如何在 Android (2014) 中使用 aSmack XMPP 库实现 facebook 聊天? [关闭]