firebase的app令牌在什么时期发生变化以及如何管理它?

roo*_*mir 44 android push-notification firebase firebase-cloud-messaging

我是firebase的新手,我正在学习它,就像一个学习走路的小孩.到目前为止,我已经设法使用firebase框架为我的手机生成的令牌向我自己的手机发送消息.现在这里变得棘手(在我看来).onTokenRefresh()FirebaseInstanceIdService扩展服务中调用了一个方法.因为它被称为刷新,然后我假设它会改变.我想知道何时创建此令牌以及何时更改它?

如果它发生变化,假设我发送的消息带有令牌"A"的设备,该设备现在处于脱机状态,因此它将排队.现在,当设备上线时,它会将令牌"刷新"为"B".现在,由于消息应该传递给令牌"A",因此永远不会传递消息.我该如何处理这种情况?

Die*_*ini 56

只要手机可以连接到Google服务器,就会在应用首次启动后生成令牌.由于所需的连接性,这可能不会立即发生,但在大多数情况下,它将在用户打开应用程序后的几秒钟内发生.一旦生成令牌,onTokenRefresh()就会调用该方法.

正如您所指出的那样,令牌可以改变,在这种情况下,onTokenRefresh()将再次调用该方法.
刷新事件在某种程度上是罕见的,不要指望经常看到它.

当刷新令牌发生时,所有已"成功"发送的消息(API将消息ID返回给旧令牌)将被传递.

最后,即使在刷新发生之后,旧令牌仍将在短时间内工作,以允许应用程序将新令牌传送到其后端.

  • 当用户注册到应用程序时,我想在我的android app用户的数据库表中存储FCM令牌.当我想向特定用户发送通知时,我将从相应的行获取令牌并发送推送通知.但我很困惑,每当应用程序用户从他的应用程序注销并从同一设备注册新帐户,那么将有两行因此数据库上同一设备的两个令牌.如何处理这种情况?设备中的旧令牌会发生什么?请有人可以帮帮我吗? (9认同)
  • @DiegoGiorgini 您能否在 FCM 文档中添加这些详细信息? (2认同)
  • 有人可以告诉我令牌刷新的原因是什么?是否有默认时间,之后令牌会确定刷新? (2认同)
  • @RoshanSharma 您应该使用设备 ID 将 firebase 令牌发送到服务器。在向行添加新令牌之前,查找设备 ID(如果存在)然后删除。比插入它 (2认同)

小智 25

在应用程序首次启动时,FCM的sdk会为客户端应用程序实例生成注册令牌.如上所述,这是一个罕见的事件.具体而言,注册令牌可能在以下情况下发生变化:

  • 该应用程序删除实例ID.
  • 该应用程序将在新设备上恢复
  • 用户卸载/重新安装应用程序
  • 用户清除应用数据.

实例ID为您的app的每个实例提供唯一ID .Instance ID提供了一个简单的API来生成安全令牌,授权第三方访问您应用的服务器端托管资源.实例ID服务器甚至可以告诉您何时应用程序所在的设备已安装上次使用.我们可以使用它来决定是从应用程序保留数据还是发送推送消息以重新与用户互动.

每次更改设备令牌时,它都会反映在onTokenRefresh()方法中.为了在设备令牌更改时获取设备令牌,我们可以调用此方法来获取刷新的令牌.

并且为了在任何时候获取设备令牌,我们可以使用FirebaseInstanceId.getInstance().getToken()方法来获取当前设备令牌.获取设备令牌需要一些时间.

单击此处以阅读有关访问设备注册令牌的更多信息