Android smack服务器收据确认

时间:2016-02-02 19:02:01

标签: android xmpp smack

我正在尝试使用XMPP制作聊天应用程序。为此,我提到this tutorial并成功实施了它。但现在我无法获得服务器收到的特定消息并更新我的本地数据库。请告诉我如何做到这一点。

我用chatId保存邮件。那么从哪个方法获取此收据消息ID?

2 个答案:

答案 0 :(得分:13)

  1. 您需要按邮件ID保存邮件,您可以通过message.getStanzaId()获取ID。
  2. 您必须启用stream management

    static {
        XMPPTCPConnection.setUseStreamManagementDefault(true);
        XMPPTCPConnection.setUseStreamManagementResumptiodDefault(true);
    }
    
  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();
    }
    

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

      

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

答案 1 :(得分:2)

connection.setUseStreamManagement(true);

它将在客户端启用流管理(XEP-198)。

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

注意:只有服务器支持XEP-198才能使用。