我正在尝试使用XMPP制作聊天应用程序。为此,我提到this tutorial并成功实施了它。但现在我无法获得服务器收到的特定消息并更新我的本地数据库。请告诉我如何做到这一点。
我用chatId保存邮件。那么从哪个方法获取此收据消息ID?
答案 0 :(得分:13)
您必须启用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(packet)方法中,您可以通过id(packet.getStanzaId())在数据库中找到消息,并从" pending"更新状态。发送"发送"。
请注意您的服务器也需要启用流管理。
答案 1 :(得分:2)
connection.setUseStreamManagement(true);
它将在客户端启用流管理(XEP-198)。
http://xmpp.org/extensions/xep-0198.html#acking
注意:只有服务器支持XEP-198才能使用。