2013-06-26 5 views
16

Wir haben an einer GCM-Implementierung gearbeitet und festgestellt, dass eine Geräteadresse, die einer App-Installation zugewiesen wurde, selbst dann weiter bestehen kann, wenn die App deinstalliert wird.Funktionieren alte GCM-Token auch nach einer Deinstallation?

So installieren wir eine App, erhalten Token A, Gerät abonniert einen bestimmten Alarmtyp 1, Nachricht Token A mit großem Erfolg. Dann deinstallieren wir die App.

Nein, wir installieren neu, empfangen Token B und das Gerät abonniert einen bestimmten Alert-Typ 2, den Nachrichten-Token B, mit großem Erfolg.

Da wir zwischen dem Zeitpunkt der Deinstallation und Neuinstallation der App keine Nachricht an Token A gesendet haben, können wir weiterhin beide Tokens melden, und die App empfängt sie beide.

Hätten wir versucht, Token A zu melden, während die App deinstalliert wurde, hätten wir das von der Antwort von Google bereinigen können.

Gibt es eine Möglichkeit zu wissen, dass Token A technisch nicht mehr gültig ist?

Antwort

5

Ich gehe davon aus, dass Sie mit "Token" tatsächlich auf die Registrierungs-ID beziehen. Alte Registrierungs-IDs können für eine Weile aktiv bleiben. Google teilt Ihnen jedoch mit, dass Sie Ihre regid für eine bestimmte Geräte/App-Kombination mithilfe der in der Antwort auf Ihre gesendete Nachricht aktualisieren müssen.

+0

danke @nickT, Speicherung, die perfekt funktioniert. "GCM stellt eine Funktion namens 'canonical registration IDs' zur Verfügung, mit der sich diese Situationen einfach wiederherstellen lassen. Eine kanonische Registrierungs-ID ist die ID der letzten von Ihrer Anwendung angeforderten Registrierung. Dies ist die ID, die der Server beim Senden von Nachrichten verwenden soll das Gerät." –

+0

Nur um etwas zu erwähnen; Nach dem gcm-Server-Update von Google erhalten Sie dieselbe Registrierungs-ID für dasselbe Gerät. – EvanBlack

10

Von der offiziellen Dokumentation:

How uninstalled client app unregistration works

Eine Client-Anwendung automatisch abgemeldet werden kann, nachdem er deinstalliert wird. Dieser Prozess passiert jedoch nicht sofort. Was in diesem Szenario passiert ist:

  1. Der Endbenutzer deinstalliert die Client-Anwendung.
  2. Der App-Server sendet eine Nachricht an den GCM-Verbindungsserver.
  3. Der GCM-Verbindungsserver sendet die Nachricht an den GCM-Client auf dem Gerät.
  4. Der GCM-Client auf dem Gerät empfängt die Nachricht und erkennt, dass die Client-App deinstalliert wurde. Die Erkennungsdetails hängen von der Plattform ab, auf der die Client-App ausgeführt wird.
  5. Der GCM-Client auf dem Gerät informiert die GCM-Verbindung Server, dass die Client-App deinstalliert wurde.
  6. Der GCM-Verbindungsserver markiert das Registrierungs-Token zum Löschen.
  7. Der App-Server sendet eine Nachricht an GCM.
  8. Das GCM gibt eine NotRegistered-Fehlermeldung an den Anwendungsserver zurück.
  9. Der App-Server sollte das Registrierungs-Token löschen.

Hinweis , dass es eine Weile dauern könnte für das Registrierungstoken zu sein, um vollständig von GCM entfernt.Daher ist es möglich, dass Nachrichten, die während Schritt 7 oben gesendet wurden, eine gültige Nachrichten-ID als Antwort erhalten, obwohl die Nachricht nicht an die Client-App übermittelt wird. Schließlich wird das Token der Registrierung entfernt und der Server erhält den NotRegistered-Fehler , ohne dass weitere Schritte vom App-Server erforderlich sind.

Allerdings kann es offenbar sein, dass Sie immer noch die Meldung für das alte Registrierungs-ID erhalten, wie Nutzer in anderen Fragen angeben:

Für dieses Problem eine Funktionalität gibt es „kanonische IDs“ genannt:

Canonical IDs

Wenn ein Fehler in der Client-Anwendung mehrere Anmeldungen für das gleiche Gerät auslöst, kann es schwierig sein, zum Abgleichen von Status und der Client-App möglicherweise mit doppelten Nachrichten enden.

Die Implementierung kanonischer IDs kann Ihnen dabei helfen, leichter von diesen Situationen zu erholen. Eine kanonische Registrierungs-ID ist das Registrierungs-Token von die letzte von der Client-App angeforderte Registrierung. Dies ist die ID , die der Server beim Senden von Nachrichten an das Gerät verwenden sollte.

Wenn Sie versuchen, eine Nachricht mit einem alten Registrierungstoken, GCM wird Prozess wie üblich die Anfrage zu senden, aber es wird die kanonische ID in die registration_id Feld der Antwort enthalten. Achten Sie darauf, das Registrierungs-Token , das auf Ihrem Server gespeichert ist, durch diese kanonische ID zu ersetzen, da schließlich das alte Registrierungs-Token nicht mehr funktioniert.

+0

Interessanterweise haben wir eine sehr große Diskrepanz zwischen Geräten, die von GCM als aktiv angesehen werden, für die jedoch seit mehr als einem Jahr keine Benutzeraktivität mehr aktiv war. Außerdem ist die Anzahl der aktiven Geräte im Google Play-Dashboard deutlich niedriger als die Anzahl der Geräte, an die GCM-Nachrichten gesendet werden, und es wird kein Fehler gemeldet. – silentser

Verwandte Themen