Квитанция квитанции сервера Android
Я пытаюсь сделать приложение чата с использованием XMPP. Для этого я сослался на этот учебник и успешно реализовал его. Но теперь я не могу получить это конкретное сообщение, полученное сервером, и обновить мою локальную базу данных. Пожалуйста, дайте мне любую идею, как это сделать.
Я сохраняю сообщение с помощью chatId. Так из какого метода я могу получить этот чек?
2 ответа
- Вам нужно сохранить ваши сообщения по идентификатору сообщения, вы можете получить идентификатор по message.getStanzaId().
Вы должны включить управление потоком.
static { XMPPTCPConnection.setUseStreamManagementDefault(true); XMPPTCPConnection.setUseStreamManagementResumptiodDefault(true); }
когда вы отправляете сообщение, вы добавляете 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.