【问题标题】:Prevent GCM client displaying messages from old reg ids阻止 GCM 客户端显示来自旧 reg id 的消息
【发布时间】:2014-12-18 21:47:12
【问题描述】:

我在 Android 客户端使用 GCM 推送通知获取重复通知时遇到问题。

我安装应用程序并像这样在 GCM 中注册:regid = gcm.register(SENDER_ID);

这给了我一个注册 ID(例如:“ABC”)。如果我尝试重新注册,我会得到相同的 ID(“ABC”)。如果我清除应用程序数据(在 Android 应用程序设置中)并重新加载应用程序,我会得到相同的 ID(“ABC”),但是如果我卸载应用程序并重新安装,我会得到一个新 ID(用于例如:“DEF”)。

这很好,但是在第二次注册后,我的应用现在将收到发送到“ABC”“DEF”的通知。这会在我的应用中产生一些结果。

有没有办法忽略发送到任何 reg ID除了最后一个注册的所有消息(在我的示例中:“DEF”)?

我用来测试的例子是官方的 GCM-Client (https://developer.android.com/google/gcm/client.html)。

【问题讨论】:

  • “ABC”和“DEF”存储在哪里?为什么不在收到新的注册 ID 时直接覆盖?
  • 卸载然后重新安装后等待多长时间。文档说,当用户卸载应用程序时,他们会自动取消注册,但更改可能需要一段时间才能发生。 developer.android.com/google/gcm/adv.html#unreg
  • @dannyroa "ABC" 和 "DEF" 存储在服务器上。应用卸载后无法覆盖。
  • @tyczj 这是一个很好的观点。我将再次测试,但这次稍等一下,看看它是否在 Google 方面未注册。
  • @MarkWinterbottom:您可能需要设备 ID 才能知道同一设备是否有新的注册 ID 并覆盖旧的。见stackoverflow.com/questions/2785485/…

标签: android push-notification google-cloud-messaging


【解决方案1】:

无法忽略发送到旧 reg id 的消息。

你能做到的最好的:

  1. 在客户端,尝试在外部存储上存储一些应用数据。这将允许您确定该应用程序以前是否安装在设备上,并告诉您的服务器用新的 reg id 替换旧的 reg id。

  2. 在服务器端,处理来自 GCM 的规范 reg id 响应。这不会阻止向旧 reg id 发送消息,但是一旦您向此类 reg id 发送消息,您将立即从数据库中删除旧 reg id,并且不会再向其发送任何消息.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 2019-05-16
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多