Я знаю, что было задано много вопросов по этому поводу, и я некоторое время изучал, прежде чем сам задавать это, потому что каждый ответ, который я вижу (и даже их пример), основан на успешной отправке токена на сервер.
FirebaseInstanceIdService
устарел в пользу FirebaseMessagingService
, для использования метода onNewToken()
.
Я кеширую этот токен в своем приложении и отправляю его на внутренний сервер, планируя Job
, используя FirebaseJobDispatcher
.
Все хорошо, но я хочу обработать случай, когда мой кэш недействителен, желая снова получить токен и отправить его на сервер бэкэнда.
Поэтому я подумал, что это должно быть сделано в моем расширенном классе Application, используя FirebaseInstanceId.getInstance().getInstanceId()
с successListener
и проверяя, отличается ли значение моего кэшированного токена от значения instanceIdResult.getToken()
.
Проблема в том, что getInstanceId () также генерирует токен, если он не существует, в результате чего дважды вызывается отправка токена на внутренний сервер (один раз в successListener
, упомянутом выше, и другой в onNewToken()
в моем FirebaseMessagingService
расширенный класс), чего я хочу избежать.
Должен ли я сам справиться с этим, создав задачу по отправке токена и проверив, не запущен ли он, а затем запустится сам или что-то более чистое, что мне не хватает при использовании FCM Android SDK?