状态类型不可用<show/>,</show>未收到离开(离开 - 资源暂时离开)元素



我在ubuntu上安装了mongooseIM 2.0.0服务器。我使用了 smack 4.2.2 客户端库和后端数据库是 postgres。当我的应用程序在状态节格式之后进入后台模式时,我要发送到服务器

啪��

Presence presence = new Presence(Presence.Type.unavailable);
presence.setStatus(""+new Date().getTime());
presence.setType(Presence.Type.unavailable);
presence.setMode(Presence.Mode.away);
connection.sendStanza(presence);

发送节

<presence id='aS7jX-85' type='unavailable'><status>1517400343535</status><show>away</show></presence>

在上面的节中show元素表示资源暂时离开,这意味着用户已在服务器上连接,但其他名单显示为用户上次被视为脱机。

以上节在StanzaListener上获得了成功,但只有一次。当用户再次请求从该用户获取花名册状态类型和LastActivity时,它将提供状态类型始终在线。

以下StanzaListener我正在得到show元素

StanzaTypeFilter filter = new StanzaTypeFilter(Presence.class);
mPresenceListener = new StanzaListener() {
@Override
public void processStanza(Stanza stanza) throws SmackException.NotConnectedException, InterruptedException {
if(registerXmppListener!=null) {
registerXmppListener.onPresenceReceived(stanza);
}
}
};
connection.addSyncStanzaListener(mPresenceListener, filter);

按照节格式,我试图从用户那里获取LastActivity

上次看到的请求代码。

LastActivity man = LastActivityManager.getInstanceFor(connection).getLastActivity(getEntityBarJid(user2));

结果

<iq to='sagardj@tasktower.com/13A843800EA34EF81517400323777798' from='demo2@tasktower.com' id='ncmqD-106' type='result'><query xmlns='jabber:iq:last' seconds='0'/></iq>

它将始终在LastActivity中给出秒= 0,因此我将再次发送请求以获取名册状态类型,并且我正在获得以下节结果。

获取Roster状态的咄咂代码

Presence presence = roster.getPresence(getEntityBarJid((ActivityHelper.createJid(jid))));

结果

<presence to='sagardj@tasktower.com/13A843800EA34EF81517400323777798' from='demo2@tasktower.com/4A72251C2B957F841517400310999197' id='aS7jX-29'><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://www.igniterealtime.org/projects/smack' ver='lWpWNgqtfynY+MxupmhOr2LZqOg='/><delay xmlns='urn:xmpp:delay' stamp='2018-01-31T12:05:16.000+00:00' from='demo2@tasktower.com/4A72251C2B957F841517400310999197'></delay></presence>

在上面的节结果中,我没有离开元素。

我们需要任何服务器端配置 ? 我们点击此链接 可扩展消息传递和状态协议 (XMPP):即时消息和状态 在服务器端发送节请求。

不要添加presence.setType(Presence.Type.unavailable);。这会向服务器发出用户处于脱机状态的信号。如果您希望它们继续在线显示,但也离开,那么只需删除该行即可。

最新更新