我一直在使用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” )
我错过了什么吗? 我觉得我快到了!
答案 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版本,所以不要只复制粘贴它。尝试编写它并自动完成将有所帮助。