0
votes

I am on last Steps of my Chat app, i'm trying to receive Notification whenever Messages are Delivered, so i found this implementation:

 MessageEventRequestListener

which comes with 4 overrides:

 @Override
public void deliveredNotificationRequested(String from, String packetID,
    MessageEventManager messageEventManager) {
System.out.println("delievered");

}


@Override
public void displayedNotificationRequested(String from, String packetID,
    MessageEventManager messageEventManager) {
System.out.println("displaydelievered");

}


@Override
public void composingNotificationRequested(String from, String packetID,
    MessageEventManager messageEventManager) {
System.out.println("composingdelievered");

}


@Override
public void offlineNotificationRequested(String from, String packetID,
    MessageEventManager messageEventManager) {
System.out.println("offlinedelievered");

}

but when a message is sent, nothing happened, i'm wondering am i missing any thing? is this the right approach ? thanks

5

5 Answers

3
votes

As @Flow said,XEP-22: Message events is deprecated.You can use DeliveryReceiptManager.

The listener invoked when message received at receiver side

  DeliveryReceiptManager.getInstanceFor(connection).addReceiptReceivedListener(new ReceiptReceivedListener()
     {
 @Override
        public void onReceiptReceived(String arg0, String arg1, String arg2) {
            Log.i("Message Delivered  To=", arg0 + ", From =  " + arg1 + " , ID= " + arg2);
        }
    });
}

while sending message add following code

  //add delivery receipt request

    DeliveryReceiptManager.addDeliveryReceiptRequest(Message);

In PacketListener add following code

Packet received = new Message();

received.addExtension(new DeliveryReceipt(packet.getPacketID())); 

received.setTo(packet.getFrom());

connection.sendPacket(received);
1
votes

First add these to your configuration-

DeliveryReceiptManager.setDefaultAutoReceiptMode(DeliveryReceiptManager.AutoReceiptMode.always);
ProviderManager.addExtensionProvider(DeliveryReceipt.ELEMENT, DeliveryReceipt.NAMESPACE, new DeliveryReceipt.Provider());
ProviderManager.addExtensionProvider(DeliveryReceiptRequest.ELEMENT, DeliveryReceipt.NAMESPACE, new DeliveryReceiptRequest.Provider());

Then after XMPPTcpConnection established add these-

DeliveryReceiptManager deliveryReceiptManager = DeliveryReceiptManager.getInstanceFor(this.connection);
deliveryReceiptManager.setAutoReceiptMode(DeliveryReceiptManager.AutoReceiptMode.always);
deliveryReceiptManager.autoAddDeliveryReceiptRequests();

This will enable delivery receipt for all messages.

SENT:
<iq to='chat_host' id='o2huU-440' type='get'><query xmlns='http://jabber.org/protocol/disco#info'></query></iq>

RECV:
<iq from='chat_host'id='o2huU-440' to='userJID'type='result'><query xmlns='http://jabber.org/protocol/disco#info'> <feature var='urn:xmpp:receipts'/></query>

For auto receipt mode all message will be sent with a receipt request extension. And you will get delivery receipt for all messages.

0
votes

For each message you send, you may send notifications requests with :



   MessageEventManager.addNotificationsRequests(message,
                                true, true, true, true);

0
votes

use this code where you get packet of message. //checking is deliverd or not.

if(msg.getBody().toString().equalsIgnoreCase("RecivedByReciver")){

//do what you want after get notify. 

}else{
//do what you want if not delevery report message.
Message message=new Message(ConnectionManager.parseBareAddress(msg.getFrom()),Message.Type.chat);
message.addBody(null,"RecivedByReciver");
Connection().sendPacket(message);

}