您可以使用 Firebase 驗證功能,讓使用者透過一或多種登入方式登入應用程式,包括電子郵件地址和密碼登入,以及 Google 登入和 Facebook 登入等聯合識別資訊提供者登入。本教學課程說明如何在應用程式中新增電子郵件地址和密碼登入,以開始使用 Firebase 驗證功能。
將應用程式連結至 Firebase
- 安裝 Firebase SDK。
- 在 Firebase 主控台內,將您的應用程式新增至 Firebase 專案中。
在應用程式中加入 Firebase 驗證
使用 Swift Package Manager 安裝及管理 Firebase 依附元件。
- 在 Xcode 中保持開啟應用程式專案,然後依序點選「File」>「Add Packages」。
- 在系統提示時,新增 Firebase Apple 平台 SDK 存放區:
- 選擇 Firebase 驗證資料庫。
- 在目標建構設定的「Other Linker Flags」部分中新增
-ObjC
標記。 - 完成後,Xcode 會自動開始在背景解析並下載依附元件。
https://github.com/firebase/firebase-ios-sdk.git
(選用) 使用 Firebase 本機模擬器套件設計原型並進行測試
在說明應用程式驗證使用者的方式之前,讓我們先介紹一組工具,可用來設計原型及測試驗證功能:Firebase 本機模擬器套件。如果您正在考慮驗證技術與供應商,建議您使用驗證和 Firebase 安全性規則,以公開和私人資料來嘗試不同的資料模型,或是設計登入 UI 的原型,而無需部署上線的服務,也能在本機運作。
驗證模擬器是本機模擬器套件的一部分,可讓應用程式與模擬資料庫內容和設定互動,並視需要選擇模擬專案資源 (函式、其他資料庫和安全性規則)。
使用驗證模擬器只需完成幾個步驟:
- 將一行程式碼新增至應用程式的測試設定,即可與模擬器連線。
- 從本機專案目錄的根目錄中執行
firebase emulators:start
。 - 使用本機模擬器套件 UI 進行互動式原型設計,或使用 Authentication Emulator REST API 進行非互動式測試。
如需詳細指南,請參閱「將應用程式連線至驗證模擬器」一文。詳情請參閱「本機模擬器套件簡介」。
接下來說明如何驗證使用者。
初始化 Firebase SDK
在應用程式委派項目中,先匯入 Firebase SDK:
Swift
import FirebaseCore
Objective-C
@import FirebaseCore;
接著,在 application:didFinishLaunchingWithOptions:
方法中初始化 FirebaseApp
物件:
Swift
// Use Firebase library to configure APIs
FirebaseApp.configure()
Objective-C
// Use Firebase library to configure APIs
[FIRApp configure];
監聽驗證狀態
針對每個需要登入使用者相關資訊的應用程式檢視畫面,將事件監聽器附加至 FIRAuth
物件。每當使用者的登入狀態有所變更,系統就會呼叫這個事件監聽器。
在檢視控制器的 viewWillAppear
方法中附加事件監聽器:
Swift
handle = Auth.auth().addStateDidChangeListener { auth, user in
// ...
}
Objective-C
self.handle = [[FIRAuth auth]
addAuthStateDidChangeListener:^(FIRAuth *_Nonnull auth, FIRUser *_Nullable user) {
// ...
}];
然後在檢視控制器的 viewWillDisappear
方法中卸離事件監聽器:
Swift
Auth.auth().removeStateDidChangeListener(handle!)
Objective-C
[[FIRAuth auth] removeAuthStateDidChangeListener:_handle];
註冊新使用者
建立表單,讓新使用者可以使用自己的電子郵件地址和密碼註冊您的應用程式。使用者填妥表單後,請驗證使用者提供的電子郵件地址和密碼,然後傳遞至 createUser
方法:
Swift
Auth.auth().createUser(withEmail: email, password: password) { authResult, error in
// ...
}
Objective-C
[[FIRAuth auth] createUserWithEmail:email
password:password
completion:^(FIRAuthDataResult * _Nullable authResult,
NSError * _Nullable error) {
// ...
}];
登入現有使用者
建立表單,讓現有使用者能夠用自己的電子郵件地址和密碼登入。使用者填妥表單時,請呼叫 signIn
方法:
Swift
Auth.auth().signIn(withEmail: email, password: password) { [weak self] authResult, error in
guard let strongSelf = self else { return }
// ...
}
Objective-C
[[FIRAuth auth] signInWithEmail:self->_emailField.text
password:self->_passwordField.text
completion:^(FIRAuthDataResult * _Nullable authResult,
NSError * _Nullable error) {
// ...
}];
取得使用者資訊
使用者成功登入後,您就可以取得使用者的相關資訊。例如,在驗證狀態事件監聽器中:
Swift
if let user = user {
// The user's ID, unique to the Firebase project.
// Do NOT use this value to authenticate with your backend server,
// if you have one. Use getTokenWithCompletion:completion: instead.
let uid = user.uid
let email = user.email
let photoURL = user.photoURL
var multiFactorString = "MultiFactor: "
for info in user.multiFactor.enrolledFactors {
multiFactorString += info.displayName ?? "[DispayName]"
multiFactorString += " "
}
// ...
}
Objective-C
if (user) {
// The user's ID, unique to the Firebase project.
// Do NOT use this value to authenticate with your backend server,
// if you have one. Use getTokenWithCompletion:completion: instead.
NSString *email = user.email;
NSString *uid = user.uid;
NSMutableString *multiFactorString = [NSMutableString stringWithFormat:@"MultiFactor: "];
for (FIRMultiFactorInfo *info in user.multiFactor.enrolledFactors) {
[multiFactorString appendString:info.displayName];
[multiFactorString appendString:@" "];
}
NSURL *photoURL = user.photoURL;
// ...
}
後續步驟
瞭解如何新增對其他識別資訊提供者和匿名訪客帳戶的支援: