Donc, mon application a la possibilité de se connecter avec Google. Lorsque vous cliquez sur le bouton fourni par Google, une vue Web s'ouvre et invite l'utilisateur à saisir ses informations d'identification. Après avoir autorisé l'application à accéder à leurs informations, l'application connecte l'utilisateur et modifie le SignInViewController en TabBarController (où ils peuvent désormais interagir en conséquence).
Lorsque l'utilisateur appuie sur un bouton de déconnexion, il est dirigé vers l'écran de connexion comme on peut s'y attendre. Mais ce qui est étrange, c’est que si l’utilisateur appuie à nouveau sur le bouton Google, il est automatiquement connecté, sans autre authentification ni possibilité de supprimer son compte. S'agit-il d'un moyen de supprimer les informations d'identification du compte Google afin de protéger les utilisateurs contre le vol accidentel?
Fonction de connexion:
func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, withError error: NSError!) {
if let error = error {
print(error.localizedDescription)
return
}
let authentication = user.authentication
let credential = FIRGoogleAuthProvider.credentialWithIDToken(authentication.idToken, accessToken: authentication.accessToken)
FIRAuth.auth()?.signInWithCredential(credential) { (user, error) in
// ...
SignInViewController().signedIn(user)
}
// ...
}
Fonction de déconnexion:
func signOutOverride() {
do {
try! FIRAuth.auth()!.signOut()
CredentialState.sharedInstance.signedIn = false
// Set the view to the login screen after signing out
let storyboard = UIStoryboard(name: "SignIn", bundle: nil)
let loginVC = storyboard.instantiateViewControllerWithIdentifier("SignInVC") as! SignInViewController
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
appDelegate.window?.rootViewController = loginVC
} catch let signOutError as NSError {
print ("Error signing out: \(signOutError)")
}
}
Rapide
essayez GIDSignIn.sharedInstance().signOut()
objectif c
[[GIDSignIn sharedInstance] signOut];
Oui, comme @Rahul a dit que suivre le code serait la bonne façon de procéder.
GIDSignIn.sharedInstance().signOut()
https://developers.google.com/identity/sign-in/ios/sign-in?ver=Swift#sign_out_the_user
Je voulais élaborer un peu sur les réponses précédentes après avoir joué avec le SDK GoogleSignIn
.
J'ai vu les méthodes signOut()
et disconnect()
et je me demandais quelles étaient les différences.
signOut()
est un appel synchrone:
// Immediately sets GIDSignIn.sharedInstance()?.currentUser to nil.
// For example, if the user is already signed in:
print(GIDSignIn.sharedInstance()?.currentUser != nil) // true - signed in
GIDSignIn.sharedInstance()?.signOut()
print(GIDSignIn.sharedInstance()?.currentUser != nil) // false - signed out
disconnect()
permet à un utilisateur de révoquer l'accès à l'application en plus pour se déconnecter. Je suppose que cela signifie qu'ils devront redonner toute autorisation à votre application s'ils choisissent de se connecter à nouveau.
Selon Documents Google pour les développeurs si un utilisateur choisit de déconnecter de votre application, vous devrez supprimer toutes les données Google de l'utilisateur qui ont été stockées dans votre application.
De plus, disconnect()
est asynchrone. Le résultat de l'appel de déconnexion sera renvoyé à la méthode GIDSignInDelegate.sign(_:didDisconnectWith:withError:)
.
// Also sets GIDSignIn.sharedInstance()?.currentUser to nil.
// Asynchronous call. If for example the user was already signed in:
print(GIDSignIn.sharedInstance()?.currentUser != nil) // true - signed in
GIDSignIn.sharedInstance()?.disconnect()
print(GIDSignIn.sharedInstance()?.currentUser != nil) // true - still signed in
// MARK: - GIDSignInDelegate
func sign(_ signIn: GIDSignIn!, didDisconnectWith user: GIDGoogleUser!, withError error: Error!) {
print(GIDSignIn.sharedInstance()?.currentUser != nil) // false - signed out
// Remove any data saved to your app obtained from Google's APIs for this user.
}