Intereting Posts
Gradle: assembleDebug занимает некоторое время, прежде чем загружать приложение Как скрыть клавиатуру после ввода в EditText в android? Функции Android JNI работают в основном потоке? Как Android может передавать локальное имя BLE, как в iOS? Ящик навигации, обращаясь к кнопке «Назад», чтобы перейти к предыдущим фрагментам? Изменить шрифт редактора Android Studio на Mac? Изменение размера предварительного просмотра камеры Android – Как вы имеете дело с 9774d56d682e549c? Android ID Воспроизводить звук каждые N миллисекунд Сопоставление между разрешениями Android (которые мы определяем в файле manisfest) на соответствующие вызовы / методы API Android-тесты с Jenkins на безголовой машине Могу ли я получить данные из общих настроек внутри службы? Просмотр локального веб-сервера на Mac с именем компьютера, а не IP-адресом SwipeyTabs – как создать Swipey Tabs с помощью библиотеки ActionBarSherlock? «Tel», «sms» и «mailto» больше не работают в Android после обновления до кордовы 3.6.3

GCM 3.0 Требуется обновить токен регистрации?

С последним обновлением GCM (3.0) все еще необходимо обрабатывать обновление токена регистрации во время таких ситуаций, как перезагрузка? В этой статье обсуждается вопрос о том, как сделать GCM надежным и охватывает несколько условий, в которых токен регистрации может измениться. Необходимы ли эти шаги в соответствии с последней версией? Во время беседы IO 2015 они говорили так, как будто токен регистрации был хорош, пока приложение не было удалено с устройства.

InstanceID instanceID = InstanceID.getInstance(this); String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); 

Solutions Collecting From Web of "GCM 3.0 Требуется обновить токен регистрации?"

Маркер регистрации не должен обновляться после перезагрузки, но есть и другие ситуации, когда он может обновиться, поэтому вам необходимо обработать его.

С обновленным API вам нужно реализовать InstanceIDListenerService, чтобы обрабатывать обновления токенов, как показано в примере приложения # android # gcm google-services #

  /** * Called if InstanceID token is updated. This may occur if the security of * the previous token had been compromised. This call is initiated by the * InstanceID provider. */ // [START refresh_token] @Override public void onTokenRefresh() { // Fetch updated Instance ID token and notify our app's server of any changes (if applicable). Intent intent = new Intent(this, RegistrationIntentService.class); startService(intent); } 

Что касается других ситуаций, когда может произойти обновление токена.

Существующий регистрационный токен может перестать действовать в ряде сценариев, в том числе:
– Если клиентское приложение отменяет регистрацию с помощью GCM.
– Если клиентское приложение автоматически не зарегистрировано, это может произойти, если пользователь удалит приложение. Например, в iOS, если служба обратной связи APNS сообщила токен APNS как недействительный.
– Если токен регистрации истекает (например, Google может решить обновить токены регистрации, или токен APNS истек для устройств iOS).
– Если клиентское приложение обновлено, но новая версия не настроена для приема сообщений.

Для всех этих случаев удалите этот регистрационный токен с сервера приложений и прекратите использовать его для отправки сообщений.

  • Согласно https://stackoverflow.com/a/16839326/313113 (начиная с EDIT 04.24.2014), кажется, что есть ошибка, когда пользователь обновляет приложение, и вы отправляете уведомление одновременно с обновлением, Токен становится незарегистрированным, поэтому вам нужно зарегистрироваться снова после обновления приложения. (Не уверен, что это все еще так)
  • Токен обновляется после операции резервного копирования / восстановления
  • Документация при сохранении состояния регистрации в Sync даже рекомендует периодически обновлять токены с сервера по соображениям безопасности:

Чтобы защитить клиентское приложение и сервер приложений от возможного вредоносного повторного использования регистрационных токенов, вы должны периодически инициировать обновление токена с сервера. Когда обновление маркера регистрации GCM инициируется со стороны сервера, клиентское приложение должно обрабатывать сообщение tokenRefreshed с регистрацией клиента / сервера регистрации GCM
См. Ссылку API для получения дополнительной информации о процедуре обновления идентичности и токена.

EDIT: ознакомьтесь с документами InstanceID, так как это показывает, как обрабатывать токены. https://developers.google.com/instance-id/ и https://developers.google.com/instance-id/guides/android-implementation

Его не очень понятно с сервера PoV imho.

Из https://developers.google.com/cloud-messaging/registration#keeping-the-registration-state-in-sync мы имеем

Чтобы защитить клиентское приложение и сервер приложений от возможного вредоносного повторного использования регистрационных токенов, вы должны периодически инициировать обновление токена с сервера. Когда обновление маркера регистрации GCM инициируется со стороны сервера, клиентское приложение должно обрабатывать сообщение tokenRefreshed с регистрацией клиента / сервера регистрации GCM. См. Ссылку API для получения дополнительной информации о процедуре обновления идентичности и токена.

Хмм, ссылки на ссылку API отсутствуют, поэтому, глядя на сервер api здесь https://developers.google.com/cloud-messaging/server-ref#interpret-downstream, у нас есть поле canonical_ids которое

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

И поле results которое имеет

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

На стороне клиента у нас есть новый https://developers.google.com/android/reference/com/google/android/gms/iid/InstanceIDListenerService.html#onTokenRefresh ()

Вызывается, когда система определяет, что токены необходимо обновить. Приложение должно вызывать getToken () и отправлять токены на все серверы приложений. Это не будет вызвано очень часто, оно необходимо для поворота ключа и обработки особых случаев. Система будет блокировать событие обновления на всех устройствах, чтобы избежать перегрузки серверов приложений с обновлениями токенов.

Итак, как вы инициируете обновление токена с сервера, это вне меня! Но в ответ на ваш вопрос – да, вам все равно нужно обрабатывать клиентскую ленту обновления токена!

EDIT: интересное чтение. Обработка изменений идентификатора регистрации в Google Cloud Messaging на Android.