サーバーでこれを確認する必要があります。ユーザーがいつアプリケーションをアンインストールするかを知る方法がないため、アプリケーション コードからは実行できません。
参照: Canonical 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 つの登録があるとします。
登録_A
登録_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」:1 があることに注意してください。これは、重複があったことを意味します。したがって、データベース内のどのレコードが古いレコードかを知ることができます。上記で「registration_id」を検索し、インデックス値を保存するだけです。このインデックス値は、データベース内の古いレコードを指しています。
上記の例では、registration_A が古い registration_id になります。
データベースからすべてのレコードを取得します。次に、取得したインデックス値に基づいて削除します。または、更新することができます。これは、データベースの設定方法によって異なります。
幸運を!