Це цікаве питання.
Google рекомендує вам перейти на новий процес реєстрації:
Додаток Android, що працює на мобільному пристрої, реєструється для отримання повідомлень, викликаючи реєстр методів GoogleCloudMessaging (senderID ...). Цей метод реєструє програму для GCM і повертає реєстраційний ідентифікатор. Цей впорядкований підхід замінює попередній процес реєстрації GCM.
Примітка із зазначенням Google may periodically refresh the registration ID
з’являється лише на тій сторінці, де все ще відображається старий процес реєстрації, тому цілком можливо, що ця примітка більше не актуальна.
Якщо ви хочете бути в безпеці, ви все одно можете використовувати старий процес реєстрації. Або ви можете використовувати новий процес, але додатково маєте код, який обробляє com.google.android.c2dm.intent.REGISTRATION
намір, щоб переконатися, що ви охоплені, якщо Google вирішить оновити реєстраційний ідентифікатор.
Тим не менш, я ніколи не відчував такого оновлення, і навіть коли я зазнавав зміни в реєстраційному ідентифікаторі (зазвичай в результаті надсилання сповіщення після деінсталяції програми та її повторної інсталяції), старий реєстраційний ідентифікатор все ще працював (в результаті канонічний ідентифікаційний номер реєстрації, надісланий у відповіді від Google), тому шкоди не було завдано.
РЕДАКТУВАТИ (06.06.2013):
Google змінив демонстраційний додаток, щоб використовувати новий інтерфейс. Вони оновлюють реєстраційний ідентифікатор, встановлюючи термін дії для значення, яке зберігається локально програмою. Коли програма запускається, вони завантажують свій локально збережений реєстраційний ідентифікатор. Якщо термін дії "закінчився" (що в демонстраційній версії означає, що він був отриманий від GCM понад 7 днів тому), вони телефонують gcm.register(senderID)
знову.
Це не справляється з гіпотетичним сценарієм, коли Google оновлює реєстраційний ідентифікатор для програми, яка давно не запускалася. У цьому випадку програма не буде в курсі змін, як і сторонній сервер.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mDisplay = (TextView) findViewById(R.id.display);
context = getApplicationContext();
regid = getRegistrationId(context);
if (regid.length() == 0) {
registerBackground();
}
gcm = GoogleCloudMessaging.getInstance(this);
}
private String getRegistrationId(Context context) {
final SharedPreferences prefs = getGCMPreferences(context);
String registrationId = prefs.getString(PROPERTY_REG_ID, "");
if (registrationId.length() == 0) {
Log.v(TAG, "Registration not found.");
return "";
}
int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
int currentVersion = getAppVersion(context);
if (registeredVersion != currentVersion || isRegistrationExpired()) {
Log.v(TAG, "App version changed or registration expired.");
return "";
}
return registrationId;
}
private boolean isRegistrationExpired() {
final SharedPreferences prefs = getGCMPreferences(context);
long expirationTime =
prefs.getLong(PROPERTY_ON_SERVER_EXPIRATION_TIME, -1);
return System.currentTimeMillis() > expirationTime;
}
РЕДАКТУВАТИ (14.08.2013):
Google знову змінив демонстраційний додаток (два дні тому). Цього разу вони видалили логіку, згідно з якою реєстраційний ідентифікатор закінчується через 7 днів. Тепер вони оновлюють реєстраційний ідентифікатор лише тоді, коли з’являється нова версія встановленого додатка.
РЕДАКТУВАТИ (24.04.2014):
Для повноти, ось слова Костіна Манолаша (взято звідси ), розробника Google, який бере участь у розробці GCM, з цього приводу:
"Періодичне" оновлення ніколи не відбувалося, і оновлення реєстрації не входить до нової бібліотеки GCM.
Єдина відома причина зміни реєстраційного посвідчення - стара помилка програм, які автоматично реєструються, якщо вони отримують повідомлення під час оновлення. Поки ця помилка не виправлена, програмам все ще потрібно буде викликати register () після оновлення, і поки реєстраційний ідентифікатор може змінитися в цьому випадку. Виклик методу unregister () явно змінює також реєстраційний ідентифікатор.
Пропозиція / обхідне рішення полягає у створенні власного випадкового ідентифікатора, наприклад, збереженого як спільна перевага. Під час кожного оновлення програми ви можете завантажувати ідентифікатор та потенційно новий реєстраційний ідентифікатор. Це також може допомогти відстежувати та налагоджувати оновлення та зміни реєстрації на стороні сервера.
Це пояснює поточну реалізацію офіційного додатка GCM Demo.
com.google.android.c2dm.intent.REGISTRATION
ніколи не слід обробляти при використанні GoogleCloudMessaging
класу для реєстрації.