卸载应用程序时 GCM 未注销设备

GCM did not unregister the device when the app is uninstalled

我制作了一个 Android 应用程序。我使用 GCM 推送通知。当用户时,我正在向 GCM 注册设备 已登录。我正在使用 外部 MySql 数据库 来存储 用户的注册ID。效果很好。

但是

当我执行以下步骤时:

  1. 在我的手机上安装了我的应用程序。
  2. 使用 user1 登录。
  3. 已从我的手机上卸载该应用程序。
  4. 再次安装应用程序。
  5. 使用 user2 登录。

user1 通知仍然在我的手机中收到,这意味着 GCM 没有 在卸载应用程序时注销我的设备。

我无法在卸载应用程序时删除 Mysql 数据库中的行,因为我不知道应用程序何时卸载或用户可能没有互联网 卸载应用程序时连接以删除行。

你能建议我如何解决这个问题吗?

我了解到 GCM 在卸载后需要一些时间来注销设备。

当 GCM 取消注册设备时,如何删除 mysql 中的行?

确实GCM在卸载后需要一些时间来注销设备。基于docs,GCM服务器只有在发送“退回”消息后才会将注册ID标记为删除,因为应用已经卸载

如果只是为了使情况更复杂一点,重新安装的应用程序可以收到相同的注册 ID 或不同的。

您可以做的一件事是在您的 data JSON 对象中添加一个字段来指定目标用户是谁。这样,无论应用程序被卸载然后重新安装的情况如何,用户都只会收到为他们准备的消息(例如,通过某种“检查登录用户”功能)。

文档中的附加说明:

To make sure that messages go to the intended user:

  • The app server can maintain a mapping between the current user and the registration token.
  • The client app can then check to ensure that messages it receives match the logged in user.