usar transferir sincronizar poner pasar google funciona fotos cuenta configurar con como ios swift authentication firebase viewcontroller

ios - transferir - sincronizar iphone con android



Cómo salir de Google después de ser autenticado (4)

Así que mi aplicación tiene la opción de iniciar sesión con Google. Al hacer clic en el botón que proporciona Google, se abre una vista web y el usuario ingresa sus credenciales. Después de permitir que la aplicación acceda a su información, la aplicación inicia sesión y cambia el SignInViewController al TabBarController (donde ahora pueden interactuar en consecuencia).

Cuando el usuario presiona el botón de cierre de sesión, se dirige a la pantalla de inicio de sesión como se podría esperar. Pero lo extraño es que, si el usuario presiona nuevamente el botón de Google, iniciará sesión automáticamente sin ninguna autenticación adicional y ninguna opción para eliminar su cuenta. ¿Es su forma de borrar las credenciales de la cuenta de Google para proteger a los usuarios de robos accidentales?

Iniciar sesión en la función:

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) } // ... }

Función de cierre de sesión:

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)") } }


Prueba mi código ..

@IBAction func onClickSignOut(_ sender: UIButton) { GIDSignIn.sharedInstance()?.signOut() // if GIDSignIn.sharedInstance()?.currentUser == nil {//Logged out // self.navigationController?.popToRootViewController(animated: true) // } else {//Not logged out // //Your code here // } /* check for user''s token */ if GIDSignIn.sharedInstance().hasAuthInKeychain() { //hasAuthInKeychain() : Checks whether the user has either currently signed in or has previous authentication saved in keychain. //Not logged out //Write your code here //...... } else { //Logged out //Write logged out code here //EX: self.navigationController?.popToRootViewController(animated: true) } }


Quería elaborar un poco sobre las respuestas anteriores después de jugar con el SDK de GoogleSignIn .

Vi los signOut() y disconnect() y me preguntaba cuáles eran las diferencias.

signOut() es una llamada síncrona:

// 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() permite a un usuario revocar el acceso a la aplicación además de cerrar la sesión. Supongo que esto significa que tendrán que volver a otorgar los permisos a su aplicación si deciden iniciar sesión nuevamente.

De acuerdo con los Documentos del desarrollador de Google, si un usuario decide desconectarse de su aplicación, deberá eliminar los datos de Google que haya almacenado en su aplicación.

Además, disconnect() es asíncrono. El resultado de la llamada de desconexión se devolverá al 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. }



Rápido

intente GIDSignIn.sharedInstance().signOut()

C objetivo

[[GIDSignIn sharedInstance] signOut];