onReceiptReceived 永远不会为 DelieveryReceipts 处理
onReceiptReceived is never handled for DelieveryReceipts
Openfire 4.0.2
smack 4.1.7
Android Studio 2.1.2
我正在尝试使用 DeliveryReceipts 以便我知道邮件已发送。但是,onReceiptReceived
永远不会被调用。
我做了以下事情:
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);
从客户端发送
SENT (0): <message to='97.steve@xmpp1.call-genie.com' id='6xS4w-43' type='chat'><body>hello</body><thread>32091ad3-8da9-4758-9656-c06eb72532a2</thread><request xmlns='urn:xmpp:receipts'/></message>
在接收客户端上
<message to='97.steve@xmpp1.call-genie.com' id='6xS4w-43' type='chat'><body>hello</body><thread>32091ad3-8da9-4758-9656-c06eb72532a2</thread><request xmlns='urn:xmpp:receipts'/></message>
onReceiptReceived
从未被处理所以我不知道接收客户端是否收到消息
当客户端收到我想发回的消息时,我尝试做这样的事情,这可能会触发 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());
}
}
非常感谢您的任何建议,
我已经通过手动发送收据解决了这个问题。当客户怎么收到消息我已经手动将回执发回给发件人
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());
}
}
......
@Moulesh 以后你可能已经明白了。
DeliveryReceiptManager.hasDeliveryReceiptRequest(message) 仅当您调用 DeliveryReceiptRequest.addTo(message) 时才会为真;在 chat.sendMessage(message).
之后
Openfire 4.0.2
smack 4.1.7
Android Studio 2.1.2
我正在尝试使用 DeliveryReceipts 以便我知道邮件已发送。但是,onReceiptReceived
永远不会被调用。
我做了以下事情:
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);
从客户端发送
SENT (0): <message to='97.steve@xmpp1.call-genie.com' id='6xS4w-43' type='chat'><body>hello</body><thread>32091ad3-8da9-4758-9656-c06eb72532a2</thread><request xmlns='urn:xmpp:receipts'/></message>
在接收客户端上
<message to='97.steve@xmpp1.call-genie.com' id='6xS4w-43' type='chat'><body>hello</body><thread>32091ad3-8da9-4758-9656-c06eb72532a2</thread><request xmlns='urn:xmpp:receipts'/></message>
onReceiptReceived
从未被处理所以我不知道接收客户端是否收到消息
当客户端收到我想发回的消息时,我尝试做这样的事情,这可能会触发 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());
}
}
非常感谢您的任何建议,
我已经通过手动发送收据解决了这个问题。当客户怎么收到消息我已经手动将回执发回给发件人
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());
}
}
......
@Moulesh 以后你可能已经明白了。
DeliveryReceiptManager.hasDeliveryReceiptRequest(message) 仅当您调用 DeliveryReceiptRequest.addTo(message) 时才会为真;在 chat.sendMessage(message).