您需要在服务器上检查此内容。由于无法知道用户何时卸载应用程序,因此无法从应用程序代码中执行此操作。
请参见:实施规范 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
注册_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。
从你的数据库中获取所有记录。然后根据检索到的索引值进行删除或更新。这取决于你如何设置数据库。
祝好运!