Firebase Google 登录 (iOS) - 从未调用过 GIDSignInUIDelegate 方法

Posted

技术标签:

【中文标题】Firebase Google 登录 (iOS) - 从未调用过 GIDSignInUIDelegate 方法【英文标题】:Firebase Google Sign In (iOS) - GIDSignInUIDelegate methods never called 【发布时间】:2019-06-22 21:36:14 【问题描述】:

使用 Firebase 身份验证通过 Google 登录。我可以成功登录,并且在 AppDelgate 类中调用了 sign didSignInForUser 方法,但从未调用过相应的 UI 委托方法。 为什么没有在 UIViewController 中调用 uiDelegate 方法的任何想法?

class ViewController: UIViewController, GIDSignInUIDelegate 

override func viewDidLoad() 
    super.viewDidLoad()
    GIDSignIn.sharedInstance().uiDelegate = self


// This method is never called
func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!,
            withError error: NSError!) 
    if (error == nil) 
        // Perform any operations on signed in user here.
     else 
        print("\(error.localizedDescription)")
    


class AppDelegate: UIResponder, UIApplicationDelegate, GIDSignInDelegate 

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool 
    // Override point for customization after application launch.
    FirebaseApp.configure()

    // Initialize sign-in
    GIDSignIn.sharedInstance().clientID = "CLIENT_ID"
    GIDSignIn.sharedInstance().delegate = self

    return true


// This is called in AppDelagte on successful sign in
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!,
          withError error: Error!) 
    if let error = error 
        print("\(error.localizedDescription)")
     else 
        // Perform any operations on signed in user here.
    

【问题讨论】:

【参考方案1】:

首先,我假设您运行的是 ios 11 或更高版本。我在您的代码中没有看到任何 GIDSignInUIDelegate 方法实现。 didSignInForUser 是一个 GIDSignInDelegate 方法。但是如果你确实实现了GIDSignInUIDelegate 并且没有得到回调,这就是原因。

signInWillDispatch:error: 确实应该被调用。但您的问题可能出在signIn:presentViewController:signIn:dimissViewController:。故意不调用这两个方法,因为底层 SFAuthenticationSession 提供了开发人员无法访问的私有 API 的登录流程,因此这些回调是不可能的。

在这里查看我的完整答案:https://***.com/a/57112433/1433612

【讨论】:

以上是关于Firebase Google 登录 (iOS) - 从未调用过 GIDSignInUIDelegate 方法的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 上退出 Google 登录无法在 Flutter Firebase 中运行

Flutter Firebase Android/ios Google 登录错误

Flutter with Firebase Google 登录:断言失败 network_image_io.dart

Flutter Firebase Google Apple Facebook 登录

使用 google 登录可防止用户使用其他帐户再次登录 - iOS

Flutter:如何从谷歌登录firebase获取生日? (安卓和iOS)