你必須檢查你的服務器上。您無法從應用程序代碼執行此操作,因爲無法知道用戶何時卸載應用程序。
請參閱:實施規範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
如果規範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」:1。這意味着有重複。所以要知道數據庫中的哪個記錄是舊記錄。只需在上面搜索「registration_id」並保存索引值即可。該索引值指向數據庫中的舊記錄。
在上面的例子中,registration_A是舊的registration_id。
從數據庫中獲取所有記錄。然後根據您檢索的索引值刪除它。或者你可以更新它。這取決於你如何設置你的數據庫。
祝你好運!
瞭解了更多信息:[如何從GCM註銷](http://developer.android。com/guide/google/gcm/adv.html#unreg) –
謝謝。它是一個了不起的信息 – Sakthimuthiah
更多信息在此SO回答:http://stackoverflow.com/a/28057615/3913366。 –