我正在玩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用户明确添加到其名单中?我目前没有这样做。
答案 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);
对两个用户重复上述操作。他们应该互相订阅。如果您为一个用户执行此操作将无法正常工作