使用Google帐户登录后如何执行segue?

时间:2016-10-14 07:23:15

标签: ios swift xcode firebase firebase-authentication

我一直在使用Google帐户登录。

我基本上遵循了Friebase(https://firebase.google.com/docs/auth/ios/google-signin

的指南

虽然有效,但我无法通过登录页面

对我的主页执行segue

这是我登录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)
    }
}

如果我将performSegue放在signIn函数中但它没有

,它应该可以工作

成功登录谷歌后,会返回受保护(登录)页面

我一直在努力尝试拍摄这个问题近6个小时,仍然无法弄明白!!!

自学是一种痛苦。

任何帮助表示赞赏!!! 谢谢!

伊恩。

更新

所以现在我的代码如下:

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!) {

}

我添加了GIDsignDeligate协议,否则会出现错误  “GIDSignIn.sharedInstance()。delegate = self”

当我运行它时,它崩溃了“在展开可选值错误时意外发现了nil”(似乎发生在“if let authentication = user.authentication” )

我错过了什么吗? 我觉得我快到了!

1 个答案:

答案 0 :(得分:0)

只需将 GIDSignIn.sharedInstance().delegate = self 添加到viewDidLoad函数: -

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

将您的登录用户功能更改为: -

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

                            }
                    })
            }
}

PS: - 这是swift3版本,所以不要只复制粘贴它。尝试编写它并自动完成将有所帮助。