获取 smack 中最近消息的传递状态
Posted
技术标签:
【中文标题】获取 smack 中最近消息的传递状态【英文标题】:get delivery status of recent messages in smack 【发布时间】:2018-07-11 13:29:55 【问题描述】:我是 smack 4.2.4 和 xmpp 的新手。我已经发送了一堆消息,但是recipent无法获取它们,我已经关闭了应用程序,下次我打开应用程序时想检查消息的状态,是否已发送。
【问题讨论】:
【参考方案1】:您可以使用XEP-0184: Message Delivery Receipts 来检查邮件是否已送达目的地。首先你必须添加 smack-extensions 的 gradle 依赖:
implementation 'org.igniterealtime.smack:smack-extensions:4.2.2;
然后使用此代码,当您要发送消息时,将接收请求添加到节:
DeliveryReceiptRequest.addTo(message);
然后你可以像这样在监听器中接收交付状态:
DeliveryReceiptManager d = DeliveryReceiptManager.getInstanceFor(connection);
d.addReceiptReceivedListener(new ReceiptReceivedListener()
@Override
public void onReceiptReceived(Jid fromJid, Jid toJid, String receiptId, Stanza receipt)
Log.i("delivery", "for: " + receiptId + " received");
//here you can use sid or receiptId to identify which message is delivered
);
请考虑,当您发送消息时,一个随机的唯一节 id (sid) 将设置为您的节。您必须将其保存在数据库中的消息行中,然后您可以在收到收据时使用此 sid 进行识别。
【讨论】:
以上是关于获取 smack 中最近消息的传递状态的主要内容,如果未能解决你的问题,请参考以下文章
使用 smack 从消息存档 openfire 中获取最新对话