【问题标题】:Auth State Managment for Firebase in AndroidAndroid 中 Firebase 的身份验证状态管理
【发布时间】:2016-04-19 21:25:40
【问题描述】:

我看到 Firebase 文档指出在登录过程中没有存储任何用户身份验证信息。不过,我对他们在内部如何处理这件事有一些疑问。

  • Firebase Android SDK 是否将身份验证状态保存在内存中? 如果是,那么为此目的使用了什么设计或模式(单例、弱引用等)?

  • 还是每次调用 ref.getAuth() 方法时都会调用一次服务端?

谢谢!

【问题讨论】:

    标签: android firebase firebase-realtime-database firebase-authentication


    【解决方案1】:

    我假设您指的是文档中描述how to store such user data in your database 的部分。它指出:

    当您对用户进行身份验证时,您的 Firebase 数据库中不会存储任何个人资料或用户状态。

    Firebase 身份验证是独立于 Firebase 数据库的服务,尽管它们可以很好地集成。

    当您使用 Firebase 身份验证登录用户时,Firebase 客户端会将生成的令牌存储在应用的 SharedPreferences 中。这意味着它可以在应用程序重新启动后继续存在(尽管它可能会在应用程序处于非活动状态时过期)。

    身份验证状态也保存在内存中。所有Firebase 对象在幕后共享同一个会话,因此它们之间只有一个对象。这也意味着您在所有 Firebase 引用中只能拥有一个经过身份验证的用户。

    调用 getAuth() 不会回调 Firebase 服务器,这就是为什么它是少数几个同步的 Firebase API 调用之一。

    【讨论】:

    • 感谢您的回复!!但是,问题的一部分仍然存在,即 Firebase 如何处理内存和存在于 AuthManager 中的对象 AuthData。例如,当您使用 OkHttp 或 Picasso 时,您可以使用对象的单个实例来避免每次使用它时分配和初始化所有处理程序、对象等。我问这个是因为我正在尝试设计应用程序的一部分,我需要知道 Firebase 身份验证是如何设计的,以了解将其插入我的应用程序的最佳方式。
    • 我添加了更多信息。请注意,这似乎要么是过早优化的严重案例,要么是您担心的问题缺乏具体性。与 Firebase SDK 相比,您自己的代码更容易引起问题(当然,这也可能发生)。
    • 询问有关 SDK 工作原理的信息并不是过早的优化,这只是一个问题。 “您自己的代码比 Firebase SDK 更容易引起问题”,这就是为什么我要询问 SDK 内部的内存管理,以便我可以以不会破坏任何东西或导致问题的方式构建我的代码。我将以不同的方式陈述这个问题:Firebase Android SDK 是否将身份验证状态保留在 RAM 内存中,还是每次创建 Firebase 对象的新实例时它都会更改?谢谢!
    • 感谢您的回复!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 2013-07-10
    • 2016-04-07
    • 2017-12-09
    • 2018-09-23
    • 1970-01-01
    相关资源
    最近更新 更多