我正在使用 OpenFire 和 aSmack。
我似乎无法让“送货收据”正常工作。
创建连接时我执行以下操作:
//create connection
connection.login(username, password);
DeliveryReceiptManager.getInstanceFor(connection).enableAutoReceipts();
DeliveryReceiptManager.getInstanceFor(connection).addReceiptReceivedListener(new ReceiptReceivedListener()
{
@Override
public void onReceiptReceived(String arg0, String arg1, String arg2)
{
Log.v("app", arg0 + ", " + arg1 + ", " + arg2);
}
});
我正在使用以下方式向另一个用户发送消息:
//send chat
Message msg = new Message(id, Message.Type.chat);
msg.setBody(chat);
DeliveryReceiptManager.addDeliveryReceiptRequest(msg);
connection.sendPacket(msg);
尽管消息是通过 ReceiptRequest 发送的,但上面的方法不起作用。尽管接收者收到了消息,但侦听器不会在发送者端被触发。 (我通过调试确认 DeliveryReceiptRequest 确实附加到发送的消息中)。
我还尝试在我的 PacketListener 中使用以下内容(MessageTypeFilter(Message.Type.chat)) 手动发回收据:
Packet received = new Message();
received.addExtension(new DeliveryReceipt(packet.getPacketID()));
received.setTo(packet.getFrom());
getConnection().sendPacket(received);
尽管如此,接收端的客户端仍然可以正常接收消息,但侦听器不会在发送者的系统中被触发。我缺少什么吗?