将 GoogleSignIn 的 pod 版本从以前的版本更改为 v5.0.0. 时出现问题
您必须将
GIDSignInUIDelegate
更改为 GIDSignInDelegate
作为 GoogleSignIn 文档中的示例:
https://developers.google.com/identity/sign-in/ios/sign-in?ver=swift
GIDSignInUIDelegate
协议曾经需要在启动 GIDSignIn.sharedInstance().signIn()
的 UIViewController 中实现。那个 UIViewController 必须使用 GIDSignIn.sharedInstance().uiDelegate = self
. 注册自己
从 GoogleSignIn 5.0.0 开始,这已经改变了。启动
GIDSignIn.sharedInstance().signIn()
的UIViewController应该使用GIDSignIn.sharedInstance()?.presentingViewController = self
注册自己,显然不再需要实现不再存在的GIDSignInUIDelegate
。
GIDSignInDelegate
仍然打算在 AppDelegate 中实现,它应该使用 GIDSignIn.sharedInstance().delegate = self
注册自己。
另请参阅:https://developers.google.com/identity/sign-in/ios/quick-migration-guide
无需使用
GIDSignInUIDelegate
,查看此链接以获取迁移指南:https://developers.google.com/identity/sign-in/ios/quick-migration-guide#migrating_from_versions_prior_to_v500
只需使用
GIDSignInDelegate
并将GIDSignIn.sharedInstance().uiDelegate = self
替换为GIDSignIn.sharedInstance()?.presentingViewController = self
和
GIDSignIn.sharedInstance().handle(url,
sourceApplication: sourceApplication,
annotation: annotation)
与
GIDSignIn.sharedInstance().handle(url)
这是我的应用程序因
UIWebView
而被拒绝的地方
不要使用 GIDSignIn.sharedInstance().uiDelegate = self 和 GIDSignInUIDelegate 协议。仅使用 GIDSignInDelegate 协议并导入 GoogleUtilities。实施 sigin 方法。
import UIKit
import Firebase
import GoogleSignIn
import FirebaseAuth
import GoogleUtilities
class LoginViewController: UIViewController, GIDSignInDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
GIDSignIn.sharedInstance().delegate = self
GIDSignIn.sharedInstance()?.presentingViewController = self
}
@IBAction func googleSignIn(sender: AnyObject) {
GIDSignIn.sharedInstance().signIn()
}
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
print("Google Sing In didSignInForUser")
if let error = error {
print(error.localizedDescription)
return
}
guard let authentication = user.authentication else { return }
let credential = GoogleAuthProvider.credential(withIDToken: (authentication.idToken)!, accessToken: (authentication.accessToken)!)// When user is signed in
Auth.auth().signIn(with: credential, completion: { (user, error) in
if let error = error {
print("Login error: \(error.localizedDescription)")
return
} }) }
}
如果您使用的是最新的谷歌歌唱 sdk,请在按钮操作上使用此代码
let signInConfig = GIDConfiguration.init(clientID: KGoogle.clientID)
GIDSignIn.sharedInstance.signIn(with: signInConfig, presenting: self) { user, error in
guard error == nil else { return }
guard let user = user else { return }
if let profiledata = user.profile {
let userId : String = user.userID ?? ""
let givenName : String = profiledata.givenName ?? ""
let familyName : String = profiledata.familyName ?? ""
let email : String = profiledata.email
if let imgurl = user.profile?.imageURL(withDimension: 100) {
let absoluteurl : String = imgurl.absoluteString
//HERE CALL YOUR SERVER API
}
}
}
如果 GIDSignInDelegate 不再存在,我们应该使用哪些协议?