我在应用程序委托(delegate)中实现了 Firebase Auth 和 Firebase 数据库,它检查用户是否登录。它检查数据库中的“用户”节点以查看子快照中是否有用户 ID 以及此操作大约需要 2-3 秒。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
FirebaseApp.configure()
if let uid = Auth.auth().currentUser?.uid {
Database.database().reference().child("users").child(uid).observeSingleEvent(of: .value, with: { snapshot in
if snapshot.exists() {
print("App Delegate: User found!")
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "Main")
self.window?.rootViewController = vc
self.window?.makeKeyAndVisible()
}
else{
print("App Delegate: User not found!")
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "Login")
self.window?.rootViewController = vc
self.window?.makeKeyAndVisible()
}
})
}
return true
}
登录 View Controller 是初始 View Controller 。当启动屏幕淡出时,会显示登录 viewController,如果用户已登录,则会显示主 viewController,但在这种情况下,显示登录 viewController 的时间间隔为 2-3 秒。 我也尝试实现 NavigationController 但同样的问题。
那么,如果用户已登录并直接进入主视图 Controller 并有效地管理 2-3 秒的时间间隔,我怎么能不显示登录 View Controller 。
最佳答案
在登录和注销成功时跟踪本地 session 中的 isLogin 变量,使其为真和假。当第一次登录然后检查你的 session 变量isLogin。您可以将 session 保存在 UserDefault 或 Keychain 中。这样您就可以避免遇到问题。
或者你只需要这样检查:
if FIRAuth.auth().currentUser != nil {
presentHome()
} else {
//User Not logged in
}
在那之后,当你导航到 desire viewController 时,在那里做剩下的事情。
关于ios - 应用程序委托(delegate)中的 Firebase 用户身份验证检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52077793/