Не получено уведомление при обновлении токена устройства в фоновом режиме
Я реализовал GCM в своем проекте, используя рекомендации https://developers.google.com/.
Шаги, которые я должен предпринять:
Для получения токена устройства:
-> Класс
GCMRegistrationIntentService
который расширяетсяIntentService
и это началось с моей основной деятельности.-> В этом сервисе я использовал:
InstanceID instanceID = InstanceID.getInstance(getApplicationContext()); token = instanceID.getToken(AppConstants.SENDER_ID, GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
Я получил токен успешно.
LocalBroadcastListener в моей основной деятельности, чтобы получить токен, сгенерированный на шаге 1, и сохранить его в общих настройках (также отправить его на мой сервер сообщений).
Учебный класс
GCMTokenRefreshListenerService
который расширяетсяInstanceIDListenerService
получить токен в случае истечения срока действия старого.-> В этом я позвонил
GCMRegistrationIntentService
вonTokenRefresh()
Теперь мои вопросы:
- В каком случае вызывается GCMTokenRefreshListenerService?
- Что такое instanceID? Что такое жизненный цикл instanceID?
Я запустил сервис из терминала, используя:
./adb shell am startservice -a com.google.android.gms.iid.InstanceID --es "CMD" "RST" -n package.name/service.name.
Который каждый раз давал мне новый токен. Как сохранить этот новый сгенерированный токен в общих настройках?
Когда я получаю новый токен от этого сервиса, я не получаю уведомления, так как мой токен изменен. Мне придется открыть свое приложение, чтобы обновить токен. Как обновить этот токен?
- Должен ли я вызывать GCM каждый раз, когда мое приложение открывается, чтобы получить токен?
1 ответ
Вам не нужно звонить
GCMTokenRefreshListenerService
он вызывается автоматически системой Android всякий раз, когда ваш токен обновляется.ID экземпляра предоставляет уникальный идентификатор для каждого экземпляра ваших приложений. Вы можете найти больше об этом здесь.
Во-первых, вам не нужно запускать свой сервис, как я уже говорил ранее, он будет вызываться автоматически каждый раз, когда обновляется ваш токен. Чтобы отправить токен на ваш сервер, вы должны позвонить в отдельную службу, скажем
RegistrationService
, Чтобы сохранить токен в вашемSharedPreference
Вы можете сделать это из вашегоRegistrationService
как только вы получили свой токен.Вы не будете получать уведомления в своем
GcmListenerService
эта услуга вызывается только в том случае, если ваш сервер отправил вам некоторые данные посредством push-уведомления. Всякий раз, когда ваш токен изменяется или обновляется, вы получаете звонок в свойonTokenRefresh()
метод. Затем вы должны сообщить своему серверу об этом новом токене, чтобы правильно получать уведомления, используяRegistrationService
, И вам не нужно открывать свое приложение, чтобы получить обновленный токен.Нет, вам не нужно звонить или запускать какой-либо сервис, необходимый для push-уведомлений, вы просто должны правильно указать сервис в своем манифесте, все остальное будет обрабатываться системой Android