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!
obtuvo más información de: [cómo anular el registro de GCM] (http://developer.android.com/guide/google/gcm/adv.html # unreg) –
Gracias. Es una información increíble – Sakthimuthiah
Más información en esta respuesta SO: http://stackoverflow.com/a/28057615/3913366. –