InstanceID, что если мне не удастся отправить токен на мой сервер?
Я создал сервер push-уведомлений (PNS) с помощью Google Cloud Messaging (GCM). При такой архитектуре мой сервер должен знать токен, связанный с пользователем, чтобы отправлять ему push-уведомления.
Я расширил класс InstanceIDListenerService
который правильно уведомляется при обновлении токена (я проверял его с помощью adb). Когда его метод onTokenRefresh()
называется, я беру новый токен, и пока все в порядке.
Моя проблема заключается в следующем: что если мне не удастся отправить этот новый токен на мой сервер? (ошибка сети, отсутствие соединения, внезапное отключение устройства или что-то еще...). Нужно ли где-то хранить (предпочтения?), Что сервер не знает мой новый токен, и при возможности повторить попытку? Есть ли способ позволить ОС выполнить эту операцию?
2 ответа
Вы можете использовать GCM NetworkManager, чтобы ставить в очередь, планировать, проверять сетевые подключения и..., он очень надежный и полезный, он выполняет все ваши задачи.
Также вы должны сохранить свой токен там, где находится ваше устройство, может быть в ваших общих настройках, пока вы не убедитесь, что ваш сервер его получит. Обратите внимание, что если вы хотите использовать другие функции GCM, такие как обмен сообщениями по темам, вы должны сохранить и использовать токен для всех регистраций тем.
Ваше приложение (при запуске) должно всегда проверять, был ли токен отправлен на сервер. Когда вызывается onTokenRefresh, вы должны сгенерировать и отправить новый токен на сервер. Если отправка токена на сервер не удалась, то в следующий раз, когда ваше приложение запустится, оно должно повторить попытку.
Вы правы в том, что если вам не удастся отправить токен на сервер onTokenRefresh, ваше приложение не будет получать уведомления до тех пор, пока оно не будет запущено, и успешно отправит токен на сервер.
Также обратите внимание, что обновление токена не должно происходить регулярно. Это должно происходить, например, только когда приложение удаляется и переустанавливается или токен больше не считается безопасным.