2012-09-04 15 views
13

Ho configurato GCM nella mia applicazione. Voglio annullare la registrazione del dispositivo da GCM ogni volta che l'utente disinstallerà l'applicazione.Come annullare la registrazione da GCM dopo aver disinstallato l'app

ho ottenuto il codice come

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

ma dove dobbiamo inserire questo codice ..?

Grazie.

+1

ha ottenuto più informazioni da: [come annullare la registrazione da GCM] (http://developer.android.com/guide/google/gcm/adv.html # unreg) –

+0

Grazie. È una splendida informazione – Sakthimuthiah

+0

Maggiori informazioni a questa risposta SO: http://stackoverflow.com/a/28057615/3913366. –

risposta

21

Non è possibile chiamare unregister da GCM durante la disinstallazione, perché non esiste un metodo chiamato mentre l'utente disinstalla l'applicazione.

quando si invia una notifica push, GCM controllerà se l'utente ha la propria applicazione, se l'utente ha disinstallato l'applicazione GCM noterà lo stesso e ti informerà come parte della risposta per la spinta.

+2

davvero? sto usando HTTP per inviare notif a GCM, dopo aver disinstallato l'app, GCM continua a rispondere: {"multicast_id": XXXXXXXX, "success": 1, "failure": 0, "canonical_ids": 0, "results": [{"message_id": "0: XXXXXXXXX"}]} Mi manca qualcosa da configurare? – danisupr4

+1

Nei miei esperimenti, ho riscontrato che lo stato di disinstallazione viene aggiornato circa 8 giorni dopo che l'utente ha effettivamente disinstallato l'applicazione. il tempo può variare. –

1

Devi controllare questo sul tuo server. Non puoi farlo dal codice dell'applicazione poiché non c'è modo di sapere quando l'utente sta disinstallando l'applicazione.

Vedere: Implementare ID Canonical. Riferimento: https://developers.google.com/cloud-messaging/http#request

Un ID di registrazione canonico è definito come l'ID dell'ultima registrazione richiesta dall'applicazione. Questo è l'ID che il server deve utilizzare quando invia messaggi al dispositivo.

Se in seguito si tenta di inviare un messaggio utilizzando un ID di registrazione diverso, GCM elaborerà la richiesta normalmente, ma includerà l'ID di registrazione canonica nel campo registration_id della risposta. Assicurati di sostituire l'ID di registrazione memorizzato nel tuo server con questo ID canonico, in quanto l'ID che stai utilizzando smetterà di funzionare.

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

Se l'ID Canonical non è 0, allora avete una registrazione duplicato.

Dire per esempio, si hanno 2 registrazioni nel database:

registration_A

registration_B

Quando si invia una notifica push, il server otterrà rispondere con qualcosa che assomiglia a questo:

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

Archiviare questi dati in un array. Si noti che il primo ha un "canonical_ids": 1. Questo significa che c'era un duplicato. Quindi, per sapere quale record nel database è quello vecchio. Basta cercare "registration_id" nel precedente e salvare il valore dell'indice. Questo valore indice punta al vecchio record nel database.

Nell'esempio precedente, registration_A sarebbe il vecchio registration_id.

Ottieni tutti i record dal tuo database. Quindi eliminalo in base al valore dell'indice che hai recuperato. O puoi aggiornarlo. Dipende da come si imposta il database.

Buona fortuna!

Problemi correlati