卸载应用时 GCM 未取消注册设备
Posted
技术标签:
【中文标题】卸载应用时 GCM 未取消注册设备【英文标题】:GCM did not unregister the device when the app is uninstalled 【发布时间】:2015-05-29 22:47:27 【问题描述】:我制作了一个 android 应用。我使用 GCM 来推送通知。当用户使用 GCM 注册设备时 已登录。我正在使用 外部 MySql 数据库来存储 用户的注册ID。效果很好。
但是
当我执行以下步骤时:
-
在我的手机中安装我的应用。
使用 user1 登录。
从我的手机卸载该应用。
再次安装该应用。
使用 user2 登录。
user1 通知仍然在我的手机中收到,这意味着 GCM 没有在卸载应用程序时取消注册我的设备。
卸载应用程序时无法删除mysql数据库中的行,因为我不知道应用程序何时卸载或用户可能没有互联网 卸载应用程序以删除行时的连接。
你能建议我如何解决这个问题吗?
我了解到 GCM 在卸载后需要一些时间来取消注册设备。
GCM注销设备时如何删除mysql中的行?
【问题讨论】:
【参考方案1】:GCM 在卸载后确实需要一些时间来取消注册设备。基于docs,GCM服务器只有在发送“反弹”消息后才会将注册ID标记为删除,因为该应用已被卸载。
如果只是为了让情况更复杂一点,重新安装的应用程序可以收到相同的注册ID或不同的注册ID。
您可以做的一件事是在您的data
JSON 对象中添加一个字段来指定目标用户是谁。这样一来,无论应用程序被卸载然后重新安装的情况如何,用户都只会收到本应发给他们的消息(例如,通过某种“检查登录用户”功能)。
文档中的附加说明:
为了确保消息到达目标用户:
应用服务器可以维护当前用户和注册令牌之间的映射。 然后,客户端应用程序可以检查以确保它收到的消息与登录用户匹配。
【讨论】:
以上是关于卸载应用时 GCM 未取消注册设备的主要内容,如果未能解决你的问题,请参考以下文章