我正在创建一个日记应用。
我目前正在研究用户是否已经登录的功能——绕过“开始/登录活动”
在我为创建日记应用而观看的视频中,讲师调用
mUser = firebaseAuth.getCurrentUser();
次。
他在 onStart()
、onCreate()
和 onAuthStateChanged()
中调用它。我可以理解为什么我们可能需要在 onAuthStateChanged()
中再次调用它,但在这种情况下,我只是检查用户是否已经登录,因此它不应与 {{1} 中收到的用户不同}}
我从 onCreate()
和 onAuthStateChanged()
中删除了它,一切仍然正常。但是,我不确定它是否会导致我将来出错。如果有人能证实这一点,我将不胜感激。
我们需要多次调用 onStart()
是否有原因?
谢谢。
这是我的完整代码供参考:
getCurrentUser()
答案 0 :(得分:3)
虽然登录是一个活动过程,但您的代码通过调用 signInWith
方法之一触发,维护身份验证状态并在应用重启时恢复它是使用 Firebase SDK 时自动发生的后台过程。这很棒,因为这意味着您无需编写代码来保持令牌有效,也无需检查用户配置文件是否已更改或他们的帐户是否已被禁用。
但这确实意味着您无法在很长时间内可靠地将 firebaseAuth.getCurrentUser()
的值缓存在变量中。如果您将该值保存在一个变量中,然后 SDK 在后台更新身份验证状态,您的代码可能不再查看 firebaseAuth.getCurrentUser()
的正确值。
这就是为什么您会看到比预期更多的对 firebaseAuth.getCurrentUser()
的调用,也是为什么您会在希望在身份验证状态更改时收到通知的地方看到 firebaseAuth.addAuthStateListener
,例如用户通过 SDK 登录或退出。
答案 1 :(得分:0)
每次你想检查用户的当前会话时你都必须调用这个方法,因为用户的会话可以从另一个服务或方法中改变,如果你不调用这个方法而只调用一次,你将不会有最新用户的个人资料信息、身份验证会话等。