Является ли идентификатор устройства Android Android когда-либо измененным?

Я создаю GCM в своем приложении, и я хочу убедиться, что у меня нет дубликатов идентификаторов устройств.

Есть ли "лучшая практика" для работы с идентификаторами устройства? Моим оригиналом было то, что приложение загружало его gcm.register и отправляет идентификатор на мой сервер, и если ключ отсутствует в моей базе данных, я его сохраню, а затем, когда я отправляю уведомление, перебираю DB и отправьте сообщения.

Но мне интересно, изменился ли ID, я не хочу отправлять несколько сообщений на одно устройство.

Ответ 1

да, возможно, ID изменится. Если вы посмотрите учебник в SDK, каждый раз, когда приложение будет обновлено до новой версии, оно пойдет и получит новый идентификатор, потому что предыдущий идентификатор не гарантированно работает.

специально посмотрите на эту страницу

http://developer.android.com/google/gcm/client.html

 Check if app was updated; if so, it must clear the registration ID
 since the existing regID is not guaranteed to work with the new
 app version.

Ответ 2

Я прочитал 2 причины из здесь, когда вы можете зарегистрировать идентификатор регистрации GCM:

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

P.S: приведенная ниже справочная ссылка удалена с страницы Google.

В дополнение к @tyczj ответ на изменение ID при обновлении приложения Google говорит, что он также может автоматически обновлять идентификаторы. Если вы прочтете второй пункт под заголовком "Включить GCM" на странице Архитектурный обзор", в нем говорится:

Note that Google may periodically refresh the registration ID, so you should design your Android application with the understanding that the com.google.android.c2dm.intent.REGISTRATION intent may be called multiple times. Your Android application needs to be able to respond accordingly.

Просто добавьте информацию, которая для обработки этого случая должна иметь Broadcast Listener, которая может обрабатывать намерение com.google.android.c2dm.intent.REGISTRATION, которое Google отправляет в приложение, когда ему нужно обновить идентификатор регистрации. Широковещательный приемник будет иметь метод onReceive с Intent. С намерением вы можете получить Bundle, с помощью которого вы можете извлечь новый идентификатор регистрации из Google. Вы можете сохранить это и отправить его на сервер третьей части, чтобы заменить свой предыдущий зарегистрированный идентификатор для этого пользователя.

Ответ 3

Я думаю, было бы лучше, если бы вы могли подключиться к приложению и идентификатору, проверенному или обновленному при каждом входе в систему. У меня есть аналогичное приложение, и оно работает для меня.