prem nath
prem nath

Reputation: 75

how to get delivery status of message in smack or in xmpp from android

This is my code and i am sending my message in this method but not able to get delivery message in DeliveryReceipt

    newChat.sendMessage(message);
            newChat.getListeners();
            newChat.addMessageListener(new ChatMessageListener() {
                @Override
                public void processMessage(Chat chat, Message message) {
                    Log.d(TAG,"DeliveryReceipt3:"+"1:"+message.getThread()+"2:"+chat.getThreadID()+"3:"+message.getBody());
                }
            });

the above code is for sending message and below code is for getting DeliveryReceipt

   Message m = new Message();
                m.setType(Message.Type.chat);
                m.setFrom(connection.getUser());
                m.setTo(agentId);
                m.addExtension(new DeliveryReceipt(m.getPacketID()));

                DeliveryReceipt dr = (DeliveryReceipt)m.getExtension(DeliveryReceipt.ELEMENT, DeliveryReceipt.NAMESPACE);
                Log.d(TAG,"DeliveryReceipt1: "+"1:"+dr.getElementName()+"2:"+dr.getId()+"3:"+dr.getNamespace()+"4:"+dr.toXML()+"4:"+dr.toString());
                Log.d(TAG,"DeliveryReceipt2: "+"1:"+m.getBody()+"2:"+m.getStanzaId()+"3:"+m.getThread());

Upvotes: 2

Views: 2110

Answers (2)

Barno
Barno

Reputation: 786

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.

Upvotes: 1

Santosh Joshi
Santosh Joshi

Reputation: 3320

you need to add DeliveryReceiptManager after you successfully logs in

DeliveryReceiptManager dm = DeliveryReceiptManager.getInstanceFor(connection);
                    dm.setAutoReceiptMode(AutoReceiptMode.always);
                    dm.autoAddDeliveryReceiptRequests();
                    dm.addReceiptReceivedListener(new ReceiptReceivedListener() {

                    @Override
                    public void onReceiptReceived(Jid fromJid, Jid toJid, 
                      final String receiptId, Stanza receipt) {
                             // handle delivery receipt here
                            }
                      });

Upvotes: 2

Related Questions