J'ai implémenté l'autorisation Firebase pour me connecter à mon application iOS via Facebook et Google. Je code Swift. Lorsque l'application démarre, je dois vérifier si un utilisateur est déjà connecté afin de présenter le ViewController approprié (par exemple, si personne n'est connecté, je présente le Login View Controller, sinon je présente le Home View Controller). Si j'utilise la solution "facile" proposée par Firebase, ce qui signifie
if FIRAuth.auth()?.currentUser != nil {
// User is signed in.
// ...
} else {
// No user is signed in.
// ...
}
Ainsi, si l'utilisateur actuel n'est pas nul, cela se produit exactement comme le guide Firebase ( https://firebase.google.com/docs/auth/ios/manage-users ) des alertes peuvent se produire, ce qui signifie
"Remarque: currentUser peut également être nul car l'objet auth n'a pas terminé son initialisation. Si vous utilisez un écouteur pour suivre l'état de connexion de l'utilisateur, vous n'avez pas besoin de gérer ce cas."
Je voudrais donc implémenter l'écouteur comme suggéré dans le guide:
handle = FIRAuth.auth()?.addStateDidChangeListener() { (auth, user) in
// ...
}
L'écouteur gérera également l'état intermédiaire afin qu'il soit déclenché lors de la création de l'objet Auth. Le fait est que je ne peux vraiment pas le faire fonctionner correctement. Quelqu'un peut-il m'aider à utiliser cet écouteur afin de vérifier si un utilisateur est connecté?
Merci
Je l'ai implémenté comme ceci:
FIRAuth.auth()?.addStateDidChangeListener { auth, user in
if let user = user {
// User is signed in. Show home screen
} else {
// No User is signed in. Show user the login screen
}
}
Si vous n'avez pas besoin de l'objet Utilisateur après vérification, vous pouvez remplacer if let user = user
avec un test booléen, comme ceci:
FIRAuth.auth()?.addStateDidChangeListener { auth, user in
if user != nil {
// User is signed in. Show home screen
} else {
// No User is signed in. Show user the login screen
}
}
Où mettre l'auditeur (à partir des commentaires):
Pour les cas où je vérifiais si un utilisateur était connecté, il suffisait de le placer au début de viewDidLoad
dans le contrôleur de vue spécifique. Mais si vous avez des cas où vous devez vérifier chaque fois que vous entrez dans le contrôleur de vue spécifique, il serait préférable de le placer au début de viewDidAppear
. Mais je pense que dans la plupart des cas, vous devez vérifier une seule fois, si l'utilisateur entre dans la vue
Si vous configurez le StateDidChangeListener
dans application:didFinishLaunchingWithOptions
, vous remarquerez qu'il se déclenche une fois lorsque l'écouteur est attaché (pour définir l'état initial, qui est nil
lors de l'initialisation), puis à nouveau une fois l'initialisation terminée (potentiellement pas nil
). Il s'agit d'un comportement prévu, mais très peu pratique si vous le configurez tôt.
Une alternative à l'utilisation de l'écouteur est d'utiliser NotificationCenter
. Cela se déclenchera une fois l'initialisation terminée:
NotificationCenter.default.addObserver(forName: NSNotification.Name.AuthStateDidChange, object: Auth.auth(), queue: nil) { _ in
let user = Auth.auth().currentUser
}