ios - 使用google帐户登录后如何执行segue?

标签 ios swift xcode firebase firebase-authentication

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

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

它有效,但我无法从登录页面执行到我的主页的操作

这是我的登录 View Controller 中的代码:

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 函数中,它应该可以工作,但它没有

成功登录google后,返回 protected (登录)页面

我已经工作并尝试解决这个问题近 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 协议(protocol),否则该行会出现错误 “GIDSignIn.sharedInstance().delegate = self”

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

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

最佳答案

只需将 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 版本,所以不要只是复制粘贴它。尝试编写它,自动完成会有所帮助。

关于ios - 使用google帐户登录后如何执行segue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40037286/

相关文章:

objective-c - 打开文件 - cocoa

ios - Ionic 应用程序覆盖 iOS 9.1 中的 iPhone 状态栏

ios - 如何使用 coreldraw 绘制圆弧

swift - (Swift) - 如何获取函数内部变量的值

swift - 程序恢复后TitleView消失

json - 在 Swift 中将字典转换为 JSON

ios - 链接器命令失败,退出代码为 1......ios 项目错误

ios - 应用商店无法通过 Vmware 虚拟机在 Mac 上连接?

ios - 如何将 phonegap 应用程序部署到 ipad/iphone

ios - 使用 WKWebViewConfiguration 将属性 selectionGranularity 设置为 .Character 时会出现无文本选择 View 的错误