2016-06-02 2 views
0

Мне нужно знать, есть ли у меня идентификатор экземпляра, когда мой пользователь входит в приложение детерминированным образом. Есть ли другой способ узнать, кроме , попробовав, чтобы получить идентификатор экземпляра и обработать возможное исключение? - Этот подход склонен к сбою, поскольку в документации упоминается исключение IOException, которое может быть вызвано из-за сетевого исключения или некоторой другой ошибки ввода-вывода.Как узнать, зарегистрировано ли у моего приложения идентификатор экземпляра/зарегистрировано в GCM?

Я отслеживаю значение самостоятельно с помощью SharedPreferences, но это кажется немного непостоянным, поскольку приложение не может быть использовано в течение некоторого времени, и значение может выйти из синхронизации.

ответ

0

Приложение Android, работающее на мобильном устройстве, регистрируется для приема сообщений, вызывая регистр методов Google Cloud Messaging. Этот метод регистрирует приложение для GCM и возвращает его идентификатор регистрации.

Основываясь на этом Demo App, они обновляют регистрационный идентификатор, устанавливая дату истечения срока действия на значение, сохраняемое локально приложением. они загружают свой локально сохраненный идентификатор регистрации. Если это expired, то они звонят gcm.register().

Это не относится к гипотетическому сценарию, в котором идентификатор регистрации обновляется Google для приложения, которое не было запущено в течение длительного времени.

Ваше приложение может запросить маркеры из службы идентификации экземпляра по мере необходимости с помощью метода getToken() и, например, InstanceID, ваше приложение также может хранить токены на вашем собственном сервере. Все жетоны, выпущенные для вашего приложения, относятся к экземпляру InstanceID приложения.

Токены уникальны и безопасны, но вашему приложению или службе идентификатора экземпляра может потребоваться обновить токены в случае возникновения проблемы с безопасностью или когда пользователь удаляет и восстанавливает ваше приложение во время восстановления устройства. Ваше приложение должно выполнить прослушиватель, чтобы отвечать на запросы обновления токена из службы экземпляра.

Вы можете проверить эту документацию о том, как сделать надлежащее выполнение:

Вот родственный SO билет, обсудить, как проверить, если устройство зарегистрирован:

0

При использовании InstanceID вызова getToken, чтобы получить маркер из локального кэша (в Google Play услуги), если он уже существует, или сделать вызов сети, чтобы получить новый маркер. Поэтому, если ваше приложение уже имеет токен, тогда вызов getToken должен немедленно возвращаться, так как это локальный вызов. Если вы получаете IOException, это явный сигнал, что ваше приложение в настоящее время не имеет токена.

Другим вариантом, который вы должны рассмотреть, является использование новой клиентской библиотеки FCM. Он обрабатывает токен, запрашивающий и обновляющий для вас, так что вам нужно всего лишь позвонить FirebaseInstanceId.getToken(), который вернет токен, если он существует, или null, если этого не произойдет.

Смежные вопросы