送货回执请求不适用于XMPP Android(aSmack)

Bam*_*Bam 4 android chat xmpp asmack

我正在使用OpenFire和aSmack.

我似乎无法让DeliveryReceipts工作.

我创建连接时执行以下操作:

//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);
        }
});
Run Code Online (Sandbox Code Playgroud)

我正在使用以下方法向其他用户发送消息:

//send chat
Message msg = new Message(id, Message.Type.chat);
msg.setBody(chat);
DeliveryReceiptManager.addDeliveryReceiptRequest(msg);
connection.sendPacket(msg);
Run Code Online (Sandbox Code Playgroud)

尽管邮件与ReceiptRequest一起发送,但上述操作仍无效.尽管接收者收到消息,但听众不会在发送者端被解雇.(我通过调试确认它确实将DeliveryReceiptRequest确实附加到发送的消息上).

我还尝试使用(MessageTypeFilter(Message.Type.chat))在PacketListener中使用以下内容手动发送回收据:

Packet received = new Message();
received.addExtension(new DeliveryReceipt(packet.getPacketID()));
received.setTo(packet.getFrom());
getConnection().sendPacket(received);
Run Code Online (Sandbox Code Playgroud)

尽管如此,接收端的客户端仍然收到消息,但是监听器不会在发送者的系统中被解雇.我缺少什么?

Bam*_*Bam 10

在设置连接之前添加这些行,自动收据将与ReceiptReceivedListener一起使用.似乎默认情况下未注册DeliveryReceipt扩展.

ProviderManager.getInstance().addExtensionProvider(DeliveryReceipt.ELEMENT, DeliveryReceipt.NAMESPACE, new DeliveryReceipt.Provider());
ProviderManager.getInstance().addExtensionProvider(DeliveryReceiptRequest.ELEMENT, new DeliveryReceiptRequest().getNamespace(), new DeliveryReceiptRequest.Provider());
Run Code Online (Sandbox Code Playgroud)