Как я могу прослушать входящий запрос на подписку в smack openfire Android

#android #xmpp #openfire #smack

#Android #xmpp #openfire #smack

Вопрос:

Я создаю приложение для чата для Android с использованием smack open fire. Проблема, с которой я сталкиваюсь, заключается в том, что я знаю, как отправлять и принимать запросы на подписку, но как я могу узнать, получил ли я какой-либо запрос на подписку. Я использовал прослушиватель Stanza, но прослушиватель прослушивает только входящие сообщения чата, а не запросы на подписку. Ниже приведен мой код

 StanzaFilter filter=new StanzaTypeFilter(Message.class);
        PacketCollector collector=connection.createPacketCollector(filter);
        connection.addAsyncStanzaListener(new StanzaListener() {
            @Override
            public void processPacket(Stanza packet) throws SmackException.NotConnectedException {
                Log.wtf("MA","Stanz listner");
            }
        },filter);
  

Я новичок в smack, пожалуйста, помогите мне, как я могу прослушать входящий запрос на подписку. Заранее спасибо.

Комментарии:

1. когда вы отправляете запрос на подписку этому пользователю? этот «Список строк» не печатается в журналах?

2. StanzaTypeFilter реализует функцию ‘accept’, что вы вернули в этом?

3. Я просто использую этот модуль для прослушивания входящей подписки.. Я ошибаюсь? Если я ошибаюсь, можете ли вы сказать мне, что я должен написать там вместо фильтра строфы.. Заранее спасибо

4. это должно сработать. просто удалите строку packetCollector, я предполагаю, что вам это не нужно из вашего кода.

Ответ №1:

Запрос на подписку не является Message . Вместо этого это Presence .

Итак, вам, вероятно, следует попробовать:

StanzaFilter filter = new StanzaTypeFilter(Presence.class);

Ссылка: RFC 3921 — Раздел 6 — Управление подписками

Ответ №2:

Вот как я сделал в своем коде Android

 StanzaFilter subscribefilter = PresenceTypeFilter.SUBSCRIBE;
PresenceSubscribeListener subscribeListener = new PresenceSubscribeListener(context.getApplicationContext(), connection);
connection.addSyncStanzaListener(subscribeListener, subscribefilter);
  

И затем на этот объект подключения ссылались в давно запущенной службе в Android. Это было сделано таким образом, что при получении пакета, когда ваше приложение работает в фоновом режиме, вы все равно можете обработать входящий пакет присутствия.

P.S. Я использую smack 4.1.9 в своем коде для Android.