我们正处于 rapid 原型设计的时代。我们可能会得到好主意,但有时如果工作量太大,它们就无法实施。通常,后端是限制因素——由于缺乏服务器端编码的知识或时间,许多想法永远无法实现。
作为移动开发人员,使用后端即服务 (BaaS) 平台可以帮助您快速实施您的想法。
firebase 具有快速原型设计和快速测试您的想法所需的所有关键功能。使用 Firebase,您可以快捷地创建身份验证、数据库和对象存储等功能。Firebase 还附带其他可用于验证原型的功能,例如分析、A/B 测试和推送通知。
最重要的是,Firebase 对小型项目是免费的!
配置 ios 应用以使用 Firebase
让我们创建一个使用 Firebase 的示例 Xcode 项目。我们将其命名为 MyFirstFirebaseApp。
创建一个新的 Xcode 项目
为您的项目选择一个 单一视图应用程序模板。
现在项目已创建,让我们开始为 Firebase 配置它。
创建一个 Podfile
CocoaPods 是 swift 和 Objective-C Cocoa 项目的依赖管理器。我们需要在我们的项目中初始化它。这可以通过 pod init
命令来完成。
$ cd your-project directory $ pod init
添加 Firebase Pod
我们想将Firebase/Core pod 添加到我们的项目中。这包括启动和运行 Firebase 所需的必备库。
$ pod 'Firebase/Core'
现在这是您的Podfile的外观:
安装 Pod 并在 Xcode 中打开项目
包含 pod 详细信息后,让我们使用 pod install
命令安装它们。然后我们可以通过打开 .xcworkspace文件在 Xcode 中打开项目。
$ pod install $ open your-project.xcworkspace
创建和配置您的 Firebase 帐户
创建 Firebase 帐户
现在让我们设置一个Firebase 帐户!众所周知,Firebase 是 Google 的产品,因此我们可以使用我们的gmail帐户创建一个 Firebase 控制台帐户。
但是,请注意:Firebase 并非完全免费。我们可以从免费版本开始进行初始原型设计,但如果您计划使用 Firebase 投入生产,那么您应该了解定价结构。
在 Firebase 控制台中创建一个新项目
现在我们已经成功登录到我们的 Firebase 帐户,让我们创建一个项目。单击添加项目。
创建项目后,Firebase 数据库、用户管理和远程配置可以与 iOS、android和 Web 共享。
创建项目后,您将被带到“ 项目概述”屏幕。在 Get started下,点击 iOS开始我们的 iOS 原型。
为 iOS 注册应用程序
要注册我们的应用程序,我们需要提供一个项目标识符。
现在点击 注册应用程序。系统会要求您下载 需要添加到 Xcode 项目中的.plist文件。
此GoogleService-Info.plist将包含客户端 ID、API 密钥、数据库 URL 和存储桶等基本信息。下载后看看。然后,您需要通过将其拖到 Xcode 中显示的文件夹中来将其添加到您的项目中。
将初始化代码添加到您的应用程序
现在您可以将 Firebase 初始化代码添加到您的应用中!打开 AppDelegate
并导入 Firebase。然后加入FirebaseApp.configure()
。 didFinishLaunchingWithOptions
您的代码将如下所示:
import UIKit import Firebase @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { FirebaseApp.configure() return true } }
验证 Firebase 是否在您的应用中运行
设置终于完成,您可以测试 Firebase 是否已正确安装在您的应用中。当您在 Firebase 控制台中的将 Firebase添加到您的 iOS 应用 页面 上单击下一步时,您将看到:
让我们通过 Xcode 清理、构建和运行应用程序——应该没有错误。您还可以在控制台中看到一些与 Firebase 相关的日志。如果一切正常,Firebase 控制台会通知您。
欢呼!现在我们已经成功地为我们的应用设置了 Firebase。
Firebase 用户管理
如前所述,Firebase 可用于用户管理,所以让我们设置我们的应用程序进行身份验证和管理用户。首先,让我们导航到 Firebase Dashboard 中的 Authentication 部分,如下所示。
单击设置登录方法。在这里,我们可以看到许多可能性。您可以选择多个,或者如果您不想登录,您可以选择匿名。
电子邮件/密码:允许用户使用他们的电子邮件地址和密码进行注册。Firebase SDK 还提供电子邮件地址验证、密码恢复和电子邮件地址更改原语。
电话:允许用户使用 Firebase SDK 电话验证和用户身份验证工具使用手机号码登录。在 Firebase 的免费 Spark 计划下,您每月可以获得 10,000 次手机登录,但之后您必须付费。在选择此选项之前,请查看定价部分。
Google:Google 登录会在您连接的 iOS 和网络应用程序上自动配置。要为您的 Android 应用设置 Google 登录,您需要在项目设置中为每个应用添加 SHA1 指纹。
玩游戏:配置客户端 ID 和客户端密码。
Facebook:要使用 Facebook 进行身份验证,您必须将 oauth 重定向 URI 添加到您的 Facebook 应用程序配置中。
Twitter:要使用 Twitter 进行身份验证,您需要将回调URL 添加到 Twitter 应用程序配置中。
GitHub:要使用 GitHub 设置身份验证,您需要将授权回调 URL 添加到 GitHub 应用程序配置。
Anonymous:选择此选项可在您的应用程序中启用匿名访客帐户,这样您就可以强制执行特定于用户的安全和 Firebase 规则,而无需用户提供凭据。
配置电话验证
让我们看看如何使用手机作为登录方法。
首先,导航到Sign-in method,点击Phone,然后启用它。你会看到这样的屏幕:
您还需要将Firebase/Auth
pod 包含在您的Podfile中。
pod 'Firebase/Auth'
在 Podfile 中添加上述行后,导航到项目文件夹并运行 pod install
命令。
接下来,您需要在 Xcode 项目中启用推送通知。
要查找此设置,请从Targets 面板中选择您的应用程序,然后单击Capabilities选项卡。从那里,您可以启用 推送通知。
reCAPTCHA 验证
现在让我们配置 reCAPTCHA 验证。reCAPTCHA 用于无法发送或接收静默推送通知的情况,例如当用户禁用您的应用程序的后台刷新时,或在 iOS 模拟器上测试您的应用程序时。在这种情况下,Firebase 身份验证使用 reCAPTCHA 验证来完成手机登录流程。
单击 Xcode 左侧面板中的GoogleService-Info.plist以打开 plist。现在将REVERSED_CLIENT_ID的值复制 到 TextEdit 或另一个记事本中。
接下来,转到 Targets > your app > Info > URL Types。单击“+”按钮并将REVERSED_CLIENT_ID值复制到URL Schemes中,如下所示。
配置 Firebase 云消息传递
现在让我们使用我们应用的 APNs 配置 Firebase Cloud Messaging。
打开 Firebase 控制台,单击Settings按钮后,您将看到Project Settings和Users and Permissions。单击项目设置,然后 单击云消息传递选项卡。在此屏幕上,您可以找到 iOS 应用程序配置部分。
要启用 Firebase 云消息传递,我们会将 APN 和 APN 身份验证密钥上传到此对话框。
您需要创建 APNs 身份验证密钥和 APNs 证书密钥。
创建 APNs 身份验证密钥的步骤
在您的开发者帐户中,转到 Certificates, Identifiers & Profiles,然后在 Keys下选择 All。
单击右上角的添加按钮 ( + )。
输入 APNs 身份验证密钥的描述。
在 Key services下,选中APNs复选框,然后单击 Continue。
单击 确认 ,然后单击 下载。将您的钥匙保存在安全的地方!这是一次性下载,以后无法找回密钥。
创建 APNs 证书密钥的步骤
从您的 Apple 开发者帐户创建一个App ID ,并在创建时启用推送通知。App ID 是唯一标识应用程序的标识符。作为惯例,它由带有您的公司名称和应用程序名称的反向域表示(例如com.mysoft.myfirstfirebaseApp )。
为上述 App ID 创建一个Provisioning Profile 。
就是这样!现在,我们完成了所有配置,可以开始实现注册和登录流程。
使用电话验证注册用户
让我们回到 Xcode 并创建 RegistrationViewController.swift、 RegistrationViewController.storyboard和 RegistrationService.swift文件。
对于情节提要,我添加了 UITextField 和 UIButton,如下所示。这些应该在RegistrationViewController.swift中链接。
这就是我的 RegistrationViewController.swift的外观:
import Foundation import UIKit class RegistrationViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var phoneNumber: UITextField! override func viewDidLoad() { super.viewDidLoad() } @IBAction func requestOTPTapped(_ sender: Any) { } }
由于我们主要关注 Firebase,因此我们不会实现 UITextFieldDelegates。相反,为了简单起见,我们将在按钮单击时捕获文本。
现在让我们在RegistrationService.swift中添加以下代码 。
import FirebaseAuth class RegistrationService { func getVerificationId(phoneNumber: String, completionHandler: @escaping (String?, Error?) -> Void){ PhoneAuthProvider.provider().verifyPhoneNumber(phoneNumber, uiDelegate: nil) { (verificationID, error) in if let error = error { completionHandler(nil, error) } if let id = verificationID { completionHandler(id, nil) } } } }
在此代码中,PhoneAuthProvider.provider().verifyPhoneNumber
将电话号码作为输入并将verificationID
. 这还会向文本字段中提供的电话号码触发一次性密码 (OTP) 消息。用户将在手机上收到 OTP,并将其输入回应用程序的警报对话框中。
注意:输入电话号码时,请确保同时输入***代码。
另请注意,我们必须记住 import FirebaseAuth
在文件的顶部。
现在,让我们回到RegistrationViewController.swift并调用getVerificationId
,如下所示。在这里,我将 id 打印到控制台以检查是否verificationId
已生成。
import Foundation import UIKit class RegistrationViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var phoneNumber: UITextField! override func viewDidLoad() { super.viewDidLoad() } @IBAction func requestOTPTapped(_ sender: Any) { if let phoneNumber = phoneNumber.text{ RegistrationService().getVerificationId(phoneNumber: phoneNumber){ (id, error) in if error != nil { return } if let id = id { print(id) } } } } }
登录方法
现在让我们在 RegistrationService 中编写一个登录方法。在这里,我们将使用 verifyId 和 OTP 创建一个 Firebase Credential 对象。这是代码的外观:
func signIn(verificationId: String, verificationCode: String, completionHandler: @escaping (String?, Error?) -> Void){ let credential = PhoneAuthProvider.provider().credential(withVerificationID: verificationId, verificationCode: verificationCode) Auth.auth().signIn(with: credential) { (user, error) in if let error = error { completionHandler("Error", error) } completionHandler("Success", nil) } }
收到 id 后,我们将显示一个警报视图,供用户捕获 OTP 并signIn
调用 RegistrationService
. 以下是RegistrationViewController
这些更改后的外观:
import Foundation import UIKit class RegistrationViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var phoneNumber: UITextField! override func viewDidLoad() { super.viewDidLoad() } @IBAction func requestOTPTapped(_ sender: Any) { if let phoneNumber = phoneNumber.text{ RegistrationService().getVerificationId(phoneNumber: phoneNumber){ (id, error) in if error != nil { return } if let id = id { self.displayAlert(id: id) } } } } func displayAlert(id: String) { let alertController = UIAlertController(title: "OTP?", message: "", preferredStyle: .alert) let cancelAction = UIAlertAction(title: "Cancel", style: .default, handler: { (action : UIAlertAction!) -> Void in }) let saveAction = UIAlertAction(title: "Save", style: .default, handler: { alert -> Void in let otpText = alertController.textFields![0] as UITextField if let otp = otpText.text { print(otp) RegistrationService().signIn(verificationId: id, verificationCode: otp){ (status, error) in if error != nil { return } print("SignIn status", status ?? "Unknown") } } }) alertController.addTextField { (textField : UITextField!) -> Void in textField.placeholder = "OTP" } alertController.addAction(cancelAction) alertController.addAction(saveAction) self.present(alertController, animated: true, completion: nil) } }
现在您可以运行您的应用程序来试用它——这是您在单击 请求 OTP时将看到的内容。
现在登录状态将打印为 Success。我们可以在 Firebase 控制台中检查已创建用户。
结论
在本教程中,我们使用 Xcode 和 Firebase 构建了一个简单的应用程序。希望您获得了一些新技能,您将能够在接下来的项目中付诸实践。
- 创建一个新的 Xcode 项目
- 创建一个 Podfile
- 添加 Firebase Pod
- 安装 Pod 并在 Xcode 中打开项目
- 创建和配置您的 Firebase 帐户
- 创建 Firebase 帐户
- 在 Firebase 控制台中创建一个新项目
- 为 iOS 注册应用程序
- 将初始化代码添加到您的应用程序
- 验证 Firebase 是否在您的应用中运行
- 配置电话验证
- reCAPTCHA 验证
- 配置 Firebase 云消息传递
- 创建 APNs 身份验证密钥的步骤
- 创建 APNs 证书密钥的步骤
- 登录方法