【问题标题】:Smack: Connected user always appears offlineSmack:已连接的用户始终显示为离线
【发布时间】:2018-11-09 23:24:51
【问题描述】:

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

【问题讨论】:

    标签: xmpp ejabberd smack


    【解决方案1】:

    为了在 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);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-09
      • 2020-11-09
      相关资源
      最近更新 更多