卸载应用时 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 未取消注册设备的主要内容,如果未能解决你的问题,请参考以下文章

取消注册和重新注册 GCM 消息会导致两个 regId 有效。这是预期的吗?

GCM 如何使用 GCM 和 3rd 方服务器注销设备

推送示例android gcm,已注册设备但未收到推送通知

Android GCM 不向设备发送通知消息

某些设备在 android 中未收到推送通知

当应用程序未运行时,GCM 推送通知未在某些设备中显示