2012-09-04 5 views
13

Ich habe GCM in meiner Anwendung konfiguriert. Ich möchte die Registrierung des Geräts von GCM aufheben, wenn der Benutzer die Anwendung deinstalliert.So entfernen Sie die Registrierung von GCM nach der Deinstallation der App

bekam ich den Code als

Intent unregIntent = new Intent("com.google.android.c2dm.intent.UNREGISTER"); 
unregIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0)); 
startService(unregIntent); 

aber, wo wir diesen Code zu setzen haben ..?

Vielen Dank.

+1

habe mehr Informationen von: [wie man die Registrierung von GCM abbricht] (http://developer.android.com/guide/google/gcm/adv.html # unreg) –

+0

Vielen Dank. Es ist eine tolle Information – Sakthimuthiah

+0

Mehr Infos bei dieser SO Antwort: http://StackOverflow.com/A/28057615/3913366. –

Antwort

21

Sie können die Registrierung von GCM während der Deinstallation nicht aufrufen, da keine Methode aufgerufen wird, während der Benutzer die Anwendung deinstalliert.

Wenn Sie eine Push-Benachrichtigung senden, überprüft GCM, ob der Benutzer Ihre Anwendung hat. Wenn der Benutzer die Anwendung deinstalliert hat, wird GCM dies notieren und Sie als Teil der Antwort für den Push informieren.

+2

wirklich? Ich benutze HTTP, um notif zu GCM zu pushen, nachdem ich die App deinstalliert habe, antwortet GCM immer noch: {"multicast_id": XXXXXXXX, "Erfolg": 1, "failure": 0, "canonical_ids": 0, "results": [{"message_id": "0: XXXXXXXXX"}}} Fehle ich etwas zu konfigurieren? – danisupr4

+1

In meinen Experimenten habe ich festgestellt, dass der Deinstallationsstatus ungefähr 8 Tage nach dem tatsächlichen Deinstallieren der Anwendung durch den Benutzer aktualisiert wird. die Zeit kann variieren. –

1

Sie müssen dies auf Ihrem Server überprüfen. Sie können dies nicht über den Anwendungscode tun, da Sie nicht wissen können, wann der Benutzer die Anwendung deinstalliert.

Siehe: Implementieren von kanonischen IDs. Referenz: https://developers.google.com/cloud-messaging/http#request

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 an das Gerät verwenden soll.

Wenn Sie später versuchen, eine Nachricht mit einer anderen Registrierungs-ID zu senden, wird GCM die Anfrage wie gewohnt bearbeiten, jedoch die kanonische Registrierungs-ID in das Feld registration_id der Antwort aufnehmen. Stellen Sie sicher, dass Sie die Registrierungs-ID, die auf Ihrem Server gespeichert ist, durch diese kanonische ID ersetzen, da die von Ihnen verwendete ID schließlich nicht mehr funktioniert.

Referenz: https://stuff.mit.edu/afs/sipb/project/android/docs/google/gcm/adv.html#canonical

Wenn die Canonical-ID nicht 0 ist, dann haben Sie eine doppelte Registrierung.

Sagen Sie zum Beispiel, haben Sie 2 Eintragungen in Ihrer Datenbank:

registration_A

registration_B

Wenn Sie eine Push-Benachrichtigung, Ihr Server senden wird mit etwas bekommen reagieren, die wie folgt aussieht:

{"multicast_id":########,"success":1,"failure":0,"canonical_ids":1,"results": 
[{"registration_id":"new_id_registration_id","message_id":"0:########"}]} 
{"multicast_id":######### ,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:################"}]} 

Speichern Sie diese Daten in einem Array. Beachten Sie, dass der erste eine "canonical_ids" hat: 1. Dies bedeutet, dass es ein Duplikat gab. Um zu wissen, welcher Datensatz in Ihrer Datenbank der alte ist. Suchen Sie einfach nach "registration_id" und speichern Sie den Indexwert. Dieser Indexwert verweist auf den alten Datensatz in Ihrer Datenbank.

Im obigen Beispiel wäre registration_A die alte Registrierungs-ID.

Holen Sie sich alle Datensätze aus Ihrer Datenbank. Löschen Sie es dann basierend auf dem Indexwert, den Sie abgerufen haben. ODER Sie können es aktualisieren. Das hängt davon ab, wie Sie Ihre Datenbank einrichten.

Viel Glück!