instanceId和getIdToken有什么区别

时间:2019-01-27 17:17:37

标签: android firebase kotlin firebase-authentication firebase-cloud-messaging

我不明白两者之间有什么区别

FirebaseAuth.getInstance().currentUser.getIdToken(true).addOnSuccessListener {
    Log.d("tag",it.token) // token #1
} 



FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener {
    Log.d("tag", it.token) //token #2
}


这两种方法都返回一些令牌,它们之间有什么区别?

2 个答案:

答案 0 :(得分:2)

  

getIdToken(boolean forceRefresh)

     

为用户获取Firebase身份ID令牌;在针对自己的后端进行身份验证时非常有用。

getIdTokenFirebaseUser类中,当您使用自己的服务器时,可以使用令牌对用户进行身份验证。

getInstanceId()返回您下载的应用程序的ID,在FCM中也使用该ID,以便能够向已下载该应用程序的特定手机发送通知。

实例ID稳定,除了以下情况:

  1. 应用删除实例ID
  2. 应用已在新设备上还原
  3. 用户卸载/重新安装应用程序
  4. 用户清除应用数据

https://firebase.google.com/docs/reference/android/com/google/firebase/iid/FirebaseInstanceId.html#getInstanceId()

答案 1 :(得分:2)

两个令牌的用法和生命周期都非常不同。

每个使用Firebase Cloud Messaging的应用程序安装都有其自己的唯一实例ID。因此,此ID标识了since设备上的单个应用。如果在同一部电话上有多个使用FCM的应用程序,则每个应用程序都有其自己的实例ID。如果您在多部电话上使用FCM的同一应用程序,则每部电话上都有唯一的实例ID。彼得的答案很好地说明了何时可以更改此值。

每次用户使用Firebase身份验证登录时,他们都会获得一个ID令牌。该ID令牌的有效期为一个小时,它可以验证用户是否已登录该应用。一个小时后(不到一小时),Firebase SDK刷新ID令牌。