Вы можете использовать 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 при получении квитанции.