2012-09-04 10 views
13

He configurado GCM en mi aplicación. Deseo anular el registro del dispositivo de GCM siempre que el usuario desinstale la aplicación.Cómo anular el registro de GCM después de desinstalar la aplicación

me dieron el código como

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

pero donde tenemos que poner este código ..?

Gracias.

+1

obtuvo más información de: [cómo anular el registro de GCM] (http://developer.android.com/guide/google/gcm/adv.html # unreg) –

+0

Gracias. Es una información increíble – Sakthimuthiah

+0

Más información en esta respuesta SO: http://stackoverflow.com/a/28057615/3913366. –

Respuesta

21

No puede llamar al anular el registro de GCM durante la desinstalación, porque no se llama a ningún método mientras el usuario desinstala la aplicación.

cuando envía una notificación de inserción, GCM verificará si el usuario tiene su aplicación, si el usuario ha desinstalado la aplicación, GCM notará lo mismo y le informará como parte de la respuesta a la inserción.

+2

realmente? Estoy usando HTTP para enviar notificaciones a GCM, después de desinstalar la aplicación, GCM aún responde esto: {"multicast_id": XXXXXXXX, "success": 1, "failure": 0, "canonical_ids": 0, "results": [{"message_id": "0: XXXXXXXXX"}]} ¿Me falta algo para configurar? – danisupr4

+1

En mis experimentos, he encontrado que el estado de desinstalación se actualiza alrededor de 8 días después de que el usuario realmente desinstala la aplicación. el tiempo puede variar –

1

Tienes que comprobar esto en tu servidor. No puede hacerlo desde el código de la aplicación, ya que no hay forma de saber cuándo el usuario está desinstalando la aplicación.

Ver: Implementar identificaciones canónicas. Referencia: https://developers.google.com/cloud-messaging/http#request

Un ID de registro canónico se define como el ID del último registro solicitado por su aplicación. Este es el ID que el servidor debe usar al enviar mensajes al dispositivo.

Si más adelante intenta enviar un mensaje utilizando una ID de registro diferente, GCM procesará la solicitud como de costumbre, pero incluirá la ID de registro canónico en el campo registration_id de la respuesta. Asegúrese de reemplazar la ID de registro almacenada en su servidor con esta ID canónica, ya que con el tiempo la ID que está utilizando dejará de funcionar.

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

Si el ID de Canonical no es 0, entonces usted tiene un registro duplicado.

Digamos por ejemplo, que tienen 2 registros en su base de datos:

registration_A

registration_B

Cuando se envía una notificación de inserción, el servidor obtendrá responder con algo que se parece a esto:

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

Almacenar estos datos en una matriz. Tenga en cuenta que el primero tiene un "canonical_ids": 1. Esto significa que hubo un duplicado. Entonces, para saber qué registro en su base de datos es el anterior. Simplemente busque "registration_id" en el cuadro anterior y guarde el valor del índice. Este valor de índice apunta al registro anterior en su base de datos.

En el ejemplo anterior, registration_A sería el antiguo registration_id.

Obtenga todos los registros de su base de datos. A continuación, elimínelo en función del valor del índice que recuperó. O puedes actualizarlo. Eso depende de cómo configure su base de datos.

¡Buena suerte!

Cuestiones relacionadas