我一直在努力使用 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/