2015-08-04 2 views
5

Ich habe erfahren, dass GCM Registrierungs-ID zum Löschen markiert, wenn es nicht möglich ist, die nächste Push-Benachrichtigung zu senden.löscht GCM die alte Registrierungs-ID, wenn der Benutzer die App unmittelbar nach der Deinstallation erneut installiert?

Aber in meinem Fall passiert folgende Situation mit meinem Benutzer.

Szenario:

1) Mein Benutzer installiert die App und sein Gerät mit GCM registriert.

2) Derselbe Benutzer deinstalliert und installiert die App sofort erneut. Zum zweiten Mal wird eine neue Registrierungs-ID generiert.

3) Diese beiden Registrierungs-IDs werden in meiner Datenbank gespeichert.

4) Jetzt erhält dieser bestimmte Benutzer zwei Push-Benachrichtigungen.

Jetzt habe ich folgende Fragen:

Fragen:

  1. Will GCM löscht die alte Registrierung ID nach einiger Zeit?
  2. Bitte schlagen Sie mir vor, wie Sie mit dieser Situation umgehen?
+0

möglich Duplikat [Do alter GCM Token weiterleben, auch nach einer Deinstallation?] (Http://stackoverflow.com/questions/17328654/do-old-gcm-tokens-live-on-even-after -an-deinstallieren) –

Antwort

5

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 gibt es eine Funktionalität "kanonische IDs" genannt:

Canonical IDs

Wenn ein Fehler in der Client-Anwendung mehrere Anmeldungen für das gleiche Gerät auslöst, es kann schwierig sein, Zustand zu vereinbaren und die Client-App könnte 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.