Search code examples
androidxmppsmackmongoose-im

Presence type unavailable with <show/>away</show> (away - resource is temporarily away) element not received


I haave installed mongooseIM 2.0.0 server on ubuntu.I have using smack 4.2.2 client library and backend database is postgres. When my app has gone to in background mode following presence stanza format i am sending to server

smack code

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);

send stanza

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

In above stanza show element means resource is temporarily away that means user has connected on server but other rosters are appear that user last seen as a offline.

Above stanza received successful on StanzaListener but only once time.When user again request to get roster Presence type and LastActivity from that user it will give presence type is alway online.

The following smack StanzaListener i am getting show element

 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);

Following stanza format i am trying to get LastActivity from user

smack code for requested last seen.

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

Result

<iq to='[email protected]/13A843800EA34EF81517400323777798' from='[email protected]' id='ncmqD-106' type='result'><query xmlns='jabber:iq:last' seconds='0'/></iq>

it will always give seconds=0 in LastActivity so i will again send request to get Roster presence type and i am getting following stanza result.

smack code for get Roster presence

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

Result

<presence to='[email protected]/13A843800EA34EF81517400323777798' from='[email protected]/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='[email protected]/4A72251C2B957F841517400310999197'></delay></presence>

In above stanza result i am not getting away element.

we need any server side configuration ? we are following this link Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence to send stanza request on server side.


Solution

  • Do not add presence.setType(Presence.Type.unavailable);. This signals to the server that the user is offline. If you want them to remain appearing online, but also away, then simply remove that line.