FirebaseUI "Sign in with email" 在点击时什么都不做

FirebaseUI "Sign in with email" does nothing when tapped

我有以下代码直接取自 this blog。当我将 SignInViewUI 放入我的视图时,此代码成功显示具有 Google 登录、Apple 登录和电子邮件登录的 FirebaseUI。

Google 和 Apple 登录功能均正常。 点击电子邮件登录时不执行任何操作。


import Firebase
import FirebaseUI
import SwiftUI
typealias AM = AuthManager
class AuthManager : NSObject{
       
    static let shared = AuthManager()

    var authViewController : UIViewController {
        return MyAuthViewController(authUI: FUIAuth.defaultAuthUI()!)
    }
    
    init(withNavigationBar : Bool = false){
        FirebaseApp.configure()
        super.init()
        self.setupProviders()
    }
    
    private func setupProviders(){
        let authUI = FUIAuth.defaultAuthUI()!
        let providers: [FUIAuthProvider] = [
            FUIGoogleAuth.init(authUI: authUI),
            FUIOAuth.appleAuthProvider(),
            FUIEmailAuth()]
        authUI.providers = providers
    }
}

extension AuthManager {
    // an optional handler closure for error handling
    func signOut(onError handler : ((Error?) -> Void)? = nil ){
        do {
            try FUIAuth.defaultAuthUI()?.signOut()
            if let handler = handler {
                handler(nil)
            }
        }
        catch (let err){
            if let handler = handler {
                handler(err)
            }
        }
    }
    
    func isSignedIn() -> Bool {
        if let _ = Firebase.Auth.auth().currentUser{
            return true
        }
        return false
    }
}

extension AuthManager {
    func setAuthDelegate(_ delegate : FUIAuthDelegate){
        FUIAuth.defaultAuthUI()?.delegate = delegate
    }
}

class MyAuthViewController : FUIAuthPickerViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let scrollView = view.subviews[0]
        scrollView.backgroundColor = .clear
        let contentView = scrollView.subviews[0]
        contentView.backgroundColor = .clear
        view.backgroundColor = .clear
    }
}


struct SignInViewUI: UIViewControllerRepresentable {
    
    func makeUIViewController(context: UIViewControllerRepresentableContext<SignInViewUI>) ->
        UIViewController {
        return AM.shared.authViewController
    }

    func updateUIViewController(_ uiViewController: UIViewController,
               context: UIViewControllerRepresentableContext<SignInViewUI>) {
        // empty
    }
}

根据 this GitHub issue 上的最终评论,我认为这与电子邮件登录所需的导航控制器有关。

SignInViewUI 包围在 NavigationView 中允许按钮工作。

其次,FirebaseApp.configure() 行必须从 AuthManager 中删除并放入 AppDelegate application(_ application: UIApplication, didFinishLaunchingWithOptions ... 方法中。