Получить статус доставки последних сообщений в smack

Я новичок в smack 4.2.4 и xmpp. Я отправил кучу сообщений, но получатель недоступен для их получения, я закрыл приложение и в следующий раз, когда я открою приложение, хочу проверить статус сообщений, доставлено или нет.

2
0
649
1

Ответы 1

Вы можете использовать XEP-0184: квитанции о доставке сообщений для проверки доставки сообщений адресату. Сначала вы должны добавить зависимость smack-extension от 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
    }
});

Учтите, что когда вы отправляете сообщение, случайный уникальный идентификатор строфы (sid) будет настроен на вашу строфу. вы должны сохранить его в строке сообщения в базе данных, тогда вы сможете идентифицировать это с помощью этого sid при получении квитанции.

Другие вопросы по теме