2016-06-22 7 views
0

Ich versuche, DeliveryReceipts zu verwenden, damit ich weiß, dass die Nachricht gesendet wurde. onReceiptReceived wird jedoch nie aufgerufen. Ich habe folgendes getan:onReceiptReceivts wird nie behandelt für DelieveryReceipts

DeliveryReceiptManager deliveryReceiptManager = DeliveryReceiptManager.getInstanceFor(mClientConnection); 
     deliveryReceiptManager.autoAddDeliveryReceiptRequests(); 
     DeliveryReceiptManager.setDefaultAutoReceiptMode(DeliveryReceiptManager.AutoReceiptMode.always); 

     deliveryReceiptManager.addReceiptReceivedListener(new ReceiptReceivedListener() { 
      @Override 
      public void onReceiptReceived(String fromJid, String toJid, String receiptId, Stanza receipt) { 
       log.log(Level.INFO, "OnReceiptReceived fromJid: " + fromJid + " toJid: " + toJid + " receiptId: " + receiptId); 
      } 
     }); 

die Nachricht gesendet:

ChatManager chatManager = ChatManager.getInstanceFor(mClientConnection); 
Message msg = new Message(username, Message.Type.chat); 
msg.setBody(message); 
final String msgReceipt = DeliveryReceiptRequest.addTo(msg); 
log.log(Level.INFO, "msgReceiptRequest: " + msgReceipt);   
Chat chat = chatManager.createChat(username, mChatMessageListener); 
chat.sendMessage(message); 

vom Client senden

SENT (0): <message to='[email protected]' id='6xS4w-43' type='chat'><body>hello</body><thread>32091ad3-8da9-4758-9656-c06eb72532a2</thread><request xmlns='urn:xmpp:receipts'/></message> 

Auf dem empfangenden Client

<message to='[email protected]' id='6xS4w-43' type='chat'><body>hello</body><thread>32091ad3-8da9-4758-9656-c06eb72532a2</thread><request xmlns='urn:xmpp:receipts'/></message> 

onReceiptReceived wird nie so behandelt, weiß ich nicht, wenn der empfangende Client die Nachricht erhalten

habe ich versucht, so etwas zu tun, wenn der Client die Nachricht empfängt, die ich dachte zurück zu senden, die die onReceiptReceived Ereignis auslösen könnte

chat.addMessageListener(new ChatMessageListener() { 
    @Override 
    public void processMessage(Chat chat, Message msg) { 
     if(!msg.getBody().isEmpty()) { 
      Message ms = new Message(); 
      ms.addBody("EN", "delivered"); 
      ms.setTo(msg.getFrom()); 
      ms.setStanzaId(msg.getStanzaId()); 
      DeliveryReceiptRequest.addTo(ms); 
      mClientConnection.sendStanza(ms); 
     } 
     log.log(Level.INFO, "receiveChatMessages Received prompted message: " + msg.getBody());         
    } 
} 

Vielen dank für Ihre Anregungen,

Antwort

0

ich es geschafft haben, das Senden des Eingangs manuell zu lösen. Wenn der Kunde die Nachricht erhalten hat, habe ich die Quittung manuell an den Absender zurückgeschickt.

 mChatMessageListener = new ChatMessageListener() { 
      @Override 
      public void processMessage(Chat chat, Message message) { 
       log.log(Level.INFO, "Received message: " + message.getBody() + " from: " + chat.getParticipant()); 
       if(message != null || !message.getBody().isEmpty()) { 
        DeliveryReceiptManager deliveryReceiptManager = DeliveryReceiptManager.getInstanceFor(mClientConnection); 
        if(DeliveryReceiptManager.hasDeliveryReceiptRequest(message)) { 
         log.log(Level.INFO, "hasDeliveryReceiptRequest == true"); 

         Stanza received = new Message(); 
         received.addExtension(new DeliveryReceipt(message.getStanzaId())); 
         received.setTo(message.getFrom()); 
         try { 
          mClientConnection.sendStanza(received); 
         } 
         catch(NotConnectedException ex) { 
          log.log(Level.SEVERE, "NotConnectedException: " + ex.getMessage()); 
         } 
         catch(Exception ex) { 
          log.log(Level.SEVERE, "Exception: " + ex.getMessage()); 
         } 
        } 
...... 
+0

if (DeliveryReceiptManager.hasDeliveryReceiptRequest (Nachricht)) diese Bedingung auch in meinem Fall beim Empfang immer falsch ist nie erhalten ausgelöst wird .. alle Abhilfen ?? – Moulesh