Не получено уведомление при обновлении токена устройства в фоновом режиме

Я реализовал GCM в своем проекте, используя рекомендации https://developers.google.com/.

Шаги, которые я должен предпринять:

  1. Для получения токена устройства:

    -> Класс GCMRegistrationIntentService который расширяется IntentService и это началось с моей основной деятельности.

    -> В этом сервисе я использовал:

    InstanceID instanceID = InstanceID.getInstance(getApplicationContext());
    token = instanceID.getToken(AppConstants.SENDER_ID, GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
    

    Я получил токен успешно.

  2. LocalBroadcastListener в моей основной деятельности, чтобы получить токен, сгенерированный на шаге 1, и сохранить его в общих настройках (также отправить его на мой сервер сообщений).

  3. Учебный класс GCMTokenRefreshListenerService который расширяется InstanceIDListenerService получить токен в случае истечения срока действия старого.

    -> В этом я позвонил GCMRegistrationIntentService в onTokenRefresh()

Теперь мои вопросы:

  1. В каком случае вызывается GCMTokenRefreshListenerService?
  2. Что такое instanceID? Что такое жизненный цикл instanceID?
  3. Я запустил сервис из терминала, используя:

    ./adb shell am startservice -a com.google.android.gms.iid.InstanceID --es "CMD" "RST" -n package.name/service.name.
    

    Который каждый раз давал мне новый токен. Как сохранить этот новый сгенерированный токен в общих настройках?

  4. Когда я получаю новый токен от этого сервиса, я не получаю уведомления, так как мой токен изменен. Мне придется открыть свое приложение, чтобы обновить токен. Как обновить этот токен?

  5. Должен ли я вызывать GCM каждый раз, когда мое приложение открывается, чтобы получить токен?

1 ответ

  1. Вам не нужно звонить GCMTokenRefreshListenerService он вызывается автоматически системой Android всякий раз, когда ваш токен обновляется.

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

  3. Во-первых, вам не нужно запускать свой сервис, как я уже говорил ранее, он будет вызываться автоматически каждый раз, когда обновляется ваш токен. Чтобы отправить токен на ваш сервер, вы должны позвонить в отдельную службу, скажем RegistrationService, Чтобы сохранить токен в вашем SharedPreference Вы можете сделать это из вашего RegistrationService как только вы получили свой токен.

  4. Вы не будете получать уведомления в своем GcmListenerService эта услуга вызывается только в том случае, если ваш сервер отправил вам некоторые данные посредством push-уведомления. Всякий раз, когда ваш токен изменяется или обновляется, вы получаете звонок в свой onTokenRefresh() метод. Затем вы должны сообщить своему серверу об этом новом токене, чтобы правильно получать уведомления, используя RegistrationService, И вам не нужно открывать свое приложение, чтобы получить обновленный токен.

  5. Нет, вам не нужно звонить или запускать какой-либо сервис, необходимый для push-уведомлений, вы просто должны правильно указать сервис в своем манифесте, все остальное будет обрабатываться системой Android