更改 GoogleSignIn pod 版本时使用未声明的类型“GIDSignInUIDelegate”

问题描述 投票:0回答:6

将 GoogleSignIn 的 pod 版本从以前的版本更改为 v5.0.0. 时出现问题

swift xcode google-signin
6个回答
18
投票

您必须将

GIDSignInUIDelegate
更改为
GIDSignInDelegate
作为 GoogleSignIn 文档中的示例:

https://developers.google.com/identity/sign-in/ios/sign-in?ver=swift


9
投票

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


1
投票

无需使用

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

而被拒绝的地方

0
投票

不要使用 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
            }    })  }
    
}

0
投票

如果您使用的是最新的谷歌歌唱 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
        }
    }
    
}

-3
投票

如果 GIDSignInDelegate 不再存在,我们应该使用哪些协议?

© www.soinside.com 2019 - 2024. All rights reserved.