首页 > 解决方案 > 我们什么时候应该刷新 android 设备令牌?

问题描述

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

为避免滥用,我在此处留下有关我的案例的额外信息:我在 Android Studio 模拟器上运行我的应用程序并检查数据库中存储的令牌,我们称之为 TOKEN-1。现在我在我的手机上安装了这个应用程序,我用String token = FirebaseInstanceId.getInstance().getToken(); Toast.makeText(MainActivity.this, token, Toast.LENGTH_LONG).show(); The token is different that the first token-1 and TOKEN-1 仍然存储在我的数据库中来显示令牌。这意味着我只能在模拟器上而不是手机上接收通知。

对不起,我的文字很长,期待阅读您的建议。

标签: androidpush-notificationfirebase-cloud-messaging

解决方案


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

正如您似乎期望的那样,不能保证您的 FCM 令牌会每小时(甚至永远)刷新一次。给定 1 小时的间隔,您可能会想到 Firebase身份验证ID 令牌,这些令牌是短暂的,并且确实每小时刷新一次。

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

onNewToken最后一段代码在开发过程中是最需要的,因为当您还没有侦听器时,您最有可能遇到生成令牌的场景。因此,除了将代码放入主活动中,您还可以在添加onNewToken侦听器后卸载/重新安装应用程序,因为在这种情况下,FCM 将在安装应用程序时生成一个新令牌 - 并因此onNewToken使用此初始令牌调用您。


推荐阅读