Smack:已连接的用户始终处于脱机状态

时间:2018-05-31 02:55:42

标签: xmpp ejabberd smack

我正在玩Smack for Android来创建一个简单的聊天客户端。我使用ejabberd作为本地XMPP服务器。基本似乎工作得很好:我可以连接,接收和发送消息。为了测试,我使用Gajim / PSI作为现成的XMPP客户端。

我唯一的问题是Android用户总是在Gajim和PSI中列为离线。由于交换消息有效,Android用户显然已连接,ejabberd Web管理界面将两个用户列为已连接。

在我的Andoird代码中,连接并登录后,我发送了一个这样的存在节:

...
stanza = new Presence(Presence.Type.available);
stanza.setStatus("online");
this.mConnection.sendStanza(stanza);
...

我在ejabberd中使用实时模式看到这个stanze。我想这会告诉Gajim / PSI用户在线。或者是否需要Android用户首先需要将Gajim / PIS用户明确添加到其名单中?我目前没有这样做。

1 个答案:

答案 0 :(得分:2)

要使状态在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);

对两个用户重复上述操作。他们应该互相订阅。如果您为一个用户执行此操作将无法正常工作