获取 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 中获取消息标签的 id?

使用 smack 从消息存档 openfire 中获取最新对话

如何从 Smack 4.1 中的实时消息中获取服务器时间戳

如何从 smack 中的消息 ID 获取消息。

如何使用 smack 和 openfire 获取 IOS 中每个聊天会话的最后一条消息?

XMPP XEP-0313 Smack Android 获取所有名册成员的最新消息