2012-09-04 16 views
13

Mam skonfigurowane GCM w mojej aplikacji. Chcę wyrejestrować urządzenie z GCM za każdym razem, gdy użytkownik odinstaluje aplikację.Jak wyrejestrować się z GCM po odinstalowaniu aplikacji

mam kod jak

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

ale gdzie musimy umieścić ten kod ..?

Dziękuję.

+1

uzyskałem więcej informacji od: [jak wyrejestrować się z GCM] (http://developer.android.com/guide/google/gcm/adv.html # unreg) –

+0

Dziękuję. Jest to niesamowita informacja. – Sakthimuthiah

+0

Więcej informacji w odpowiedzi na to pytanie: http://stackoverflow.com/a/28057615/3913366. –

Odpowiedz

21

Nie można wywołać wyrejestrowania z GCM podczas odinstalowywania, ponieważ nie ma żadnej metody wywoływanej, gdy użytkownik odinstalowuje aplikację.

po wysłaniu powiadomienia push, GCM sprawdzi, czy użytkownik ma aplikację, jeśli użytkownik odinstalował aplikację GCM zanotuje to samo i poinformuje Cię jako część odpowiedzi na naciśnięcie.

+2

naprawdę? używam protokołu HTTP do przekazywania informacji do GCM, po odinstalowaniu aplikacji GCM nadal odpowiada na to: {"multicast_id": XXXXXXXX, "sukces": 1, "niepowodzenie": 0, "canonical_ids": 0, "wyniki": [{"message_id": "0: XXXXXXXXX"}]} Czy brakuje mi czegoś do konfiguracji? – danisupr4

+1

W moich eksperymentach odkryłem, że stan odinstalowania jest aktualizowany około 8 dni po tym, jak użytkownik faktycznie odinstaluje aplikację. czas może się różnić. –

1

Musisz to sprawdzić na swoim serwerze. Nie można tego zrobić z poziomu kodu aplikacji, ponieważ nie ma możliwości dowiedzenia się, kiedy użytkownik odinstalowuje aplikację.

Zobacz: Implementacja identyfikatorów Canonical. Odwołanie: https://developers.google.com/cloud-messaging/http#request

Kanoniczny identyfikator rejestracyjny jest identyfikatorem ostatniej rejestracji wymaganej przez aplikację. Jest to identyfikator, którego powinien używać serwer podczas wysyłania wiadomości do urządzenia.

Jeśli później spróbujesz wysłać wiadomość używając innego identyfikatora rejestracji, GCM rozpatrzy wniosek jak zwykle, ale będzie zawierać kanoniczną ID rejestracyjnego w polu registration_id odpowiedzi. Pamiętaj, aby zastąpić identyfikator rejestracji przechowywany na serwerze tym identyfikatorem kanonicznym, ponieważ w końcu identyfikator, którego używasz, przestanie działać.

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

Jeśli Canonical ID nie jest równa 0, to masz duplikat rejestracji.

powiedzieć na przykład, masz 2 rejestracje w bazie danych:

registration_A

registration_B

Po wysłaniu powiadomienia push, serwer będzie reagować z czymś, co wygląda tak:

{"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:################"}]} 

Zapisz te dane w tablicy. Zauważ, że pierwszy ma "canonical_ids": 1. Oznacza to, że był duplikat. Aby wiedzieć, który rekord w bazie danych jest stary. Po prostu wyszukaj "registration_id" w powyższym i zapisz wartość indeksu. Ta wartość indeksu wskazuje na stary rekord w bazie danych.

W powyższym przykładzie parametr registration_A byłby starym numerem rejestracyjnym.

Uzyskaj wszystkie rekordy z bazy danych. Następnie usuń go w oparciu o pobraną wartość indeksu. LUB możesz go zaktualizować. To zależy od konfiguracji bazy danych.

Powodzenia!

Powiązane problemy