在我的应用程序中,一旦我注册了一个设备,它就会作为持久数据存储,以检查设备是否已经注册。
在服务器端,我将它们与 user_id 一起存储在数据库中,user_id 是用户的唯一 ID。
[user_id] [gcm_registration_id]
现在我无法处理这种情况:
如果用户注销:
必须清除存储在 SharedPreferences 中的registration_id,因为下次启动应用程序时可能会有其他用户登录。
此外,我必须从我的数据库中删除与该 registration_id 对应的行,因为该设备(当前没有登录用户)不能再收到任何通知。
问题是我的数据库使用 canonical_ids 更新,或者说我在调用时获得的最新registration_ids
https://android.googleapis.com/gcm/send
因此,我有可能找不到要删除的已注销用户的旧registration_id,这仍然允许向未登录用户发送通知。
此外,我无法删除与 user_id 匹配的数据库行,因为用户可能仅从 1 个设备注销,并且他/她仍在登录的设备很少。
我如何知道对于这个特定的用户和设备,注册 ID 已更改?
我应该将所有旧的注册 ID 及其对应的 canonical_ids 存储在我的数据库中吗?