Представьте, что пользователь устанавливает и открывает мое приложение. Токен регистрации FCM генерируется и отправляется на мой сервер. Позже скажем, что пользователь очищает данные моего приложения. Когда он затем откроет приложение, будет сгенерирован новый токен. Итак, поскольку у меня пока нет возможности узнать об этом, я отправляю уведомления как обычно и в старую Регистрацию. Сейчас же :
Будет ли FCM считать, что устройство отключено, и будет ли пытаться отправить уведомление до конца своего срока службы (по умолчанию 4 недели)?
Если нет, то через какое время он вернет ошибку «Не зарегистрирован токен регистрации»?
Верно, но будет ли эта ошибка возвращена мгновенно? Или он будет зависать, продолжать попытки в течение 4 недель (срок службы по умолчанию) и, наконец, объявить устройство недействительным, если к тому времени сообщение все еще не получено? Если это происходит мгновенно, как FCM может узнать, что ключ недействителен, когда данные моего приложения очищены, когда предположительно, весь механизм FCM не имел возможности объявить указанный токен недействительным (помните, что нет намерения, чтобы данные приложения были очищено).
Нет. Серверы FCM будут знать, что срок действия токена истек.
С №1 он немедленно отправит его обратно.
То, что может сбить с толку здесь, - это шаги, по которым вы на самом деле получите ошибку NotRegistered. Вот два возможных сценария:
Следующий из вашего сценария:
На устройстве установлено приложение. Токен генерируется и отправляется на ваш сервер.
Пользователь переходит в автономный режим и очищает данные приложения. Предыдущий токен теперь недействителен, но служба InstanceID еще не проинформирована об этом, поскольку устройство отключено.
Вы отправляете на токен push-уведомление. FCM считает этот токен действительным, отправляет вам ответ об успешном завершении и ставит сообщение в очередь, которое будет отправлено при первой возможности.
Здесь токен в настоящее время еще действителен. Таким образом, вы получите успешный ответ, как обычно.
Устройство переходит в онлайн. Служба InstanceID синхронизируется, сообщает ей, что старый токен недействителен, и запрашивает новый. Создается новый токен.
Всегда нужно помнить, что FCM работает как посредник. Надеюсь, это проясняет ситуацию. Ваше здоровье!
Итак, если данные очищаются, когда пользователь находится в сети, сервер FCM будет знать, что токен был отменен, даже если мое приложение еще не было запущено в первый раз (поскольку очистка данных аналогична удалению и повторной установке)?
AFAIK, да. Служба InstanceId, отвечающая за создание токена, привязана к задаче служб Google Play (которая почти всегда выполняется для большинства телефонов Android).
ответ от FCM будет указывать на ошибку с ключом, который вы использовали, в то время вы знаете, что он больше не действителен