我们正处于快速原型制作的时代。 我们可能会想到一些好主意,但有时如果他们花费过多的工作,这些主意就无法实现。 通常,后端是限制因素-许多想法由于缺乏服务器端编码的知识或时间而无法实现。
作为移动开发人员,使用后端即服务(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 Pods
我们想将Firebase / Core窗格添加到我们的项目中。 这包括启动和运行Firebase所需的必备库。
$ pod 'Firebase/Core'
现在,这是您的Podfile的外观:
安装Pods并在Xcode中打开项目
包括Pod详细信息之后,让我们使用pod install
命令安装它们。 然后,我们可以通过打开.xcworkspace文件在Xcode中打开项目。
$ pod install
$ open your-project.xcworkspace
创建和配置您的Firebase帐户
创建Firebase帐户
现在,让我们设置一个Firebase帐户 ! 众所周知,Firebase是Google产品,因此我们可以使用Gmail帐户创建Firebase控制台帐户。
但是,请注意:Firebase并非完全免费。 我们可以从免费版本开始进行初始原型制作,但是如果您打算将Firebase投入生产,则应该了解价格结构 。
在Firebase控制台中创建新项目
现在我们已经成功登录到Firebase帐户,让我们创建一个项目。 单击添加项目 。
创建项目后,即可与iOS,Android和Web共享Firebase数据库,用户管理和远程配置。
创建项目后,您将进入“ 项目概述”屏幕。 在“入门”下 ,单击iOS以开始使用我们的iOS原型。
注册iOS应用
要注册我们的应用,我们需要提供一个项目标识符。
现在,点击注册应用程序 。 系统会要求您下载一个.plist文件,该文件需要添加到您的Xcode项目中。
此GoogleService-Info.plist将包含基本信息,例如客户端ID,API密钥,数据库URL和存储桶。 下载后看看。 然后,您需要将其拖到Xcode下方显示的文件夹中,以将其添加到项目中。
将初始化代码添加到您的应用程序
现在,您可以将Firebase初始化代码添加到您的应用程序中! 打开AppDelegate
,然后导入Firebase。 然后在didFinishLaunchingWithOptions
添加FirebaseApp.configure()
。 您的代码将如下所示:
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仪表板中的“身份验证”部分,如下所示。
点击设置登录方法 。 在这里,我们可以看到许多可能性。 您可以选择多个,或者,如果您不想进行任何登录,则可以选择匿名 。
- 电子邮件/密码 :允许用户使用其电子邮件地址和密码进行注册。 Firebase SDK还提供电子邮件地址验证,密码恢复和电子邮件地址更改原语。
- 电话 :允许用户使用Firebase SDK电话验证和用户身份验证工具以手机号码登录。 根据Firebase的免费Spark计划,您每月可获得10,000次电话登录,但此后您需要付费。 选择此选项之前,请先查看定价部分。
- Google :在已连接的iOS和网络应用程序上会自动配置Google登录。 要为您的Android应用设置Google登录,您需要在“项目设置”中为每个应用添加SHA1指纹。
- 玩游戏 :配置客户端ID和客户端密码。
- Facebook :要使用Facebook进行身份验证,您必须将OAuth重定向URI添加到您的Facebook应用配置中。
- Twitter :要使用Twitter进行身份验证,您需要在Twitter应用程序配置中添加一个回调URL。
- GitHub :要通过GitHub设置身份验证,您将向您的GitHub应用配置添加授权回调URL。
- 匿名 :选择此选项可在您的应用程序中启用匿名访客帐户,这使您可以强制执行特定于用户的安全性和Firebase规则,而无需用户提供凭据。
配置电话验证
让我们看看如何使用电话作为登录方法。
首先,导航至“ 登录方法” ,单击“ 电话” ,然后启用它。 您会看到如下屏幕:
您还需要在Podfile中包括Firebase/Auth
pod。
pod 'Firebase/Auth'
在Podfile中添加以上行之后,导航至项目文件夹并运行pod install
命令。
接下来,您需要在Xcode项目中启用推送通知。
要找到此设置,请从“ 目标”面板中选择您的应用,然后单击“ 功能”选项卡。 从那里,您可以启用推送通知 。
reCAPTCHA验证
现在,让我们配置reCAPTCHA验证。 reCAPTCHA用于无法发送或接收静默推送通知的情况,例如,当用户已禁用应用程序的后台刷新时,或在iOS模拟器上测试应用程序时。 在这种情况下,Firebase身份验证使用reCAPTCHA验证来完成电话登录流程。
单击Xcode左侧面板中的GoogleService-Info.plist ,以打开plist。 现在,将REVERSED_CLIENT_ID的值复制到TextEdit或另一个记事本中。
接下来,转到目标 >您的应用> 信息 > URL类型 。 单击“ +”按钮,然后将REVERSED_CLIENT_ID值复制到URL Schemes中 ,如下所示。
配置Firebase云消息传递
现在,让我们使用应用程序的APN配置Firebase Cloud Messaging。
打开Firebase控制台,然后单击“ 设置”按钮,您将看到“ 项目设置”和“ 用户和权限” 。 单击项目设置 ,然后单击云消息传递选项卡。 在此屏幕上,您可以找到iOS应用配置部分。
要启用Firebase Cloud Messaging,我们将APN和APN身份验证密钥上载到此对话框。
您需要创建一个APNs身份验证密钥和一个APNs证书密钥。
创建APNs身份验证密钥的步骤
- 在您的开发者帐户中,转到证书,标识符和配置文件 ,然后在密钥下,选择全部 。
- 单击右上角的添加按钮( + )。
- 输入APNs身份验证密钥的描述。
- 在“ 关键服务”下 ,选中“ APN”复选框,然后单击“ 继续” 。
- 单击确认 ,然后单击下载 。 将密钥保存在安全的地方! 这是一次性下载,以后无法检索到密钥。
创建APNs证书密钥的步骤
- 在您的Apple开发人员帐户中创建一个应用程序ID ,并在创建时启用“ 推送通知” 。 应用程序ID是唯一标识应用程序的标识符。 按照惯例,它由带有您公司名称和应用名称(例如com.mysoft.myfirstfirebaseApp )的反向域名表示。
- 为上述应用程序ID创建一个配置文件 。
就是这样! 现在,我们完成了所有配置,并且可以开始实现注册和登录流程。
用电话认证注册用户
让我们回到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中编写一个登录方法。 在这里,我们将使用VerificationId和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并在RegistrationService
调用signIn
方法。 经过这些更改后, 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构建了一个简单的应用程序。 希望您将获得一些新技能,并可以在即将进行的项目中付诸实践。
如有任何疑问,请在下面的评论中告诉我。
翻译自: https://code.tutsplus.com/tutorials/introduction-to-firebase--cms-31454