我正在玩来创建一个简单的聊天客户端。我使用ejabberd作为本地XMPP服务器。基本原理似乎运作得很好:我可以连接、接收和发送消息。在测试中,我使用Gajim/PSI作为现成的XMPP客户端。
我唯一的问题是,在Gajim和PSI中,Android用户总是被列为脱机用户。由于交换消息有效,因此Android用户显然是连接的,ejabberd Web管理界面将两个用户都列出为已连接。
在我的Andoird代码中,在连接和登录之后,我发送了如下所示的存在节:
...
stanza = new Presence(Presence.Type.available);
stanza.setStatus("online");
this.mConnection.sendStanza(stanza);
...我看到ejabberd中使用的是实时模式。我想这会告诉Gajim/PSI用户是在线的。还是要求Android用户首先需要将Gajim/PIS用户显式地添加到其名册中?我现在没那么做。
发布于 2018-06-06 06:57:56
对于在xmpp中工作的存在状态,两个用户都应该相互订阅。
在发送方:
Presence presence = new Presence(Presence.Type.subscribe);
presence.setTo(receiverJid);
connection.sendPacket(presence);在接收方:
Presence subscribed = new Presence(Presence.Type.subscribed);
subscribed.setTo(senderJid);
connection.sendPacket(subscribed);对两个用户都重复上面的内容。它们应该是相互签署的。如果您为一个用户执行此操作,它将无法运行
https://stackoverflow.com/questions/50615977
复制相似问题