instanceId 和 getIdToken 有啥区别

Posted

技术标签:

【中文标题】instanceId 和 getIdToken 有啥区别【英文标题】:What's the difference between instanceId and getIdTokeninstanceId 和 getIdToken 有什么区别 【发布时间】:2019-06-20 19:03:52 【问题描述】:

我不明白这之间有什么区别:

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



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

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

【问题讨论】:

【参考方案1】:

getIdToken(boolean forceRefresh)

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

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

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

实例 ID 是稳定的,除非:

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

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

【讨论】:

【参考方案2】:

这两个令牌的用途和生命周期截然不同。

使用 Firebase 云消息传递的每个应用安装都有自己唯一的实例 ID。因此,此 ID 标识了自设备上的单个应用程序。如果您在同一部手机上有多个使用 FCM 的应用程序,则每个应用程序都有自己的实例 ID。如果您在多部手机上使用 FCM 的同一应用程序,则它在每部手机上都有一个唯一的实例 ID。 Peter 的回答很好地解释了这个值何时会改变。

每次用户使用 Firebase 身份验证登录时,他们都会获得一个 ID 令牌。此 ID 令牌有效期为一小时,并验证用户已登录该应用程序。 (略少于)一个小时后,Firebase SDK 会刷新 ID 令牌。

【讨论】:

以上是关于instanceId 和 getIdToken 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

如何从 "getFirebase().auth().currentUser.getIdToken() "中获取字符串值。

Firebase getIDToken 以及如何在 API 调用中使用它

Firebase 身份验证:每次获取或设置 cookie 时都有 getIdToken?

eureka.instance.instance-id 和 eureka.instance.metadataMap.instanceId 有啥区别?

Android 和 iOS gcm instanceID

为啥 InstanceID 总是返回一个令牌,尽管有错误的 senderId?