使用Swift介绍Firebase

我是为AppCoda.com编写的。 您可以在以下网址找到完整的教程:https://www.appcoda.com/firebase-login-signup/。 自从Parse开始关闭以来,已经有一些数据库试图替代用于移动应用程序的Parse,例如Firebase和Realm。 Firebase由于其易用性和速度而成为当前最受欢迎的一种。 它还可以与Android,Web和iOS一起使用,这意味着它对于大型项目非常有用,因为数据库可以跨所有主要设备进行连接。 Firebase由Google拥有,这意味着这些服务器非常可靠,并且在需要时可以提供大量帮助。 一些大型科技公司(例如PicCollage,Shazam,Wattpad,Skyscanner和其他大型初创公司)也使用Firebase,因此您可以了解Firebase的可靠性。

随着Firebase的最新更新,它变得比以往任何时候都更加强大和强大。 您可以使用AdMob在平台上赚钱,也可以通过使用通知来保持用户忠诚度,或者使用云消息传递和存储来制作功能非常强大的应用。 Firebase肯定会留在这里。

在本教程中,我们将研究其中的一个关键方面,即登录和注册。 我们还将研究重置用户密码。 我们将使用最新版本的Firebase和XCode以及Swift3。在本教程中,您需要对Swift和XCode有基本的了解。

我们需要做的第一件事是开始一个新的XCode项目,我将使用“单一视图”应用程序,但是该概念将适用于从Tab-Bar应用程序到Master-Detail应用程序的任何样式。 您可以随心所欲地调用该项目,但对于本教程,我将其称为FirebaseTutorial1 。 将语言设置为Swift,设备无关紧要,因此您可以保持通用性。

然后,您需要转到Main.storyboard并创建如下界面:

但是,为了节省时间并让您专注于学习Firebase,可以在此处下载starter项目,并且在情节提要完成后,外观应类似于此,文件也应具有此外观。

如果您想从头开始构建项目,则必须遵循以下视图控制器和过程:

1.首先,将三个视图控制器拖到情节提要中,然后向每个视图控制器添加两个按钮。 这两个按钮用于在不同的视图控制器之间导航。 假设您在登录页面上时,可以导航到重置密码页面或注册页面。

2.在两个视图控制器中,添加两个文本字段和一个按钮。 这些文本字段用于“电子邮件”和“密码”字段。 该按钮用于登录或注册。 在占位符中,将电子邮件或密码放在希望用户输入电子邮件和密码的位置。 然后,您可以更改背景的颜色,使其看起来更好一些,然后在顶部添加标签。

3.在第三个视图控制器(“重置密码”)中,添加三个按钮,一个文本字段和一个标签。 文本字段供用户输入用于重置密码的电子邮件。

4.完成UI的设计后,其余过程就是将按钮与其他视图控制器连接起来,以便用户可以在视图之间进行转换。 在这里,我建议您对segue使用“模态呈现”。

现在用户界面已经准备就绪,我们现在将项目与Firebase集成在一起。 为此,您首先需要转到https://firebase.google.com/并在Firebase中设置项目。

假设您已使用Google帐户登录到Firebase,请单击“免费入门”,然后选择“创建新项目”。 它将带您到一个为您的项目命名的屏幕。 随便命名项目,然后选择您的所在地。

Firebase为您创建新项目后,将带您进入概述。 您可以在此处选择应用程序平台,无论是Web,Android还是本例中的iOS。 您也可以在这里找到文档,并在侧面访问身份验证,存储,数据库等等。

现在选择“将Firebase添加到您的iOS应用程序”,然后将提示您输入iOS Bundle ID 。 这是您的Xcode项目的包标识符(请注意,您的包ID可能与我的不同)。

确保您正确输入了捆绑包ID,并且可以选择为应用程序选择一个昵称。 如果您的应用程序已经在App Store上发布,则添加您的App Store ID。 但是对于此演示,您不必执行此操作。 完成后,单击“添加应用”继续,Firebase将为您生成一个名为GoogleService-Info.plist的文件。 它应该自动下载到Mac计算机上。

这将带您进入下一个阶段。 按照说明将GoogleService-Info.plist拖动到Xcode项目的根文件夹中。

注意:请确保文件名为GoogleService-Info.plist。 在某些情况下,文件名可能不同。 说,如果您之前已经下载过.plist文件,macOS将通过在文件名后附加数字来修改文件名。

接下来,按继续以继续进行下一步。

如Firebase所述,Google服务使用CocoaPods来安装和管理依赖项。 您需要使用CocoaPods安装Firebase库。 如果您没有Cocoapods,请按照本教程进行安装。

接下来,请确保在安装Pod文件之前关闭XCode项目。 然后打开终端并切换到Xcode项目文件夹。 键入以下命令来创建Podfile:

初始化 

创建文件后,对其进行编辑并添加两个依赖项:

  #取消注释下一行以为项目定义全局平台#平台:ios,'9.0'target'FirebaseTutorial1'do# 如果您不使用Swift且不​​想使用动态框架,请注释下一行use_frameworks!#吊舱适用于 FirebaseTutorial1pod'Firebase / Core'pod'Firebase / Auth' 结束 

这就是登录和注册所需的全部。 如果要制作类似Instagram的应用,则可以使用Firebase Storage和Database等。

保存Podfile,然后在终端中键入以下命令:

 吊舱安装 

CocoaPods将开始将依赖项和pod安装到项目中。

安装Pod后,您将找到一个名为FirebaseTutorial1.xcworkspace的新工作空间文件。 确保打开工作区文件而不是FirebaseTutorial1.xcodeproj文件。

现在,我们已经使用Firebase库配置了我们的项目,是时候编写一些代码了。 在项目导航器中,转到AppDelegate.swift 。 要利用Firebase的API,首先我们必须导入Firebase。 在文件的开头,插入以下代码行:

  导入 Firebase 

接下来,像这样更新application(_:didFinishLaunchingWithOptions:)方法:

  func application(_ application:UIApplication,didFinishLaunchingWithOptions launchOptions:[UIApplicationLaunchOptionsKey:Any]?)-> Bool { //应用程序启动后用于自定义的替代点。  FIRApp.configure() 返回 true } 

在这里,我们调用FIRApp.configure()来初始化和配置Firebase。 此代码行可帮助您在应用启动时连接Firebase。

现在,我们准备使用Firebase实施“注册”功能。 首先,在编写代码之前,您必须回到Firebase控制台。 在控制台中,选择“ 身份验证” ,然后选择“ 登录方法” 。 默认情况下,“电子邮件/密码”选项是禁用的。 单击该选项,然后将其切换为“开”以启用它。 您还可以在此处启用Facebook,Twitter和Google的注册,但这已超出范围。

启用此功能后,您现在即可实施注册和身份验证功能。 与AppDelegate.swift相似,在SignUpViewController.swift文件中添加以下导入语句:

  导入 Firebase 导入 FirebaseAuth 

如果您使用我们的入门项目,它已经将电子邮件和密码文本字段都连接到以下出口:

  @IBOutlet弱变量emailTextField:UITextField!@IBOutlet弱变量passwordTextField:UITextField! 

在“注册”屏幕中,当用户点击“注册”时,它将调用操作方法createAccountAction 。 我已经为您连接了“注册”按钮和操作方法。 因此,您需要做的是更新操作方法,如下所示:

  @IBAction func createAccountAction(_ sender:AnyObject){ 如果 emailTextField.text ==“” {  alertController = UIAlertController(title:“错误”,消息:“请输入您的电子邮件和密码”,preferredStyle:.alert) let defaultAction = UIAlertAction(标题:“确定”,样式:.cancel,处理程序:nil)alertController.addAction(defaultAction)present(alertController,animation: true ,完成:nil)} 否则 {FIRAuth.auth()?. createUser(withEmail:emailTextField) .text !,密码:passwordTextField.text!){(用户, 如果出错 则输入错误== nil {print(“您已成功注册”)) //进入设置页面,该页面可让用户为其拍照个人资料图片,还选择了一个用户名 let vc = self .storyboard?.instantiateViewController(withIdentifier:“ Home”) self .present(vc !, animation: true ,完成度:nil)} 否则 { let alertController = UIAlertController(title:“ Error ”,消息:错误?.localizedDescription,preferredStyle:.alert)  defaultAction = UIAlertAction( 标题:“确定”,样式:.cancel,处理程序:nil)alertController.addAction(defaultAction) self .present(alertController,animation: true ,完成度:nil)}}}} 

让我们逐行浏览上面的代码。 我们首先检查用户是否填写了电子邮件地址。 如果他/她将其留空,我们将显示一条警报消息。

如果用户填写了电子邮件字段,则可以通过调用FIRAuth.auth()获得默认的auth对象,然后调用createUser方法在Firebase中创建一个用户帐户。 注册操作完成后,将调用完成块。 在区块中,我们检查是否有任何注册错误。 如果一切正常,我们会指示该应用导航回到主屏幕。 否则,我们将显示错误警报。

现在,您可以对注册功能进行快速测试。 该应用程序应该运行良好。 使用电子邮件地址和密码注册后,您将被带到主屏幕,并且您的帐户已添加到Firebase中。 如果您尝试再次使用同一帐户注册,则Firebase会返回一条错误消息,因为该电子邮件地址重复。

如果返回Firebase控制台,则可以在“ 身份验证”部分下的“ 用户”选项卡中找到用户ID。

现在可以注册了,但是登录功能又如何呢? 这就是我们将在本节中实现的。

现在打开LoginViewController.swift 。 同样,您需要在使用API​​之前导入Firebase和FirebaseAuth。 因此,在文件的开头添加以下代码行:

  导入 Firebase 导入 FirebaseAuth 

我已经在登录按钮和loginAction方法之间建立了连接。 当用户点击按钮时,将调用loginAction方法。 但是当前的实现是空的。 要使其工作,请更新如下方法:

  @IBAction func loginAction(_ sender:AnyObject){ 如果 self .emailTextField.text ==“” 

self .passwordTextField.text ==“” { //提示用户出现错误,因为他们没有填充文本字段中的任何内容,因为他们没有填充文本中的任何内容 let alertController = UIAlertController(title:“ Error” ,消息:“请输入电子邮件和密码。”,preferredStyle:.alert) let defaultAction = UIAlertAction(标题:“ OK”,样式:.cancel,处理程序:nil)alertController.addAction(defaultAction) self .present(alertController,动画: true ,完成:nil)} 否则 {FIRAuth.auth()?. signIn(withEmail: self .emailTextField.text !, password: self .passwordTextField.text!){(用户,错误) in if error == nil { //如果成功登录,则打印到控制台 print(“您已成功登录”) //如果登录成功,则转到HomeViewController let vc = self .storyboard?.instantiateViewController(withIdentifier:“ Home”) self 。 present(vc !,动画: true ,完成:nil)} else { //告诉用户错误,然后获取冷杉 ebase告诉他们错误 alertController = UIAlertController(title:“ Error”,message:error?.localizedDescription,preferredStyle:.alert) let defaultAction = UIAlertAction(title:“ OK”,样式:.cancel,handler:nil)alertController .addAction(defaultAction) self .present(alertController,动画: true ,完成:nil)}}}}

上面的代码非常简单。 与我们在注册中所做的类似,我们将验证用户是否填写了所有必填字段。 如果电子邮件和密码均有效,我们将使用指定的电子邮件地址和密码来调用Firebase API的signIn方法。 而已。 Firebase将处理身份验证,并通过调用完成处理程序将结果返回给我们。

现在运行该应用程序,并使用您之前注册的帐户登录。 根据您的帐户信息,它会登录到应用程序或显示错误。

现在您可以登录该应用程序,但注销功能尚未准备就绪。 为此,打开HomeViewController.swift并导入所需的模块:

  导入 Firebase 导入 FirebaseAuth 

同样,如果您使用入门项目,则注销按钮已与logOutAction方法链接在一起。 要注销帐户,Firebase提供了一个名为signOut()的API。 您所需auth就是获取当前的auth对象并调用该方法。 因此,像这样更新logOutAction方法:

  @IBAction func logOutAction(sender:AnyObject){ 如果 FIRAuth.auth()?. currentUser!= nil { do { 试试 FIRAuth.auth()?. signOut() let vc = UIStoryboard(name:“ Main”,bundle:nil ).instantiateViewController(withIdentifier:“ SignUp”)present(vc,animation: true ,completion:nil)} 捕获 错误作为 NSError {print(error.localizedDescription)}}} 

在入门项目中,我将“注册”视图控制器的情节提要ID设置为SignUp 。 注销后,我们通过指定其标识符将用户重定向回“注册”屏幕。

如果您运行该应用程序并登录到该应用程序,则在您点击注销时,它将带您回到注册视图控制器。

最后,让我们通过实现密码重置功能来完成应用程序。 打开ResetPasswordViewController.swift文件并添加以下导入语句:

  导入 Firebase 导入 FirebaseAuth 

Firebase确实很容易为特定帐户重置密码。 您需要做的就是使用指定的电子邮件地址调用sendPasswordReset方法。 因此,像这样更新submitAction方法:

  @IBAction func SubmitAction(_ sender:AnyObject){ 如果 self .emailTextField.text ==“” {  alertController = UIAlertController(title:“糟糕!”,消息:“请输入电子邮件。”,preferredStyle:.alert) let defaultAction = UIAlertAction(标题:“确定”,样式:.cancel,处理程序:nil)alertController.addAction(defaultAction)present(alertController,动画: true ,完成:nil)}, 否则 {FIRAuth.auth()?. sendPasswordReset(withEmail : self .emailTextField.text !,完成:{(错误 var title =“” var message =“”, 如果 error!= nil {title =“ Error!” message =(error?.localizedDescription)!} else {title =“成功!”消息=“发送了密码重置电子邮件。” self .emailTextField.text =“”} let alertController = UIAlertController(title:title,message:message,preferredStyle:.alert) let defaultAction = UIAlertAction(title:“ OK ”,样式:.cancel,处理程序:nil)alertController.addAction(defaultAction) self .present(alertController,animated: true ,完成  :nil)})}} 

正确执行呼叫后,Firebase会将密码重设电子邮件发送到指定的电子邮件地址。 然后,用户可以按照链接重置密码。

在本教程中,我为您提供了Firebase的快速概述。 现在,我相信您已经了解了如何使用Firebase实施注册,登录,密码重置和注销。 感谢您阅读本教程。 如果您有任何疑问或意见,请在下面给我留言。

作为参考,您可以在GitHub上下载Xcode项目。