【发布时间】:2018-03-17 10:05:39
【问题描述】:
在整个应用程序中,我使用两种方法在任何给定时间获取当前用户 ID。我在某个地方捡到了它们两个,并且(据我所知)工作正常。然后我使用方法 3 作为方法 2 的变体。
方法一:
if let user = Auth.auth().currentUser{
let uid = user.uid
}
方法二:
handle = Auth.auth().addStateDidChangeListener { (auth, user) in
if let user = user {
// User is signed in.
self.USER = user
self.userID = self.USER?.uid
} else {
// No user is signed in.
let vc = self.storyboard?.instantiateViewController(withIdentifier: "LoginScreen")
self.present(vc!, animated: true, completion: nil)
}
方法三:
handle = Auth.auth().addStateDidChangeListener { (auth, user) in
if let user = user {
// User is signed in.
self.USER = user
self.userID = self.USER?.uid
} else {
// No user is signed in.
}
现在看来方法 1 和 3 的工作原理大致相同,而方法 2 让我更频繁地返回登录屏幕(例如,当手机从 3G 转到 Wifi 或飞行模式时)。
鉴于我希望我的应用长时间保持登录状态(即使进入后台并返回),建议使用方法 1 或 3。但是,我不太明白
- 方法一和方法三的区别
- 当 1 和 3 无法建立连接时,应用程序应该做什么?是否应该冻结直到重新建立连接?我担心方法 1 和 3 可能更容易崩溃。但是方法 2 看起来很烦人。
一般来说,一旦用户通过 Firebase 正确进行身份验证,应用程序是否有理由返回登录屏幕?用户能否在任意时间段内不保持登录状态(例如 Facebook 会)?如果是这样,我可以通过哪种方法来实现?
【问题讨论】:
-
好的,所以在检查时,我想我可能会误解和滥用上述代码。我认为方法 2 应该在登录屏幕的 ViewWillAppear 中,如果用户登录它直接进入应用程序,否则它会停留在登录屏幕上。我不认为在整个应用程序中都需要方法 2 和 3,一旦我在应用程序中,如果我需要用户 ID,我可以使用方法 1 执行所有操作。对吗?
标签: ios swift firebase firebase-authentication