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 有啥区别?