我試圖讓使用XMPP聊天應用。爲此,我提到了this tutorial併成功實施了它。但現在我無法獲得服務器收到的特定消息並更新我的本地數據庫。請給我任何想法如何做到這一點。的Android咂嘴服務器收到ACK
我節省與chatId的消息。那麼,從哪種方法得到這個收據消息ID?
我試圖讓使用XMPP聊天應用。爲此,我提到了this tutorial併成功實施了它。但現在我無法獲得服務器收到的特定消息並更新我的本地數據庫。請給我任何想法如何做到這一點。的Android咂嘴服務器收到ACK
我節省與chatId的消息。那麼,從哪種方法得到這個收據消息ID?
connection.setUseStreamManagement(true);
這將啓用客戶端流管理(XEP-198)。
http://xmpp.org/extensions/xep-0198.html#acking
注意:如果服務器支持XEP-198它只會工作。
您必須啓用stream management。
static {
XMPPTCPConnection.setUseStreamManagementDefault(true);
XMPPTCPConnection.setUseStreamManagementResumptiodDefault(true);
}
,你添加一個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()),並更新狀態。
請留意您的服務器的需求,使流管理了。
什麼叫這個「請大家注意,您的服務器的需求,使流管理了。」的意思。在我的情況下,我使用ejabberd服務器? –
只需確保您的Ejabberd配置中的stream_management爲true即可。 – Haven
@Haven:感謝您的幫助,是否也可以通過流管理從接收客戶端發送ack到服務器? –