Ich setze den Root-View-Controller meines Fensters sofort als Login-Controller ein und der Login-Controller prüft die Benutzerauthentifizierung von Firebase. Wenn der Benutzer angemeldet ist, ändert der Controller den Root-View-Controller als Feed-Controller. Ansonsten läuft der Login-Controller wie er selbst ab.Swift Firebase prüft die Authentifizierung reibungsloser
class LoginController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if let uid = Auth.auth().currentUser?.uid {
Database.database().reference().child("users").observeSingleEvent(of: .value, with: { snapshot in
if snapshot.hasChild(uid) {
AppDelegate.launchApplication()
}
else {
self.setUpUI()
}
})
}
else {
self.setUpUI()
}
}
...
}
wo launchApplication
class func launchApplication() {
guard let window = UIApplication.shared.keyWindow else { return }
window.rootViewController = UINavigationController(rootViewController: FeedController())
}
Neben if let uid = Auth.auth().currentUser?.uid
ist, ich überprüfen, ob die uid (wenn es nicht nil
ist) existiert in meiner Datenbank, weil ich die Situation gehabt haben, wo ein gelöschter Benutzer war immer noch nicht nil
.
Das Problem ist, dass nach dem Startbildschirm, gibt es einen Moment, wenn der Login-Controller, obwohl leer, sichtbar ist. Manchmal dauert dieser Moment ein paar Sekunden. Wie kann ich die Authentifizierung so überprüfen, dass der Login-Controller überhaupt nicht sichtbar ist, sodass die App sofort nach dem Verschwinden des Startbildschirms entscheidet, wie weiter verfahren wird? Vielen Dank.
haben Sie gerade versucht, von Appdelegate zu präsentieren? Es passiert, weil Sie zuerst loginController initialisieren, weshalb Residuen angezeigt werden. –