Квитанция квитанции сервера Android

Я пытаюсь сделать приложение чата с использованием XMPP. Для этого я сослался на этот учебник и успешно реализовал его. Но теперь я не могу получить это конкретное сообщение, полученное сервером, и обновить мою локальную базу данных. Пожалуйста, дайте мне любую идею, как это сделать.

Я сохраняю сообщение с помощью chatId. Так из какого метода я могу получить этот чек?

2 ответа

  1. Вам нужно сохранить ваши сообщения по идентификатору сообщения, вы можете получить идентификатор по message.getStanzaId().
  2. Вы должны включить управление потоком.

    static {
        XMPPTCPConnection.setUseStreamManagementDefault(true);
        XMPPTCPConnection.setUseStreamManagementResumptiodDefault(true);
    }
    
  3. когда вы отправляете сообщение, вы добавляете ack listener для этого сообщения, вот так.

    try {
        if (mConnection.isSmEnabled()) {
            try {
                mConnection.addStanzaIdAcknowledgedListener(message.getStanzaId(), new StanzaListener() {
                    @Override
                    public void processPacket(Stanza packet) throws NotConnectedException {
                        updateMessageStatus(packet);
                    }
                });
            } catch (StreamManagementException.StreamManagementNotEnabledException e) {
                e.printStackTrace();
            }
        }
        mConnection.sendStanza(message);
    } catch (NotConnectedException e) {
        e.printStackTrace();
    }
    

    Теперь внутри метода updateMessageStatus(packet) вы находите сообщение в своей базе данных по id (packet.getStanzaId()) и обновляете статус с "ожидающий" до "отправленный".

    Обратите внимание, что на вашем сервере также необходимо включить управление потоками.

connection.setUseStreamManagement(true);

Это позволит управление потоком (XEP-198) на стороне клиента.

http://xmpp.org/extensions/xep-0198.html

NB: Это будет работать, только если сервер поддерживает XEP-198.

Другие вопросы по тегам