你必须在你的服务器上检查这个。您无法从应用程序代码中执行此操作,因为无法知道用户何时卸载应用程序。
请参阅:实施规范 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。
从您的数据库中获取所有记录。然后根据您检索到的索引值将其删除。或者你可以更新它。这取决于您如何设置数据库。
祝你好运!