Firebase 匿名 ID 的稳定性如何
Posted
技术标签:
【中文标题】Firebase 匿名 ID 的稳定性如何【英文标题】:How constant is the Firebase Anonymous ID 【发布时间】:2018-05-30 23:13:11 【问题描述】:我正在使用 Firebase 实时数据库构建应用。该应用程序最初将主要离线,但我们计划稍后进行在线更新。我打算使用匿名登录,为用户获取一个 ID 并将他的所有数据存储在此 ID 下:
Auth.auth().signInAnonymously(completion: (user, error) -> Void )
登录后,我得到一个类似这样的 ID:pCfgFOvEYEYvfWHaaaaavKgs8h33
是否保证此 ID 在给定设备上始终保持不变?我找不到任何关于此的文档。
【问题讨论】:
您将在每台设备上随机获得一个唯一的uid
。除非按照 Frank 下面的回答退出,否则它不应更改。
如果您将设备恢复出厂设置并重新安装应用程序,uid
是否保持不变?
【参考方案1】:
用户的 UID从不改变。因此,在您匿名登录用户后,UID 将保持不变(即使您再次拨打signInAnonymously
),直到您拨打signout
,或直到用户卸载应用程序。
【讨论】:
太棒了,那我就靠它了 :) 根据signInAnonymously
的文档:“如果已经有匿名用户登录,则将返回该用户。”,所以它好像可以多次调用而不生成新的ID..
哦?这对我来说很新鲜。过去,许多开发人员都在为此苦苦挣扎,所以这将是一个值得欢迎的变化。
如果用户卸载应用并重新安装会怎样?那么 UID 会改变吗?
@FrankvanPuffelen 有没有办法在使用signInAnonymously
登录/注销之间保持相同的 UID?我们跟踪一些用户数据,我们真的很想将其链接到 uid 而不是设备 id
UID一旦消失就无法恢复。在这种情况下,您需要实现自己的自定义登录。但问题是:您需要基于设备 ID 让它在重新安装后仍然有效。【参考方案2】:
这是我使用 Flutter 发现的:
如果您调用FirebaseAuth.signInAnonymously()
两次而中间没有调用FirebaseAuth.signOut()
,您将获得与第一次调用相同的uid(来自AuthResult.user.uid
)。即使您关闭应用程序并致电FirebaseAuth.signInAnonymously()
也是如此
如果你调用FirebaseAuth.signOut()
,然后调用FirebaseAuth.signInAnonymously()
,你会得到一个新的uid
如果您卸载该应用并致电FirebaseAuth.signInAnonymously()
,您将获得与之前安装不同的 uid
总结一下,如果你在signOut()
之后或者卸载应用之后调用signInAnonymously()
,你会得到一个新的uid。
【讨论】:
这是一个很好的答案!【参考方案3】:你应该check this out:
Firebase 还允许匿名身份验证会话,这些会话通常是 用于在等待客户端时保留少量数据 使用永久身份验证方法进行身份验证。 这些匿名会话 可以配置为持续数天、数周、数月甚至数年……直到 用户使用永久登录方法登录或清除浏览器 缓存。 Web 应用程序通常使用本地数据存储,如 sessionStorage 或 localStorage 来完成类似的任务。
不能保证 ID 在给定设备上始终保持不变。 Firebase 将匿名身份验证会话存储到浏览器的localStorage。如果用户以隐身模式/隐私浏览模式、其他浏览器打开您的应用程序,或者他们清除了浏览器的 localStorage,firebase 将发出另一个用户 ID。
【讨论】:
【参考方案4】:如果您以匿名方式登录,那么您的 UID 将保持不变,直到您注销为止。注销并再次登录后,您将获得一个新的 UID。甚至当用户卸载应用程序时,你也会再次获得 UID。
【讨论】:
【参考方案5】:Firebase UID 将在退出、从设置中清除应用数据以及卸载后重新安装应用时更改。
【讨论】:
以上是关于Firebase 匿名 ID 的稳定性如何的主要内容,如果未能解决你的问题,请参考以下文章
Firebase FCM 变得非常不稳定。寻找解决方案/替代方案