サーバーでこれを確認する必要があります。ユーザーがアプリケーションをいつアンインストールするかを知る方法がないため、アプリケーションコードからは実行できません。
参照:正規のIDを実装する。 参照:https://developers.google.com/cloud-messaging/http#request
正規の登録IDは、アプリケーションによって要求された最後の登録のIDであると定義されています。これは、サーバーがメッセージをデバイスに送信する際に使用するIDです。
後で別の登録IDを使用してメッセージを送信しようとすると、GCMは通常どおりリクエストを処理しますが、レスポンスのregistration_idフィールドに正式な登録IDが含まれます。サーバに保存されている登録IDをこの標準IDに置き換えてください。使用しているIDが機能しなくなります。
参考:https://stuff.mit.edu/afs/sipb/project/android/docs/google/gcm/adv.html#canonical
CanonicalのIDが0でない場合は、あなたが二重登録を持っています。
セイたとえば、あなたは、データベース内の2件の登録があります。
registration_A
をregistration_B
あなたがプッシュ通知を送信すると、サーバーは、このようなもので応答を取得します:
{"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:################"}]}
このデータを配列に格納します。最初のものには "canonical_ids"があることに注意してください。これは重複があったことを意味します。あなたのデータベースのどのレコードが古いものか知るために。上記の "registration_id"を検索し、インデックス値を保存するだけです。このインデックス値は、データベース内の古いレコードを示します。
上記の例では、registration_Aは古いregistration_idになります。
データベースからすべてのレコードを取得します。検索した索引値に基づいて削除します。またはそれを更新することができます。それはデータベースの設定方法によって異なります。
幸運を祈る!
[GCMから登録を解除する方法](http://developer.android。co.jp/guide/google/gcm/adv.html#unreg) –
ありがとうございます。そのすばらしい情報 – Sakthimuthiah
このSO答えの詳細:http://stackoverflow.com/a/28057615/3913366。 –