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 中的无崩溃用户指标

Firebase FCM 变得非常不稳定。寻找解决方案/替代方案

代理问题

如何将匿名 Firebase 凭据保存到本地存储以外的其他地方?

Firebase的优势都有哪些?

如何防止 Firebase 上的匿名密钥?