我如何在 smack openfire android 中监听传入的订阅请求
Posted
技术标签:
【中文标题】我如何在 smack openfire android 中监听传入的订阅请求【英文标题】:How can i listen incoming subscription request in smack openfire android 【发布时间】:2016-10-23 18:01:13 【问题描述】:我正在使用 smack open fire 创建一个 android 聊天应用程序。我面临的问题是我知道如何发送和接受订阅请求,但我怎么知道我是否收到了任何订阅请求。 我使用了 Stanza 监听器,但监听器只监听传入的聊天消息,而不是订阅请求。 下面是我的代码
StanzaFilter filter=new StanzaTypeFilter(Message.class);
PacketCollector collector=connection.createPacketCollector(filter);
connection.addAsyncStanzaListener(new StanzaListener()
@Override
public void processPacket(Stanza packet) throws SmackException.NotConnectedException
Log.wtf("MA","Stanz listner");
,filter);
我是 smack 的初学者,请帮助我如何收听传入的订阅请求。提前致谢。
【问题讨论】:
何时向该用户发送订阅请求?这个“Stanz listner”不会打印在日志中? StanzaTypeFilter 将实现一个函数 'accept' 你返回了什么? 我只是使用这个模块来收听传入的订阅..我错了吗?如果我错了,你能告诉我我应该在那里写什么而不是节过滤器..提前谢谢 这应该可以。只需删除 packetCollector 行,我猜你的代码中不需要这个。 【参考方案1】:订阅请求不是Message
。它是Presence
。
所以,你可能应该试试:
StanzaFilter filter = new StanzaTypeFilter(Presence.class);
参考:RFC 3921 - Section 6 - Managing Subscriptions
【讨论】:
【参考方案2】:这就是我在我的android代码中所做的
StanzaFilter subscribefilter = PresenceTypeFilter.SUBSCRIBE;
PresenceSubscribeListener subscribeListener = new PresenceSubscribeListener(context.getApplicationContext(), connection);
connection.addSyncStanzaListener(subscribeListener, subscribefilter);
然后这个连接对象已经在 Android 中一个长期运行的服务中被引用。这样做是为了当您的应用在后台接收数据包时,您仍然可以处理传入的在线状态数据包。
附:我在我的 android 代码中使用 smack 4.1.9。
【讨论】:
以上是关于我如何在 smack openfire android 中监听传入的订阅请求的主要内容,如果未能解决你的问题,请参考以下文章
Openfire:在android上使用smack向特定人广播消息
如何使用 Smack 在 XMPP openfire 中了解打字状态
如何使用 Smack 在 XMPP openfire 中了解打字状态
如何在 Android 应用中使用 Smack 从 Openfire 服务器恢复两个用户之间的聊天记录