2016-02-02 47 views
2

我試圖讓使用XMPP聊天應用。爲此,我提到了this tutorial併成功實施了它。但現在我無法獲得服務器收到的特定消息並更新我的本地數據庫。請給我任何想法如何做到這一點。的Android咂嘴服務器收到ACK

我節省與chatId的消息。那麼,從哪種方法得到這個收據消息ID?

回答

12
  1. 你需要通過message id保存你的消息,你可以通過message.getStanzaId()獲得id。
  2. 您必須啓用stream management

    static { 
        XMPPTCPConnection.setUseStreamManagementDefault(true); 
        XMPPTCPConnection.setUseStreamManagementResumptiodDefault(true); 
    } 
    
  3. 當你發出一個mesage

    ,你添加一個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(包)的方法,你在你的數據庫的ID從 「待定」 到 「已發送」 發現消息(packet.getStanzaId()),並更新狀態。

    請留意您的服務器的需求,使流管理了。

+0

什麼叫這個「請大家注意,您的服務器的需求,使流管理了。」的意思。在我的情況下,我使用ejabberd服務器? –

+0

只需確保您的Ejabberd配置中的stream_management爲true即可。 – Haven

+0

@Haven:感謝您的幫助,是否也可以通過流管理從接收客戶端發送ack到服務器? –