首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FirebaseUI和SwiftUI LoginG

FirebaseUI和SwiftUI LoginG
EN

Stack Overflow用户
提问于 2019-10-12 18:36:16
回答 1查看 1.2K关注 0票数 2

我正在尝试使用swiftUI在iOS应用程序中实现firebaseUI登录。

我可以使用主登录视图,但无法控制用户登录后的流程。

这是我的“登录控制器”的代码。

代码语言:javascript
复制
import SwiftUI
import FirebaseUI

struct CustomLogin: UIViewControllerRepresentable {
    func makeUIViewController(context: Context) -> UIViewController {
        let authUI = FUIAuth.defaultAuthUI()
        let providers: [FUIAuthProvider] = [
          FUIEmailAuth(),
          FUIFacebookAuth()

         // FUIPhoneAuth(authUI:FUIAuth.defaultAuthUI()),
        ]
        authUI?.providers = providers
        let authViewController = authUI?.authViewController()
      //  let controller = UIViewController()

     //   authUI!.delegate = self
        return authViewController!

       }

       func updateUIViewController(_ uiViewController: UIViewController, context: Context) {


    }

}

struct CustomLogin_Previews: PreviewProvider {
    static var previews: some View {
        CustomLogin()
    }
}

我可以通过将CustomLogin())添加到我的内容视图来显示登录流程。

用户登录后如何管理回调?

用户是在firebase中创建的,但视图没有更新。

如果有人用SwiftUI实现了firebaseUI登录,我很感激。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-12-13 12:26:03

我能够根据你的代码和一些苹果教程实现一些有用的东西。基本上,您需要向UIViewControllerRepresentable添加一个协调器。您可以将您的委派添加到协调器。

下面是我的scratch代码:

代码语言:javascript
复制
import SwiftUI
import FirebaseUI
import Firebase

public var screenWidth: CGFloat {
    return UIScreen.main.bounds.width
}

public var screenHeight: CGFloat {
    return UIScreen.main.bounds.height
}

struct LoginView : View {

    @State private var viewState = CGSize(width: 0, height: screenHeight)
    @State private var MainviewState = CGSize.zero

    var body : some View {
        ZStack {
            CustomLoginViewController { (error) in
                if error == nil {
                    self.status()
                }
            }.offset(y: self.MainviewState.height).animation(.spring())
            MainView().environmentObject(DataStore()).offset(y: self.viewState.height).animation(.spring())
        }
    }

    func status() {
        self.viewState = CGSize(width: 0, height: 0)
        self.MainviewState = CGSize(width: 0, height: screenHeight)
    }
}

struct LoginView_Previews : PreviewProvider {
    static var previews : some View {
        LoginView()
    }
}

struct CustomLoginViewController : UIViewControllerRepresentable {

    var dismiss : (_ error : Error? ) -> Void

    func makeCoordinator() -> CustomLoginViewController.Coordinator {
        Coordinator(self)
    }

    func makeUIViewController(context: Context) -> UIViewController
    {
        let authUI = FUIAuth.defaultAuthUI()

        let providers : [FUIAuthProvider] = [
            FUIEmailAuth(),
            FUIGoogleAuth(),
            FUIOAuth.appleAuthProvider()
        ]

        authUI?.providers = providers
        authUI?.delegate = context.coordinator

        let authViewController = authUI?.authViewController()

        return authViewController!
    }

    func updateUIViewController(_ uiViewController: UIViewController, context: UIViewControllerRepresentableContext<CustomLoginViewController>)
    {

    }

    //coordinator
    class Coordinator : NSObject, FUIAuthDelegate {
        var parent : CustomLoginViewController

        init(_ customLoginViewController : CustomLoginViewController) {
            self.parent = customLoginViewController
        }

        // MARK: FUIAuthDelegate
        func authUI(_ authUI: FUIAuth, didSignInWith authDataResult: AuthDataResult?, error: Error?)
        {
            if let error = error {
                parent.dismiss(error)
            }
            else {
                parent.dismiss(nil)
            }
        }

        func authUI(_ authUI: FUIAuth, didFinish operation: FUIAccountSettingsOperationType, error: Error?)
        {
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58353243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档