Firebase Authentication を使用すると、メール アドレスとパスワードによるサインイン、Google サインインや Facebook ログインなどのフェデレーション ID プロバイダーなど、1 つ以上のサインイン方法を使用してユーザーがアプリにサインインできるようになります。このチュートリアルでは、メール アドレスとパスワードによるサインインをアプリに追加する方法を示すことで、Firebase Authentication の使用を開始できます。
アプリを Firebase に接続する
- Firebase SDK をインストールします。
- Firebase コンソールで、アプリを Firebase プロジェクトに追加します。
アプリに Firebase Authentication を追加する
Swift Package Manager を使用して、Firebase の依存関係をインストールおよび管理します。
- Xcode で、アプリ プロジェクトを開いた状態で、 File > Add Packagesに移動します。
- プロンプトが表示されたら、Firebase Apple プラットフォーム SDK リポジトリを追加します。
- Firebase Authentication ライブラリを選択します。
- 完了すると、Xcode はバックグラウンドで依存関係の解決とダウンロードを自動的に開始します。
https://github.com/firebase/firebase-ios-sdk
(省略可)Firebase Local Emulator Suite でプロトタイプを作成してテストする
アプリがユーザーを認証する方法について説明する前に、認証機能のプロトタイプとテストに使用できる一連のツール、Firebase Local Emulator Suite を紹介しましょう。認証技術とプロバイダーを決定している場合、Authentication と Firebase セキュリティ ルールを使用してパブリック データとプライベート データでさまざまなデータ モデルを試している場合、またはサインイン UI デザインのプロトタイプを作成している場合、ライブ サービスをデプロイせずにローカルで作業できることは素晴らしいアイデアです。 .
認証エミュレーターはローカル エミュレーター スイートの一部であり、アプリがエミュレートされたデータベースのコンテンツと構成、および必要に応じてエミュレートされたプロジェクト リソース (関数、他のデータベース、およびセキュリティ ルール) とやり取りできるようにします。
認証エミュレーターを使用するには、いくつかの手順が必要です。
- アプリのテスト構成にコード行を追加して、エミュレーターに接続します。
- ローカル プロジェクト ディレクトリのルートから、
firebase emulators:start
を実行します。 - インタラクティブなプロトタイピングにはローカル エミュレーター スイート UI を使用し、非インタラクティブなテストには認証エミュレーター REST API を使用します。
詳細なガイドは、アプリを認証エミュレーターに接続するで入手できます。詳細については、 Local Emulator Suiteの概要を参照してください。
それでは、ユーザーを認証する方法を続けましょう。
Firebase SDK を初期化する
アプリ デリゲートで、最初に Firebase SDK をインポートします。
迅速
import FirebaseCore
Objective-C
@import FirebaseCore;
次に、 application:didFinishLaunchingWithOptions:
メソッドで、 FirebaseApp
オブジェクトを初期化します。
迅速
// Use Firebase library to configure APIs
FirebaseApp.configure()
Objective-C
// Use Firebase library to configure APIs
[FIRApp configure];
認証状態をリッスンする
サインインしているユーザーに関する情報が必要なアプリのビューごとに、リスナーをFIRAuth
オブジェクトにアタッチします。このリスナーは、ユーザーのサインイン状態が変化するたびに呼び出されます。
ビュー コントローラーのviewWillAppear
メソッドにリスナーをアタッチします。
迅速
handle = Auth.auth().addStateDidChangeListener { auth, user in
// ...
}
Objective-C
self.handle = [[FIRAuth auth]
addAuthStateDidChangeListener:^(FIRAuth *_Nonnull auth, FIRUser *_Nullable user) {
// ...
}];
そして、View Controller のviewWillDisappear
メソッドでリスナーを切り離します。
迅速
Auth.auth().removeStateDidChangeListener(handle!)
Objective-C
[[FIRAuth auth] removeAuthStateDidChangeListener:_handle];
新規ユーザー登録
新しいユーザーがメール アドレスとパスワードを使用してアプリに登録できるフォームを作成します。ユーザーがフォームに入力したら、ユーザーから提供された電子メール アドレスとパスワードを検証し、それらをcreateUser
メソッドに渡します。
迅速
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
メソッドを呼び出します。
迅速
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) {
// ...
}];
ユーザー情報を取得する
ユーザーが正常にサインインすると、ユーザーに関する情報を取得できます。たとえば、認証状態リスナーでは次のようになります。
迅速
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;
// ...
}
次のステップ
他の ID プロバイダーと匿名ゲスト アカウントのサポートを追加する方法を学習します。