Das ist eine interessante Frage.
Google empfiehlt Ihnen, zum neuen Registrierungsprozess zu wechseln:
Eine Android-Anwendung, die auf einem mobilen Gerät ausgeführt wird, registriert sich, um Nachrichten zu empfangen, indem sie das GoogleCloudMessaging-Methodenregister (senderID ...) aufruft. Diese Methode registriert die Anwendung für GCM und gibt die Registrierungs-ID zurück. Dieser optimierte Ansatz ersetzt den vorherigen GCM-Registrierungsprozess.
Der Hinweis, der besagt, wird Google may periodically refresh the registration ID
nur auf der Seite angezeigt, auf der noch der alte Registrierungsprozess angezeigt wird. Daher ist dieser Hinweis möglicherweise nicht mehr relevant.
Wenn Sie sicher sein möchten, können Sie weiterhin den alten Registrierungsprozess verwenden. Oder Sie können den neuen Prozess verwenden, haben aber zusätzlich den Code, der die com.google.android.c2dm.intent.REGISTRATION
Absicht behandelt, um sicherzustellen, dass Sie abgesichert sind, wenn Google die Registrierungs-ID aktualisiert.
Trotzdem habe ich noch nie eine solche Aktualisierung erlebt, und selbst wenn sich die Registrierungs-ID geändert hat (normalerweise aufgrund des Sendens einer Benachrichtigung nach der Deinstallation der App und der anschließenden Neuinstallation), bleibt die alte Registrierungs-ID erhalten funktioniert (was zu einer kanonischen Registrierungs-ID führt, die in der Antwort von Google gesendet wurde), sodass kein Schaden angerichtet wurde.
EDIT (06.06.2013):
Google hat seine Demo-App geändert , um die neue Benutzeroberfläche zu verwenden. Sie aktualisieren die Registrierungs-ID, indem sie ein Ablaufdatum für den Wert festlegen, der lokal von der App beibehalten wird. Wenn die App gestartet wird, laden sie ihre lokal gespeicherte Registrierungs-ID. Wenn es "abgelaufen" ist (was in der Demo bedeutet, dass es vor über 7 Tagen von GCM empfangen wurde), rufen sie gcm.register(senderID)
erneut an.
Dies behandelt nicht das hypothetische Szenario, in dem eine Registrierungs-ID von Google für eine App aktualisiert wird, die seit langer Zeit nicht mehr gestartet wurde. In diesem Fall ist der App die Änderung nicht bekannt, ebenso wenig wie dem Server eines Drittanbieters.
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;
}
BEARBEITEN (14.08.2013):
Google hat seine Demo-App erneut geändert (vor zwei Tagen). Diesmal haben sie die Logik entfernt, nach der die Registrierungs-ID nach 7 Tagen abgelaufen ist. Jetzt aktualisieren sie die Registrierungs-ID nur, wenn eine neue Version der App installiert wurde.
EDIT (24.04.2014):
Der Vollständigkeit halber sind hier die Worte von Costin Manolache (von hier übernommen ), einem Google-Entwickler, der an der Entwicklung von GCM beteiligt ist, zu diesem Thema:
Die "regelmäßige" Aktualisierung hat nie stattgefunden, und die Aktualisierung der Registrierung ist nicht in der neuen GCM-Bibliothek enthalten.
Die einzige bekannte Ursache für die Änderung der Registrierungs-ID ist der alte Fehler, dass Apps automatisch abgemeldet werden, wenn sie während des Upgrades eine Nachricht erhalten. Bis dieser Fehler behoben ist, müssen Apps nach dem Upgrade noch register () aufrufen. Bisher kann sich die Registrierungs-ID in diesem Fall ändern. Wenn Sie unregister () explizit aufrufen, wird normalerweise auch die Registrierungs-ID geändert.
Der Vorschlag / die Problemumgehung besteht darin, eine eigene zufällige Kennung zu generieren, die beispielsweise als gemeinsame Präferenz gespeichert wird. Bei jedem App-Upgrade können Sie die Kennung und die möglicherweise neue Registrierungs-ID hochladen. Dies kann auch dazu beitragen, die Aktualisierungs- und Registrierungsänderungen auf der Serverseite zu verfolgen und zu debuggen.
Dies erklärt die aktuelle Implementierung der offiziellen GCM-Demo-Anwendung.
com.google.android.c2dm.intent.REGISTRATION
sollte niemals behandelt werden, wenn die GoogleCloudMessaging
Klasse zum Registrieren verwendet wird.