Ответ 1
Регистрационный токен не должен обновляться после перезагрузки, но есть и другие ситуации, когда он может обновиться, поэтому вам нужно обработать его.
С обновленным API вам необходимо реализовать InstanceIDListenerService, чтобы обрабатывать обновления токенов, как показано в google-services # android # gcm Пример приложения
/**
* 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 server of any changes (if applicable).
Intent intent = new Intent(this, RegistrationIntentService.class);
startService(intent);
}
Относительно других ситуаций, когда может произойти обновление токена.
- Отметьте https://developers.google.com/cloud-messaging/server-ref#error-codes , Незарегистрированное описание ошибки устройства:
Существующий регистрационный токен может перестать быть действительным в ряде сценариев, в том числе:
- Если клиентское приложение отменяет регистрацию с помощью GCM.
- Если клиентское приложение автоматически не зарегистрировано, это может произойти, если пользователь удалит приложение. Например, на iOS, если APNS Служба отзывов сообщила, что токен APNS недействителен.
- Если токен регистрации истекает (например, Google может решить обновить токены регистрации, или токен APNS истек для iOS устройства).
- Если клиентское приложение обновлено, но новая версия не настроена для приема сообщений.Для всех этих случаев удалите этот регистрационный токен из приложения сервера и прекратить использовать его для отправки сообщений.
- В соответствии с fooobar.com/questions/72598/... (начиная с EDIT 04.24.2014) кажется, что есть ошибка, когда пользователь обновляет приложение, и вы отправляете уведомление в то же самое время время, когда происходит обновление, токен становится незарегистрированным, поэтому вам нужно зарегистрироваться снова после обновления приложения. (не уверен, что это все еще так)
- Ток обновляется после операции резервного копирования/восстановления
- Документация на Сохранение состояния регистрации при синхронизации рекомендует даже периодически обновлять токены с сервера из соображений безопасности:
Чтобы защитить клиентское приложение и сервер приложений от потенциальных вредоносных повторное использование регистрационных токенов, вы должны периодически инициировать токен обновить с сервера. Когда обновление токена регистрации GCM инициированное с сервера, клиентское приложение должно обрабатывать tokenRefreshed сообщение с клиентом/сервером регистрации GCM рукопожатие
См. Ссылку API для получения дополнительной информации о процедуре обновления идентичности и токена.