Firebas e是一个跨平台的实时移动数据库平台,它使编码人员可以专注于自己最擅长的事情-对应用程序进行编码-而不必担心服务器基础结构和数据库建模等DevOps问题。 在Google的支持下,Firebase消除了处理后端实时数据库,对用户进行身份验证以及使用脱机同步工作流的复杂性。

尽管有很多针对BaaS的解决方案,例如Realm(请在Envato Tuts +上查看我的Realm.io教程 ),但Firebase不需要任何先前的基础架构服务器配置,因为该平台负责托管,并且相应地公开了SDK 。

除了NoSQL实时数据库之外,借助Firebase,您还可以获得分析,崩溃报告,用户身份验证,云消息传递,推送通知等等。 在相关的费用 š规模也与您的项目,随着你的成长,你从一个免费增值模式移动到每个使用模型。

在本教程中,我将向您展示如何使用CocoaPods在iOS上设置Firebase,以及如何使用两种流行的方法对用户进行身份验证:电子邮件和密码,或通过带有SMS的电话。

您的第一个Firebase应用

先决条件

您将需要以下内容:

  • 具有Xcode 8的iOS 10
  • 已安装CocoaPods
  • 免费的Firebas e帐户

假设知识

本教程假定您具有iOS和Swift的工作知识,并且具有一些CocoaPods的基本经验。 如果您需要了解更多信息,请查看我们的Swift教程和CocoaPods教程 。

本教程的目标

在本教程结束时,您将开始使用基于Firebase的简单应用程序,该应用程序使用Firebase SDK通过电子邮件和密码以及SMS来对用户进行身份验证。 在此过程中,您将了解:

  1. 使用CocoaPods设置Firebase
  2. 设置应用程序代理以连接到Firebase
  3. 设置Text / SMS用户身份验证的配置权利
  4. 使用FirebaseUI轻松验证用户身份

在本系列的后续教程中,您将学习使用Firebase平台的其他方面,例如使用实时数据库存储应用程序数据。

设置项目

在本系列中,我们将构建一个名为FirebaseDo的待办应用程序。 让我们从GitHub克隆项目开始:

$ git@github.com:tutsplus/get-started-with-firebase-authentication-for-ios.git
...
$ git fetch --all --tags
...
$ git checkout tags/START

接下来,我们将初始化项目以生成一个新的PodFile ,如下所示:

pod init

您应该在项目的根目录中看到一个名为Podfile的新文件。 该文件基本上列出了我们要在项目中使用的库。 打开它并添加以下Firebase声明行:

pod 'FirebaseUI'Pod 'Firebase'

保存并在您的终端中输入以下内容以构建Pod:

pod install

我们将使用FirebaseDo.xcworkspace而不是FirebaseDo.xccodeproj ,从而使我们能够使用在CocoaPods上设置的依赖库,因此继续打开工作区,然后切换到浏览器。

现在转到Firebase面板并创建一个新项目:


接下来,点击添加Firebase到您的iOS应用程序 ,然后它将逐步引导您完成在Firebase上注册应用程序的过程。


在某个时候,它将指示您将GoogleService-info.plist文件添加到您的Xcode项目中:


您已经通过CocoaPods添加了库,因此您可以跳过其余的说明并返回Firebase控制台。

验证用户

Firebase身份验证提供后端服务,易于使用的SDK和现成的UI库,以对您的应用程序的用户进行身份验证。 它支持使用密码,电话号码,流行的联合身份提供者(例如Google,Facebook和Twitter等)进行身份验证。 (来源: 火力地堡Authenticatio Ñ )

在演示如何使用FirebaseU I自动执行对用户的身份验证之前,我们将首先探讨Firebase作为FirebaseAuth Framework Reference AP I的一部分公开的SDK方法,以手动处理用户的创建和登录。

注册,登录和注销用户

要创建新用户,可以使用Auth.auth().createUser()方法块,如下所示:

Auth.auth().createUser(withEmail: email, password: password) { (user, error) in// ...
}

假设error 如果对象为nil,则不仅将成功注册用户,还将登录。要显式登录现有用户,您可以调用:

Auth.auth().signIn(withEmail: email, password: password) { (user, error) in// ...
}

注销用户就像调用try! FirebaseAuth.signOut()一样简单try! FirebaseAuth.signOut() try! FirebaseAuth.signOut()

do {try firebaseAuth.signOut()
} catch let signOutError as NSError {print ("Error signing out: %@", signOutError)
}

我们希望能够优雅地处理各种潜在的错误,以防身份验证调用误入歧途,并且当error对象不为nil(或相反, user对象为nil)时,发生了错误。 咨询火力地堡documentatio ñ所有常见的错误代码的列表。 在我们的代码中,我们将仅处理一些常规错误。

管理身份验证状态更改

在应用程序的整个生命周期中,身份验证状态都会改变,因此能够检测用户何时进行身份验证或会话已过期,对于确保用户无法访问不应访问的应用程序部分至关重要。

通过创建处理程序.addStateDidChangeListener ,您现在可以检测用户所处的状态并基于该状态触发特定的调用。

handle = Auth.auth().addStateDidChangeListener { (auth, user) in// ...
}

管理用户

在用户进行身份验证之后,您可以访问user对象并获取用户信息,例如用户的ID,电子邮件地址和头像(如果提供)。 以下方法还将断言该用户当前确实已通过不为nil的user对象进行了身份验证:

if Auth.auth().currentUser != nil {// User is signed in.let uid = user.uidlet email = user.emaillet photoURL = user.photoURL// ...
} else {// User is not signed in
}

给用户发送电子邮件

Firebase为向用户发送电子邮件验证密码重置请求电子邮件提供了出色的支持。

Auth.auth().currentUser?.sendEmailVerification { (error) in// ...
}Auth.auth().sendPasswordReset(withEmail: email) { (error) in// ...
}

匿名用户

Firebase还具有一种管理匿名身份验证工作流的方法,该方法本质上是一个临时帐户,可用于对用户进行身份验证并为他们提供有限的访问权限。 这个想法是在某个时间点,匿名用户可能会选择注册,然后Firebase可以提供一个桥梁,以将其匿名帐户链接到其登录凭据,而不必丢失在其匿名状态期间持久保存的数据。 要登录匿名用户,请致电:

Auth.auth().signInAnonymously() { (user, error) in// ...
}

要将用户从匿名帐户转换为经过身份验证的帐户(使用电子邮件和密码),您可以在注册屏幕视图控制器中调用以下方法,请求电子邮件和密码,然后调用user.link()方法。

let credential = EmailAuthProvider.credential(withEmail: email, password: password)user.link(with: credential) { (user, error) in// ...
}

Firebase还支持其他联合身份验证机制的方法。

到此为止,我们已经了解了Firebase提供的用于处理和验证用户的重要API方法。 尽管我向您展示的代码一点也不复杂,但是Firebase通过引入FirebaseU I使它比这更容易。 在本教程的后半部分,我们将向示例待办事项应用程序添加身份验证。

实施FirebaseUI

FirebaseU I提供了一种嵌入式身份验证解决方案,该解决方案可处理UI流程,以使用电子邮件地址和密码,电话号码以及流行的联合身份提供商(包括Google登录和Facebook登录)登录用户。

接下来,我们将演示如何使用FirebaseUI实现身份验证。

在Firebase控制台中,转到“ 身份验证”标签,然后启用以下身份验证模式:

  • 电子邮件/密码
  • 电话

我们刚刚看到了如何使用可用的Firebase SDK手动管理和验证用户。 现在,我们将看到如何让FirebaseU 我为我们完成所有繁重的工作。 在HomeViewController.swift ,导入以下库:

import UIKit
import Firebase
import FirebaseAuthUI
import FirebasePhoneAuthUI

UIViewController.swift声明中,添加FUIAuthDelegate

class HomeViewController: UIViewController, FUIAuthDelegate {...

在该类声明下,我们将声明三个将要使用的私有变量。 这些将使我们分别引用当前的身份验证对象,AuthUI实例和身份验证侦听器:

fileprivate(set) var auth:Auth?fileprivate(set) var authUI: FUIAuth? //only set internally but get externallyfileprivate(set) var authStateListenerHandle: AuthStateDidChangeListenerHandle?

接下来,让我们连接View Controller,以便在第一次加载View Controller时,我们连接一个侦听器以使用处理程序检测身份验证状态何时更改。 当auth状态更改时,我们将召唤self.loginAction(sender: self)方法来启动FirebaseUI身份验证控制器。

override func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view, typically from a nib.self.auth = Auth.auth()self.authUI = FUIAuth.defaultAuthUI()self.authUI?.delegate = selfself.authUI?.providers = [FUIPhoneAuth(authUI: self.authUI!),]self.authStateListenerHandle = self.auth?.addStateDidChangeListener { (auth, user) inguard user != nil else {self.loginAction(sender: self)return}}}

在此方法中,我们还实例化了先前声明的私有变量,将authUI委托设置为我们自己的类,最后设置了我们将支持的其他提供程序的列表,在我们的情况下为FUIPhoneAuth

如果我们想支持Google,Facebook或其他第三方提供商,可以将它们添加到此列表中。 还要注意,我们不需要显式包括电子邮件和密码,因为它们是隐式的,只要在Firebase控制台中启用了它即可。

显示登录界面

接下来,我们处理loginAction()方法,该方法将在事件侦听器确定用户当前未通过身份验证的情况下调用。 在这种情况下,我们需要做的就是呈现authUI.authViewController模态FirebaseUI,它将包括我们之前声明的关联身份验证提供程序。

这是魔术开始的地方,因为FirebaseUI处理所有事情:要求用户输入他或她的电子邮件地址,确定该用户是否存在(在这种情况下,将要求用户输入密码),或者对于新用户,则收集他们的密码。名称和提名密码。

@IBAction func loginAction(sender: AnyObject) {// Present the default login view controller provided by authUIlet authViewController = authUI?.authViewController();self.present(authViewController!, animated: true, completion: nil)}

如果我们要手动实施身份验证方法,则需要处理所有这些不同的情况,包括电子邮件密码重置等。

处理身份验证状态更改

最后,我们为FIRAuthUIDelegate委托实现了必需的协议,这将使我们能够侦听和处理身份验证状态。 仅当确实发生错误时,此方法才会继续执行,但我们甚至可以处理成功的身份验证。

// Implement the required protocol method for FIRAuthUIDelegatefunc authUI(_ authUI: FUIAuth, didSignInWith user: User?, error: Error?) {guard let authError = error else { return }let errorCode = UInt((authError as NSError).code)switch errorCode {case FUIAuthErrorCode.userCancelledSignIn.rawValue:print("User cancelled sign-in");breakdefault:let detailedError = (authError as NSError).userInfo[NSUnderlyingErrorKey] ?? authErrorprint("Login error: \((detailedError as! NSError).localizedDescription)");}}

电话验证设置

在试用该应用程序之前,我们需要添加一些其他步骤才能处理基于电话的身份验证。 通过电话身份验证,用户可以输入电话号码,并通过包含一次性代码的SMS消息来验证其身份。

要获取Firebase服务器所需的APNs令牌,请在AppDelegate.swift文件中实施以下操作:

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {// Pass device token to authAuth.auth().setAPNSToken(deviceToken, type: .prod)
}

正如我们已经启用的电话号码登录在火力地堡控制台,我们的下一个任务是提供FirebaseDo接收APN 小号 ,如果你想在普遍支持推送通知,从火力地堡,任务也将尽。 但是,在这种情况下,Firebase会向设备发送静默推送通知,以验证电话号码登录请求。

您将无法通过Xcode Simulator测试此身份验证方法,而是需要连接iPhone以安装和运行该应用程序。

在Xcode中,转到“ 功能”并启用“ 推送通知” 。 该应用程序将自动设置并创建FirebaseDo.entitlements文件,如项目导航器中所示。


接下来,我们将创建一个Apple Push Notification身份验证密钥,以上传到Firebase。 在Apple Developer Porta l的 Keys下,填写项目名称,确保在APNs旁打勾。 下载生成的.p8文件,并记下密钥ID,因为我们很快需要输入它。


切换回Firebase控制台,然后在“ 项目设置” (齿轮图标)下,选择“ 云消息传递”选项卡。 在“ iOS应用程序配置APNs身份验证密钥”下 ,选择“上载”按钮并上载.p8文件以及密钥ID和应用程序ID。 出现的设置屏幕应类似于以下内容:


测试应用

就是这样-我们不必为应用程序添加太多额外的代码即可对其进行设置,以实现完整的注册和登录身份验证工作流程。 让我们在Xcode中构建并运行该应用程序,以了解FirebaseUI的实际应用。 首次运行该应用程序时,不会进行身份验证,因此您将获得一个通用模板,其中包含在Firebase控制台中选择的身份验证选项。


它看起来有点乏味,但你可以自定义templat的几乎每一个方面 ê 。


输入新用户的电子邮件地址将按“ 创建帐户”屏幕,询问您的名称和密码。


填写此表格会将您注册为新用户(尽管我们的应用程序只会显示空白屏幕)。 要确认已创建新用户,您可以在Firebase控制台中转到“ 身份验证” >“ 用户”

测试每种身份验证方法,请记住您需要注销才能重新触发身份验证提示。 通过在超级调用之后在viewDidLoad()的第一行中添加以下代码来重新触发身份验证:

try firebaseAuth.signOut()

这将迫使应用程序返回其初始状态,以便您可以通过电话SMS测试身份验证。 再次运行该应用程序,这次选择“ 使用手机登录”

结论

在本教程中,您介绍了如何将Firebase用作应用程序的后端平台,并了解了如何使用传统的电子邮件和密码组合以及通过电话和SMS验证用户身份,这种方法在应用程序中很流行像WhatsApp。

然后,我们开始构建简单的FirebaseDo应用程序,尽管该应用程序尚未执行任何实际的提醒类型功能,但我们将在下一个教程中开始进行操作。 但是仅几行,我们就完成了以下工作:

在本系列的其余部分中,您将了解Firebase的其他一些组件。

翻译自: https://code.tutsplus.com/tutorials/get-started-with-firebase-authentication-for-ios--cms-29227

iOS Firebase身份验证入门相关推荐

  1. flutter 图形验证_Flutter Firebase身份验证教程

    flutter 图形验证 在Flutter Firebase身份验证的这篇文章中,我们将了解如何使用Firebase的flutter插件向我们的Firebase应用程序验证用户身份. 如果您不熟悉颤动 ...

  2. firebase登录验证_使用Firebase进行电话号码身份验证

    firebase登录验证 介绍 (Introduction) Ever since Firebase was introduced, I thought it would have a signifi ...

  3. vue firebase_如何使用Vue.js,Vuex,Vuetify和Firebase构建SPA:使用Firebase添加身份验证...

    vue firebase 第4部分:了解如何使用Firebase添加身份验证和购物车 (Part 4: learn how to use Firebase to add authentication ...

  4. 使用Auth0对Firebase和Angular进行身份验证:第1部分

    本文最初发布在Auth0.com博客上 ,并经许可在此处重新发布. 在这个由两部分组成的教程系列中,我们将学习如何构建一个使用Auth0身份验证保护Node后端和Angular前端安全的应用程序. 我 ...

  5. firebase auth_使用Auth0对Firebase和Angular进行身份验证:第1部分

    firebase auth 本文最初发布在Auth0.com博客上 ,并经许可在此处重新发布. 在这个分为两部分的系列教程中,我们将学习如何构建一个使用Auth0身份验证保护Node后端和Angula ...

  6. 使用 Vue 3 和 Firebase 进行身份验证

    在构建任何类型的应用程序时,隐私和安全是需要牢记的两个重要因素.随着网络犯罪分子变得越来越先进,身份验证是阻止黑客攻击和保护用户最有价值信息的重要步骤. Firebase 身份验证提供后端服务来帮助对 ...

  7. android10热点验证身份,在 Android 上使用 Microsoft 进行身份验证

    使用 OAuth 提供方对象进行 Firebase 身份验证.请注意,与其他 FirebaseAuth 操作不同,此操作会弹出自定义 Chrome 标签页,从而控制您的界面.因此,请不要在您附加的 O ...

  8. Shiro系列-Shiro如何实现身份验证

    导语   下面就来按照顺序依次介绍一下Shiro的使用场景,场景代码后续会放到GitHub上面希望大家可以多多支持.首先先来介绍一下Shiro的身份认证. 文章目录 Shiro身份验证 入门小例子 环 ...

  9. 出现身份验证错误 要求的函数不受支持_学习使用Kotlin创建Android应用程序第3部分:身份验证登录...

    在上一篇文章中,我们讨论了学习Kotlin制作Android应用程序的初学者第2部分:创建登录表单.这次我们来学习创建登录表单后,我们将尝试对上一篇创建的登录表单使用Firebase身份验证.因此,我 ...

最新文章

  1. 【面试 spring】【第七篇】spring的问题
  2. C#中将字符串内容写入到txt文件中
  3. 部署在SAP Cloud Platform CloudFoundry环境的应用如何消费SAP Leonardo机器学习API
  4. NOI Linux2.0使用系列视频集
  5. c语言从html控件sscanf,sscanf与sprintf在C语言中的用法
  6. 首页 、引导页、版本
  7. php连接mysql执行sql语句_php+mysql 连接服务器、数据库以及执行SQL语句的类库
  8. Xcode 运行程序,左侧memory 不显示内存
  9. 华为端口聚合命令_华为汇聚交换机链路聚合配置命令
  10. win10打开视频显示HEVC视频扩展
  11. 2022-07-08 Unity Json2——LitJson
  12. excel查找空值快捷键_Excel快捷键查询
  13. xp系统如何更改计算机用户名,windows xp电脑如何设置、修改开机密码
  14. 大学生网页制作之美食篇html+css静态网页设计
  15. Android高级UI开发(九)之侧滑菜单 --抽屉
  16. 营业执照遗失该如何处理
  17. 最喜欢突然说分手的星座,有TA吗?
  18. MySQL删除数据后,释放磁盘空间
  19. 大华摄像头使用外网进行访问管理
  20. 前端自动化测试之chai.js断言库

热门文章

  1. 缓和曲线10麦克康奈尔
  2. 动画动画商品详情加购物车
  3. echarts使用ajax接收数据并展示
  4. Linux的主次设备号
  5. 软件外包商都是黑心的吗?
  6. Pytorch的使用:torch.gather函数
  7. NI-6221 pwm相关函数
  8. 这篇文章告诉你有什么PDF解密工具
  9. 【连肝10个晚上 吐血整理】那些让你起飞的计算机网络、计算机网络由基础到深入!
  10. 搭建公司内部论坛 只需简单三步 2 (发布Discuz)