我们什么时候应该刷新 android 设备令牌?

When should we refresh android device token?

我的应用使用 Firebase Cloud Messaging FCM 发送通知。对于每个用户,我将设备令牌存储在数据库中,并在我想通知他时获取它。我将 FirebaseMessagingService 与覆盖的方法 onNewToken 一起使用,该方法使用新令牌更新我的数据库。我假设此方法每 1 小时调用一次以检查令牌的更新,但我希望它在服务首次初始化时也被调用(在设备上安装和 运行ning 应用程序之后)。然而,这种情况并非如此。为了解决这个问题,我可以在每次用户登录时调用 onNewToken 但是我想知道这是可以接受的方式还是有更好的方式。

为了避免滥用,我在这里留下关于我的案例的额外信息: 我 运行 我的应用程序在 Android Studio 模拟器上,我检查了数据库中存储的令牌,我们称它为 TOKEN-1。 现在我在我的 phone 上安装该应用程序并用 String token = FirebaseInstanceId.getInstance().getToken(); Toast.makeText(MainActivity.this, token, Toast.LENGTH_LONG).show(); 显示令牌 该令牌与第一个 TOKEN-1 不同,TOKEN-1 仍存储在我的数据库中。这意味着我只能在模拟器上接收通知,而不能在 phone.

上接收通知

抱歉,我的文字很长,期待阅读您的建议。

FCM SDK 和服务器协同工作以在后台管理令牌,监听 onNewToken 可确保您在令牌更改时得到通知。出于这个原因,您应该始终收听 onNewToken,并在它发生变化时在您自己的数据库中更新它。

但不能保证您的 FCM 令牌会像您预期的那样每小时(甚至永远)刷新一次。鉴于 1 小时的间隔,您可能会想到 Firebase Authentication ID 令牌,它们是短暂的并且 确实每小时刷新一次。

最后:附加侦听器时令牌不会刷新。事实上:如果在附加侦听器之前已经生成令牌,则不会调用您的侦听器。出于这个原因,您通常 想要在应用程序启动时在主 activity 中获取当前令牌,并在此时将其存储在数据库中。

这最后一段代码在开发过程中最有必要,因为这是您最有可能在还没有 onNewToken 侦听器时生成令牌的场景。因此,除了将代码放在主 activity 中之外,您还可以在添加 onNewToken 侦听器后 uninstall/reinstall 应用程序,因为在这种情况下,FCM 将在安装应用程序时生成一个新令牌 - 并且因此用这个初始标记调用你的onNewToken