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】:使用 UIActivityIndicatorView(微调器)非常简单。这个问题有点不清楚,但这里是如何实现它。
将活动指示器视图拖放到您的视图中。默认情况下,指示器默认隐藏。可以看到在属性检查器中 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】:我没有看到您的 activityIndicator (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:在登录和插入活动指示器视图中添加“记住我”复选框的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Xcode 的控制台中禁用 Firebase/Analytics 登录? [复制]
在 Xcode 11.5 中从 AppDelegate 访问 ViewController(firebase google 登录)