2016-06-22 7 views
0
Openfire 4.0.2 
smack 4.1.7 
Android Studio 2.1.2 

私は、メッセージが送信されたことを知るために、DeliveryReceiptsを使用しようとしています。ただし、onReceiptReceivedは呼び出されません。 私は次のことを行っている:onReceiptReceivedは、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); 
      } 
     }); 

は、メッセージの送信:

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

をクライアントから受信するクライアント

<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> 

オン

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> 

を送りますは、クライアントがonReceiptReceivedイベントをトリガーするかもしれない、私は戻って送信するために考えていたメッセージを受信したときに受信するクライアントは、私がこのような何かをしようとしてい

メッセージを受け取った場合、私は知らないので扱われることはありません

私は手動で領収書を送信することにより、この問題を解決するために管理している任意の提案のための
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());         
    } 
} 

多くのおかげで、

答えて

0

。クライアントがどのようにメッセージを受信したら、私は手動で領収書を送付者に送り返しました。

 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(message))受信した領収書で私の場合でもこの条件は常にfalseです。すべての回避策?? – Moulesh

関連する問題