2014-05-17 8 views
6

Ich arbeite an einem Android-Projekt, das gcm verwendet. Ich habe erfahren, dass, wenn wir die App vom Gerät deinstallieren und die meiste Zeit neu installiert wird, das Gerät eine neue Registrierungs-ID erhält. Wenn wir das alte nicht vom Anwendungsserver löschen und aktualisieren, werden die Nachrichten sowohl an die IDs als auch an die Antwort wird es zeigen, kanonische ID ist vorhanden.Meine Frage ist, an diesem Punkt wird Nachricht erfolgreich an das Gerät gesendet werden oder nicht?gcm kanonische ID sollte aktualisiert werden oder nicht

Antwort

5

Wenn Sie in der Antwort von Google eine kanonische Registrierungs-ID erhalten, wurde die Nachricht vom GCM-Server akzeptiert und der GCM-Server versucht, sie an das Gerät zu senden. Ob es tatsächlich an das Gerät gesendet wird, hängt davon ab, ob das Gerät verfügbar ist (d. H. Mit dem Internet verbunden ist). Wenn Ihr Server also eine GCM-Nachricht an die alte ID und die neue ID sendet, erhält das Gerät wahrscheinlich zwei Nachrichten.

Canonical IDs

Auf der Serverseite, solange die Anwendung gut verhält, sollte alles normal. Wenn jedoch ein Fehler in der Anwendung mehrere Registrierungen für das gleiche Gerät auslöst, kann es schwierig sein, Zustand abzugleichen und Sie möglicherweise mit doppelten Nachrichten enden.

GCM bietet eine Einrichtung namens "canonical registration IDs", mit der sich aus diesen Situationen problemlos wiederherstellen lässt. Eine kanonische Registrierungs-ID ist definiert als , um die ID der letzten von Ihrer Anwendung angeforderten Registrierung zu sein. Dies ist die ID, die der Server beim Senden von Nachrichten an das Gerät verwenden soll.

Wenn Sie später versuchen, eine Nachricht zu senden, eine andere Anmeldung ID verwenden, wird GCM die Anfrage wie gewohnt verarbeiten, aber es wird die kanonische Registrierungs-ID im registration_id Feld der Antwort umfassen. Stellen Sie sicher, dass die Registrierungs-ID, die in Ihrem Server gespeichert ist, durch diese kanonische ID ersetzt wird, da die verwendete ID schließlich nicht mehr funktioniert.

(Source)

Sie dieses Problem, indem die Zuweisung einer eindeutigen Kennung für jede Instanz der Anwendung überwinden. Wenn Sie diese Kennung im externen Speicher des Geräts speichern, wird sie beim Deinstallieren der App nicht gelöscht. Dann können Sie es wiederherstellen, wenn die App erneut installiert wird. Wenn Sie diese ID zusammen mit der Registrierungs-ID an Ihren Server senden, können Sie überprüfen, ob Ihr Server eine alte Registrierungs-ID für diese ID besitzt, und sie löschen.

+2

Eran, es scheint, wie du bist die Person zu fragen, alles gcm-bezogen: Ich habe eine kleine Änderung an Ihrer Lösung durch die Speicherung der eindeutige ID (Benutzername) auf dem Server zusammen mit dem regid des Geräts. Korrigiere mich, wenn ich falsch liege, aber mir sollte es gut gehen, weil ich nur eine Regid pro Benutzer zulasse, und ich kann entsprechend aktualisieren. Dies setzt jedoch voraus, dass das Gerät * immer * die neueste (und gültige) Regid hat. Ist das sicher anzunehmen? – user1164937

+0

2. Frage: Gibt es noch andere * Randfälle *, die ich beachten sollte, außer dass ich die regid des Benutzers mit der kanonischen ID aktualisiere, wenn eine solche vorhanden ist? Danke im Voraus. – user1164937

+0

Ich vergaß zu erwähnen, dass ich genau den gleichen Prozess wie die Beispiel-gcm-App von Google verwende, um sich für das regid zu registrieren - wenn die sharedpreferences keine hat. (Ich entschuldige mich für den Spam) – user1164937

0

@Eran Wir haben zwei Möglichkeiten entweder ältere Registrierungs-IDs zu entfernen oder mit Schlüssel und Position der kanonischen ID zu aktualisieren. Ich bevorzuge zu aktualisieren ... Sie können arbeiten Code von mir Ich habe hier beantwortet Steps to Update Canonical Ids

Verwandte Themen