Firebase簡(jiǎn)介
首先,允許我給廣大讀者隆重介紹下我們今天的主角:Firebase

Firebase是Google提供的類(lèi)似facebook—parse的那么一種服務(wù),可使得我們app-maker避免編寫(xiě)冗長(zhǎng)的服務(wù)器代碼。
哦,我們甚至不需要什么服務(wù)器,就可以輕松編寫(xiě)出一個(gè)有著數(shù)據(jù)同步,用戶(hù)鑒權(quán)登陸,remote 通知,應(yīng)用使用習(xí)慣統(tǒng)計(jì)等功能的一款A(yù)pp,并且Firebase是跨平臺(tái)的,意味著,你的iOS,Android,Web應(yīng)用都可以使用同一個(gè)數(shù)據(jù)庫(kù)機(jī)構(gòu)和用戶(hù)管理系統(tǒng)。
-
說(shuō)了那么多,那么Firebase能做什么事情呢?這里從官網(wǎng)盜了一張圖,它的功能簡(jiǎn)直是強(qiáng)大到讓人發(fā)指。
暴力的Firebase 你不需要編寫(xiě)任何服務(wù)器代碼,只要你的點(diǎn)子夠有意思,也許,下一個(gè)million dollar app就屬于你。 今天,讓我們一起探索下,怎樣使用Firebase進(jìn)行Email授權(quán)登陸,下一期完成和FaceBook授權(quán)登陸
PS:我也會(huì)在接下來(lái)的一系列文章中繼續(xù)深入Firebase的功能,最終做到,使用Firebase上架一款iOS APP。
Email授權(quán)登陸前期準(zhǔn)備 (源碼請(qǐng)見(jiàn)文章最后)
題外話(huà):UI/UX對(duì)于App的重要性不言而喻,安利幾個(gè)自己喜歡的App的登陸界面。



怎么樣,是不是立馬就有沖動(dòng),到商店下載這幾個(gè)App呢? 稍等片刻,我們可以先看完今天的文章再說(shuō)嘛。
回到我們的正題,使用Email認(rèn)證登陸App。
- 使用Firebase的Email登陸功能,需要App的Bundle ID,在Xcode中創(chuàng)建App時(shí)候填寫(xiě)的值,該ID對(duì)應(yīng)著該應(yīng)用唯一的標(biāo)識(shí)。

打開(kāi)Firebase的官網(wǎng),注冊(cè)一個(gè)賬號(hào),登陸后,按照如下步驟配置即可使用Email授權(quán)功能了
- 打開(kāi)你賬號(hào)的Firebase 控制臺(tái),點(diǎn)擊創(chuàng)建應(yīng)用

- 選擇國(guó)家,輸入應(yīng)用名稱(chēng)(隨便填寫(xiě))之后,根據(jù)你自己的需求,選擇平臺(tái),這里我們選擇iOS,然后輸入Xcode創(chuàng)建工程的Bundle ID

- 接下來(lái)這一步重要了,瀏覽器會(huì)自動(dòng)下載一個(gè)文件:GoogleService-Info.plist,這個(gè)文件是用來(lái)確保我們Xcode中的應(yīng)用可以和Firebase中創(chuàng)建的應(yīng)用鏈接??起來(lái),將GoogleService-Info.plist文件拖入到Xcode工程中。

- 然后需要使用CocoaPods安裝Firebase SDK,這一步就不說(shuō)了,網(wǎng)上一搜教程,很多 Using CocoaPods in Your Swift and Objective-C Projects,貼一下Podfile文件: 需要說(shuō)明是,F(xiàn)irebase 更新之后,Google將所有的業(yè)務(wù)分成一個(gè)個(gè)子模塊,比如我們需要用戶(hù)認(rèn)證的功能,只需要在pod中加入Core和Auth模塊即可
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
target 'FirebaseTutorial' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!
# Pods for FirebaseTutorial1
pod 'Firebase/Core'
pod 'Firebase/Auth'
end
最后,需要在AppDelegate中,
import Firebase
更新application(_:didFinishLaunchingWithOptions:)方法:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
FIRApp.configure()
return true
}
- 隨后,需要在創(chuàng)建的應(yīng)用的Authentication選項(xiàng)卡中,開(kāi)啟Email/password登陸功能

這時(shí),準(zhǔn)備工作就做完了,萬(wàn)事俱備,開(kāi)始集成Email 登陸功能吧。
Email授權(quán)登陸實(shí)現(xiàn)過(guò)程
為了將我們的注意力集中在Email的功能上,可以下載start project
start project ,打開(kāi)后,已經(jīng)創(chuàng)建好了Storyboard和登陸,注冊(cè),主頁(yè),重制密碼幾個(gè)ViewController,我知道很丑,大家不要在意,我保證后面后設(shè)計(jì)一個(gè)精美的登陸界面

- 注冊(cè)
核心代碼如下,首先需要import FirebaseAuth模塊,使用createUser方法,通過(guò)傳入的email和password,來(lái)創(chuàng)建用戶(hù);email和password的內(nèi)容都是用戶(hù)從TextView中輸入的。
FIRAuth.auth()?.createUser(withEmail: emailTextField.text!, password: passwordTextField.text!, completion: { (user, error) in
if error == nil {
//跳轉(zhuǎn)到主頁(yè)
let vc = self.storyboard?.instantiateViewController(withIdentifier: "Home")
self.present(vc!, animated: true, completion: nil)
}
})
如果注冊(cè)成功,就會(huì)跳轉(zhuǎn)到應(yīng)用主頁(yè),如果注冊(cè)失敗,比如Email重復(fù),就會(huì)彈出錯(cuò)誤信息。

這時(shí),打開(kāi)瀏覽器看看Firebase的console中,發(fā)現(xiàn)用戶(hù)管理項(xiàng)中已經(jīng)多了一條記錄,其實(shí),它就是我們剛才注冊(cè)的賬號(hào)。

- 登陸
核心代碼如下,使用signIn方法,驗(yàn)證輸入的Emial和password是否可以通過(guò)服務(wù)器驗(yàn)證,通過(guò)后跳轉(zhuǎn)到主頁(yè),錯(cuò)誤則彈框
FIRAuth.auth()?.signIn(withEmail: emailTextField.text!, password: passwordTextField.text!, completion: { (user, error) in
if error == nil {
let vc = self.storyboard?.instantiateViewController(withIdentifier: "Home")
self.present(vc!, animated: true, completion: nil)
}
})

什么,已經(jīng)完成了?對(duì)滴,我們用了20分鐘,就完成了一個(gè)帶有服務(wù)器注冊(cè)和登錄驗(yàn)證功能的App。 給大家留兩個(gè)作業(yè),主頁(yè)中的用戶(hù)登出和重置密碼的功能,我們可以使用Firebase提供的API很快就能完成這樣的功能,大家可以查詢(xún)官方文檔試試看。
源代碼已上傳Github主頁(yè):
Demo for accomplishing email && password login process through Firebase
總結(jié):
注冊(cè): FIRAuth.auth()?.createUser
登陸: FIRAuth.auth()?.signIn
重置密碼: FIRAuth.auth()?.sendPasswordReset 會(huì)給該郵箱發(fā)送重置密碼的郵件
登出: try? FIRAuth.auth()?.signOut()
PS : 大家有什么意見(jiàn)可以在留言板交流,我們的目標(biāo)是,不用一行服務(wù)器代碼,上架一款互聯(lián)網(wǎng)App。
