Получение нескольких уведомлений nack для незарегистрированных устройств Android от FCM | Java

#java #android #spring-boot #push-notification #firebase-cloud-messaging

#java #Android #весенняя загрузка #push-уведомление #firebase-облако-обмен сообщениями

Вопрос:

Мы поддерживаем таблицу в MySQL всех идентификаторов gcmid, на которые мы отправляем уведомления. Со временем срок действия некоторых из них может истечь, поскольку пользователь может удалить приложение или перегрузить его другой версией. Однако, возможно, срок его действия истек, когда мы пытаемся отправить push-уведомление на эти устройства, FCM отвечает сообщением «nack» с DEVICE_UNREGISTERED или аналогичным кодом ошибки. Используя эту информацию, я удаляю этот gcmid из нашей базы данных.

Но проблема в том, что я получаю гораздо больше уведомлений для каждого message_id. Я добавил SyncStanzaListener к XMPP-соединению, которое прослушивает и передает моей службе, если это сообщение nack. И в результате этого процессор загружается, потому что приходится обрабатывать кучу сообщений. Из-за этого на рабочем компьютере произошел сбой.

Я также попытался отправить сообщение «ack» на этот конкретный gcmid и идентификатор сообщения, подтверждающий, что я его получил. Я все еще получаю одно и то же сообщение снова и снова.

Есть идеи?

Я попытался сохранить все идентификаторы сообщений в redis с ttl. Но дело в том, что я не должен получать столько подтверждений для определенного gcmid с истекшим сроком действия, который тоже с тем же идентификатором сообщения?! Иногда я получаю до 30 подтверждений с одним и тем же идентификатором сообщения.