【问题标题】:Customize FUIAuthPickerViewController自定义 FUIAuthPickerViewController
【发布时间】:2019-01-13 08:17:10
【问题描述】:

如何使用自定义按钮、自定义操作、背景、加载程序等自定义 Firebase UI Auth Picker 控制器。

我已经尝试将FUIAuthPickerViewController 子类化,但我们无法访问登录按钮

【问题讨论】:

    标签: ios firebase firebase-authentication firebaseui


    【解决方案1】:

    这是您可以创建自己的 FUIAuthPickerViewController 类的方法:

    使用以下命令创建 FUICustomLoginController.swift:

    import UIKit
    import FirebaseUI
    import FirebaseAuth
    
    class FUICustomLoginController: ViewController {
    
        var authUI: FUIAuth! = FUIAuth.defaultAuthUI()
        var auth: Auth = Auth.auth()
    
        private func didSignIn(auth: AuthCredential?, error: Error?, callBack: AuthResultCallback?) {
            let callBack: (AuthDataResult?, Error?) -> Void = { [unowned self] result, error in
                callBack?(result?.user, error)
                self.authUI.delegate?.authUI?(self.authUI, didSignInWith: result, error: error)
            }
            if let auth = auth {
                self.auth.signInAndRetrieveData(with: auth, completion: callBack)
            } else if let error = error {
                callBack(nil, error)
            }
        }
    
        func signIn<T: FUIAuthProvider>(type: T.Type, defaultValue: String? = nil) {
            try? self.authUI.signOut() // logout from google etc..
            self.authUI.providers.first(where: { $0 is T })?.signIn(withDefaultValue: defaultValue, presenting: self, completion: self.didSignIn)
        }
    }
    

    从 FUICustomLoginController 子类化您的控制器:

    class LoginPickerController: FUICustomLoginController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            // Customize authUI if needed
            //self.authUI.providers = ... 
            self.authUI.delegate = self
        }
    
        @IBAction func loginFacebook(_ sender: Any) {
            self.signIn(type: FUIFacebookAuth.self)
        }
    
        @IBAction func loginGoogle(_ sender: Any) {
            self.signIn(type: FUIGoogleAuth.self)
        }
    
        @IBAction func loginPhone(_ sender: Any) {
            self.signIn(type: FUIPhoneAuth.self)
        }
    }
    
    extension LoginPickerController: FUIAuthDelegate {
    
        func authUI(_ authUI: FUIAuth, didSignInWith authDataResult: AuthDataResult?, error: Error?) {
            // perform login actions
        }
    }
    

    【讨论】:

      【解决方案2】:

      您可以自定义默认按钮、添加图像等。(一个有效的技巧)

          class SignInViewController: FUIAuthPickerViewController {
          weak var delegate: signInProtocol?
      
          // Unhashed nonce.
          fileprivate var currentNonce: String?
          var backgView: UIView?
          override func viewDidLoad() {
              super.viewDidLoad()
              view.backgroundColor = .clear
              for each in view.subviews[0].subviews[0].subviews[0].subviews {
                  if let button = each as? UIButton {
                      button.layer.cornerRadius = 20.0
                      button.layer.masksToBounds = true
                      ///do any other button customization here
                  }
              }
              ///add background image
              let scrollView = view.subviews[0]
              scrollView.backgroundColor = .clear
              let contentView = scrollView.subviews[0]
              contentView.backgroundColor = .clear
              let background = UIImage(named: "imagename")
              let backgroundImageView = UIImageView(image: background)
              backgroundImageView.contentMode = .scaleToFill
              view.insertSubview(backgroundImageView, at: 0)
      
          }
      

      }

      【讨论】:

        猜你喜欢
        • 2017-06-20
        • 2017-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多