Firebase 和 Xcode 8:在登录和插入活动指示器视图中添加“记住我”复选框

Posted

技术标签:

【中文标题】Firebase 和 Xcode 8:在登录和插入活动指示器视图中添加“记住我”复选框【英文标题】:Firebase & Xcode 8: Add "Remember Me" Check Box to Login & Insert Activity Indicator View 【发布时间】:2017-07-16 08:17:48 【问题描述】:

我对 Firebase 不是很熟悉,我想在 Xcode 8 中创建一个“记住我”复选框,以便用户在选中“记住我”复选框时可以使用该功能登录。

我还想在用户点击“登录”后插入活动指示器视图,但我失败了。那个小旋转器一直在旋转并一直停留在屏幕上。我想在用户点击“登录”后调暗屏幕并让微调器旋转。

这是我的代码。

import UIKit
import Firebase

class LoginViewController: UIViewController 

    var imageView: UIImageView!

    override func viewDidLoad() 
        super.viewDidLoad()
        imageView = UIImageView(frame: view.bounds)
        imageView.contentMode = .scaleAspectFill
        imageView.clipsToBounds = true
        imageView.image = #imageLiteral(resourceName: "background")
        imageView.center = view.center
        view.addSubview(imageView)
        self.view.sendSubview(toBack: imageView)

    

    //Outlets
    @IBOutlet weak var emailTextField: UITextField!
    @IBOutlet weak var passwordTextField: UITextField!


    //Login Action
    @IBAction func loginAction(_ sender: AnyObject) 
        if self.emailTextField.text == "" || self.passwordTextField.text == "" 

            //Alert to tell the user that there was an error because they didn't fill anything in the textfields because they didn't fill anything in

            let alertController = UIAlertController(title: "Error", message: "Please enter an email and password.", preferredStyle: .alert)

            let defaultAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
            alertController.addAction(defaultAction)

            self.present(alertController, animated: true, completion: nil)

         else 

            Auth.auth().signIn(withEmail: self.emailTextField.text!, password: self.passwordTextField.text!)  (user, error) in

                if error == nil 

                    //Print into the console if successfully logged in
                    print("You have successfully logged in")

                    //Go to the HomeViewController if the login is sucessful
                    let vc = self.storyboard?.instantiateViewController(withIdentifier: "Home")
                    self.present(vc!, animated: true, completion: nil)

                 else 

                    //Tells the user that there is an error and then gets firebase to tell them the error
                    let alertController = UIAlertController(title: "Error", message: error?.localizedDescription, preferredStyle: .alert)

                    let defaultAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
                    alertController.addAction(defaultAction)

                    self.present(alertController, animated: true, completion: nil)
                
            
        
    

【问题讨论】:

这里的问题是什么?您是否要求我们编写代码来显示和隐藏活动指示器?你问如何调暗屏幕?与 Firebase 有什么联系? 主要是显示和隐藏一个活动指示器。我在故事板中尝试过(通过将其拖到视图控制器),但我认为还有一些代码工作要做。 Firebase 明智,我不确定是否有办法添加利用特定 Firebase 功能的“记住我”功能。或者也许有另一种解决问题的方法。 该问题与 Firebase 无关,因此标签不应成为问题的一部分,问题应改写为:如何显示/隐藏活动指示器 (如果现有答案有一个数字)。此外,您的后续评论需要澄清; 记住我使用特定 Firebase 功能的功能。你指的是什么功能?您是在问如何在 Firebase 中存储数据或如何调用特定函数?这可能是一个单独的问题吗? 我想我可能在同一个帖子中提出了太多问题,我会解决它。 【参考方案1】:

使用 UIActivityIndi​​catorView(微调器)非常简单。这个问题有点不清楚,但这里是如何实现它。

将活动指示器视图拖放到您的视图中。默认情况下,指示器默认隐藏。可以看到在属性检查器中 Hidden 被选中了。

在这里显示和启动指标旋转是一种方式

self.activityIndicator.isHidden = false

然后停止并隐藏它

self.activityIndicator.isHidden = true

在您的情况下,您将希望在用户点击登录按钮时显示它。

您将希望在 Firebase 登录功能之后将其隐藏在 闭包中

Auth.auth().signIn(withEmail: self.emailTextField.text!, password: self.passwordTextField.text!)  (user, error) in

     self.activityIndicator.isHidden = true //hide the spinner

     if error == nil 
           //proceed to next step
      else 
          //handle the error
     
)

就 rememberMe 复选框而言,您可以将该设置保存在 UserDefauts 中。

当应用启动时,它会读取 userDefaults 并且可以自动登录用户,或者要求他们登录。

缺点是您还需要将用户名和密码保存在 UserDefaults 中,这可能存在安全风险。 (可以对其进行编码,这会有所帮助)。

UserDefaults 在 Apple 的开发者库中有很好的记录。

【讨论】:

【参考方案2】:

我没有看到您的 activityIndi​​cator (spinner) 代码,但是,您必须做两件事:

    当用户点击登录按钮时显示并开始动画活动指示器 当登录成功或失败时,您必须停止动画并隐藏活动指示器

关于登录数据(用户/密码)的持久性,您需要多做一些工作,我相信这与 Firebase 无关。最好的方法是使用 keychain 和 touchID 来避免不断写入用户/密码文本,您可以查看本教程以了解如何应用 https://www.raywenderlich.com/92667/securing-ios-data-keychain-touch-id-1password

希望对你有帮助:)

【讨论】:

这是一种新的思维方式!感谢那。有没有办法,比如在登录按钮下面放一个按钮,说“或使用 Touch ID 登录”,这样他们就可以使用 Touch ID? 当然,所有有登录和自动登录的应用都有。 support.1password.com/touch-id-ios

以上是关于Firebase 和 Xcode 8:在登录和插入活动指示器视图中添加“记住我”复选框的主要内容,如果未能解决你的问题,请参考以下文章

swift xcode 8 出现大量调试区域错误

如何在 Xcode 的控制台中禁用 Firebase/Analytics 登录? [复制]

在 Xcode 11.5 中从 AppDelegate 访问 ViewController(firebase google 登录)

Firebase 链接器错误 XCode 8 beta 2

在 xcode 8 中登录的 UI 测试

让用户使用 Firebase 登录(自定义 iOS 身份验证)