¿Cómo realizo la segue después de iniciar sesión con la cuenta de Google?

2

He estado trabajando para iniciar sesión con la cuenta de Google.

Básicamente seguí la guía de Friebase ( https://firebase.google.com/docs/auth/ios/google-signin )

Funcionó, pero tengo problemas para realizar la transición a mi página principal desde la página de inicio de sesión

aquí está el código en mi controlador Signin View:

class SignInController: UIViewController,  GIDSignInUIDelegate{

@IBOutlet weak var signInButton: GIDSignInButton!


override func viewDidLoad() {
    super.viewDidLoad()
    GIDSignIn.sharedInstance().uiDelegate = self
    GIDSignIn.sharedInstance().signInSilently()

    }

func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, withError error: NSError!) {
    if let err = error {
        print(error)
    }
    else {
        performSegue(withIdentifier: "GoToMain", sender: self)
    }
}

debería funcionar si puse performSegue en la función de inicio de sesión pero no lo hizo

después de iniciar sesión con Google correctamente, vuelve a la página protegida (iniciar sesión)

He estado trabajando y tratando de solucionar este problema durante casi 6 horas, ¡¡¡todavía no puedo resolverlo !!!

el autoaprendizaje es muy doloroso.

se agradece cualquier ayuda !!! ¡¡Gracias!!

Ian.

actualizar

así que ahora mi código es como el siguiente:

class SignInController: UIViewController,  GIDSignInUIDelegate, GIDSignInDelegate {

@IBOutlet weak var signInButton: GIDSignInButton!


override func viewDidLoad() {
    super.viewDidLoad()
    GIDSignIn.sharedInstance().delegate = self
    GIDSignIn.sharedInstance().uiDelegate = self
    GIDSignIn.sharedInstance().signInSilently()
    GIDSignIn.sharedInstance().clientID = FIRApp.defaultApp()?.options.clientID


    }

public func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {


    if let authentication = user.authentication
    {
        let credential = FIRGoogleAuthProvider.credential(withIDToken: authentication.idToken, accessToken: authentication.accessToken)

        FIRAuth.auth()?.signIn(with: credential, completion: { (user, error) -> Void in
            if error != nil
            {
                print("Problem at signing in with google with error : \(error)")

            }
            else if error == nil{
                print("user successfully signed in through GOOGLE! uid:\(FIRAuth.auth()!.currentUser!.uid)")

            }
        })
    }
}

func signIn(signIn: GIDSignIn!, didDisconnectWithUser user: GIDGoogleUser!, withError error: NSError!) {

}

Agregué el protocolo GIDsignDeligate; de ​​lo contrario, habrá un error en la línea "GIDSignIn.sharedInstance (). Delegate = self"

Cuando lo ejecuté, se bloqueó con "inesperadamente encontrado nulo al desenvolver un error de valor opcional" (parece ocurrir en "if let authentication = user.authentication")

¿Me estoy perdiendo algo? ¡Siento que casi estoy allí!

2
  • Ponga un punto de interrupción y vea si se performSegueestá ejecutando o no.
    Bista
    14/10/2016 a las 7:25
  • @ Mr.Bista, gracias por su respuesta, parece que toda la función de inicio de sesión no funciona en absoluto,
    Ian
    14/10/2016 a las 7:33
1

Simplemente agregue GIDSignIn.sharedInstance().delegate = selfa su función viewDidLoad: -

 override func viewDidLoad() {
  super.viewDidLoad()
   GIDSignIn.sharedInstance().uiDelegate = self
   GIDSignIn.sharedInstance().signInSilently()
   GIDSignIn.sharedInstance().clientID = FIRApp.defaultApp()!.options.clientID
   GIDSignIn.sharedInstance().delegate = self
}

Y cambie su función de usuario de inicio de sesión a: -

func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, withError error: NSError!) {


    if let authentication = user.authentication
    {
        let credential = FIRGoogleAuthProvider.credential(withIDToken: authentication.idToken, accessToken: authentication.accessToken)

        FIRAuth.auth()?.signIn(with: credential, completion: { (user, error) -> Void in
        if error != nil
        {
            print("Problem at signing in with google with error : \(error)")

            }
        else if error == nil{
            print("user successfully signed in through GOOGLE! uid:\(FIRAuth.auth()!.currentUser!.uid)")

                            }
                    })
            }
}

PD: - Esta es la versión swift3, así que no se limite a copiar y pegar. Intente escribirlo y autocompletar le ayudará.

7
  • Actualicé mi pregunta y me pregunto si podría ayudarme amablemente.
    Ian
    14/10/2016 a las 15:32
  • Prueba a imprimir usery authentication, ¿qué obtienes? ¿Estás codificando en swift2 o swift 3? 15/10/2016 a las 9:17
  • ¡Hola Dravidian! siempre que elimine el signo de exclamación en
    Ian
    15/10/2016 a las 15:32
  • didSignInForUser usuario: GIDGoogleUser !,
    Ian
    15/10/2016 a las 15:32
  • no chocará. Pero luego voy a este <FIRInstanceID / WARNING> No se pudo recuperar el token predeterminado Error Domain = com.firebase.iid Code = 6 "(null)" <FIRInstanceID / WARNING> No se pudo recuperar el token GCM predeterminado después de 5 reintentos
    Ian
    15/10/2016 a las 15:34