【问题标题】:Duplicate notification received after app upgrade应用升级后收到重复通知
【发布时间】:2017-04-06 07:18:05
【问题描述】:

我看到很多关于在卸载旧版本并重新安装新版本时接收应用程序的新注册 ID 的问题,这是预期的问题。

但是我注意到应用升级会生成一个新的注册 ID,而旧的注册 ID 不是Invalid/NotRegistered。对不起,如果我在这个话题上过时了。

这会导致在从服务器发送通知时接收同一设备的多个通知。

那么我是否需要在应用升级时拨打FirebaseInstanceId.getInstance().deleteInstanceId(); 或者旧的注册ID 将来会被FCM 失效?

【问题讨论】:

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


    【解决方案1】:

    AFAIK,App Update shouldn't generate a new registration token

    但是,如果您设法从onTokenRefresh() 回调中接收到新令牌,则应立即更新应用服务器上的相应详细信息,保存新令牌并删除旧令牌。这样,您就不必致电deleteInstanceId()

    除非您只是通过简单地调用getToken() 来接收新的和不同 令牌,在这种情况下,这是一种意外行为。请贴出相关代码 sn-ps 以便我们进一步研究。

    【讨论】:

    • 嗯,我就是这么想的。应用更新不会更新注册 ID。但是即使应用程序没有更新,也可以在未来一段时间(可能更长)后更新注册 ID。我对吗。?我已经在一个离子项目中实现了 FCM,该项目在应用程序启动时调用 register。在应用升级时,这会返回一个与旧注册 ID 不同的新注册 ID。
    • 是的。如果触发了onTokenRefresh(),您将知道令牌已刷新。它只有几个specific scenarios。您可以做的是暂时存储当前令牌,每次调用getToken(),您都可以进行比较。如果您获得的令牌不同,请更换旧令牌。
    • 是的。这将按预期工作。所以我认为,在应用升级期间刷新令牌的可能更改将是App deletes Instance ID
    • 是的。我认为那会很好。只需设置检查实现并将 deleteInstanceId 设置为故障安全。 :)
    【解决方案2】:

    不要将两个注册密钥都存储在您发送通知的服务器数据库中。 使用更新查询而不是将注册密钥插入数据库。

    【讨论】:

    • 感谢回复..我知道这是一种情况,但我担心的是为什么旧的注册 ID 没有失效。?如果用户在多个设备上安装了该应用程序并在所有设备中使用相同的用户名,您的方法将受到影响。只会收到最后更新的注册 ID 的通知。
    猜你喜欢
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    相关资源
    最近更新 更多