Smack:连接的用户总是显示为离线

Smack: Connected user always appears offline

我正在为 Android 使用 Smack 创建一个简单的聊天客户端。我使用 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 中使用实时模式看到了这个节。我认为这会告诉 Gajim/PSI 用户在线。还是要求 Android 用户首先需要将 Gajim/PIS 用户明确添加到其花名册中?我目前没有这样做。

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

为两个用户重复上述操作。他们应该相互订阅。如果您为一个用户执行此操作,它将不起作用