Android smack服务器收据确认

use*_*508 2 android xmpp smack

我正在尝试使用XMPP创建聊天应用程序.为此,我参考了本教程并成功实现了它.但是现在我无法获得服务器收到的特定消息并更新我的本地数据库.请告诉我如何做到这一点.

我正在用chatId保存一条消息.那么从哪个方法获取此收据消息ID?

小智 15

  1. 您需要按消息ID保存消息,您可以通过message.getStanzaId()获取id.
  2. 您必须启用流管理.

    static {
        XMPPTCPConnection.setUseStreamManagementDefault(true);
        XMPPTCPConnection.setUseStreamManagementResumptiodDefault(true);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 当你发出消息时,你为这个消息添加一个ack监听器,就像这样.

    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();
    }
    
    Run Code Online (Sandbox Code Playgroud)

    现在,在updateMessageStatus(packet)方法中,您可以通过id(packet.getStanzaId())在数据库中找到消息,并将状态从"pending"更新为"sent".

    请注意您的服务器也需要启用流管理.