Smack: подключенный пользователь всегда появляется в автономном режиме - PullRequest
0 голосов
/ 31 мая 2018

Я играю с Smack для Android, чтобы создать простой чат-клиент.Я использую ejabberd в качестве локального сервера XMPP.Кажется, что основы работают просто отлично: я могу подключаться, получать и отправлять сообщения.Для тестирования я использую Gajim / PSI в качестве готовых XMPP-клиентов.

Моя единственная проблема в том, что пользователь Android всегда отображается в автономном режиме в Gajim и PSI.Поскольку обмен сообщениями работает, пользователь Android, очевидно, подключен, и веб-интерфейс администратора ejabberd перечисляет обоих пользователей как подключенных.

В моем коде Andoird после подключения и входа в систему я отправляю раздел присутствия следующим образом:

...
stanza = new Presence(Presence.Type.available);
stanza.setStatus("online");
this.mConnection.sendStanza(stanza);
...

Я вижу эту строфу в ejabberd в режиме реального времени.Я думал, что сказал бы Gajim / PSI, что пользователь онлайн.Или требуется, чтобы пользователь Android сначала явно добавил пользователя Gajim / PIS в свой список?Я сейчас этим не занимаюсь.

1 Ответ

0 голосов
/ 06 июня 2018

Чтобы статус присутствия работал в 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);

Повторите вышеуказанное для обоих пользователей.Они должны быть взаимно подписаны.Если вы сделаете это для одного пользователя, это не сработает

...