Delivery receipt requests not working for Android XMPP (aSmack)

I am using OpenFire with aSmack.

I can't seem to get DeliveryReceipts services to work.

I do the following when I create the connection:

//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);
        }
});

I am sending a message to another user using:

//send chat
Message msg = new Message(id, Message.Type.chat);
msg.setBody(chat);
DeliveryReceiptManager.addDeliveryReceiptRequest(msg);
connection.sendPacket(msg);

The above does not work, although the message is sent with ReceiptRequest. The listener does not start at the end of the sender, although the receiver receives the message. (I confirmed this with debugging that the DeliveryReceiptRequest application is really tied to the message being sent).

I also tried manually sending back the receipt using the following in my PacketListener (MessageTypeFilter (Message.Type.chat)):

Packet received = new Message();
received.addExtension(new DeliveryReceipt(packet.getPacketID()));
received.setTo(packet.getFrom());
getConnection().sendPacket(received);

, . - ?

+4
2

, , ReceiptReceivedListener. , DeliveryReceipt .

ProviderManager.getInstance().addExtensionProvider(DeliveryReceipt.ELEMENT, DeliveryReceipt.NAMESPACE, new DeliveryReceipt.Provider());
ProviderManager.getInstance().addExtensionProvider(DeliveryReceiptRequest.ELEMENT, new DeliveryReceiptRequest().getNamespace(), new DeliveryReceiptRequest.Provider());
+10

, NPE, , , : ProviderManager

  ProviderManager pm = ProviderManager.getInstance();
 pm.addExtensionProvider("x", "jabber:x:event",new MessageEventProvider()); 

MessageEventManager messageEventManager = new MessageEventManager(connection);
                        messageEventManager.addMessageEventNotificationListener(m_messageEventNotificationListener);
                        messageEventManager.addMessageEventRequestListener(m_DefaultMessageEventRequestListener);

/*
     * Notifies when message events happend
     * 
     */

    MessageEventNotificationListener m_messageEventNotificationListener = new MessageEventNotificationListener() {

        @Override
        public void deliveredNotification(String fromJID, String messageID) {
            final String _messageID =messageID;
            System.out.println("deliveredNotification");
            UiUtility.printMe("Message("+messageID+") Was Delivered to "+fromJID);
//WRITE YOUR CUSTOM METHOD WHEN MSG DELIVERED NOTFICATIONN RECIEVED.
        }

        @Override
        public void displayedNotification(String string, String string1) {

        }

        @Override
        public void composingNotification(String string, String string1) {


        }

        @Override
        public void offlineNotification(String string, String string1) {


        }

        @Override
        public void cancelledNotification(String string, String string1) {


        }

    };

    /*
     * Send a request when message events occured
     */

    DefaultMessageEventRequestListener m_DefaultMessageEventRequestListener = new DefaultMessageEventRequestListener() {

        @Override
        public void deliveredNotificationRequested(String from, String packetID, MessageEventManager messageEventManager) {
            super.deliveredNotificationRequested(from, packetID, messageEventManager); //To change body of generated methods, choose Tools | Templates.

        }


        @Override
        public void displayedNotificationRequested(String from, String packetID, MessageEventManager messageEventManager) {
            super.displayedNotificationRequested(from, packetID, messageEventManager); //To change body of generated methods, choose Tools | Templates.

        }

        @Override
        public void offlineNotificationRequested(String from, String packetID, MessageEventManager messageEventManager) {
            super.offlineNotificationRequested(from, packetID, messageEventManager); //To change body of generated methods, choose Tools | Templates.

        }

        @Override
        public void composingNotificationRequested(String from, String packetID, MessageEventManager messageEventManager) {
            super.composingNotificationRequested(from, packetID, messageEventManager); //To change body of generated methods, choose Tools | Templates.

        }


    };
0

Source: https://habr.com/ru/post/1524508/


All Articles