我在应用程序委托中实现了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
}
Login viewController是Initial viewController。当启动屏幕淡出时,将显示登录viewController,如果用户已登录,则显示主viewController,但在这种情况下,将显示2-3秒的时间间隔,用于显示登录viewController。 我也尝试实现NavigationController,但存在相同的问题。
因此,如果用户登录并直接进入Main viewController并有效地管理2-3个时间间隔的时间,我怎么不显示Login viewController。
答案 0 :(得分:0)
本地会话中的isLogin变量保持跟踪,在登录和注销成功时将其设置为true和false。首次登录时,然后检查您的会话变量isLogin。您可以将会话保存在UserDefault或Keychain中。这样可以避免问题。
或者您只需要检查这种方式:
if FIRAuth.auth().currentUser != nil {
presentHome()
} else {
//User Not logged in
}
之后,当您导航到所需的viewController时,请在那里做其余的事情。