Я реализовал Firebase Auth и Firebase Database в делегате приложения, который проверяет, вошел ли пользователь в систему или нет. Он проверяет узел 'users' в базе данных, чтобы увидеть, есть ли идентификатор пользователя в дочерних снимках или нет, и эта операция занимает около 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 - это начальный viewController. Когда экран запуска исчезает, показывается viewController входа в систему, и если пользователь вошел в систему, показывается Main viewController, но в этом случае есть временной интервал 2-3 секунды, для которого показывается viewController входа в систему.
Я тоже пытался реализовать NavigationController, но та же проблема.
Так как я могу не отображать Login viewController, если пользователь вошел в систему и сразу перешел к главному viewController, и эффективно управлял этим 2-3-секундным интервалом времени.