Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。

FirebaseUIを使用してiOSアプリにサインインを簡単に追加する

FirebaseUIは、アプリで使用するためのドロップイン UI フローを提供する Firebase Authentication SDK の上に構築されたライブラリです。 FirebaseUI には次の利点があります。

  • 複数のプロバイダー: メール/パスワード、メール リンク、電話認証、Google サインイン、Facebook ログイン、Twitter ログインのサインイン フロー。
  • アカウント管理: アカウントの作成やパスワードのリセットなど、アカウント管理タスクを処理するためのフロー。
  • 匿名アカウントのリンク: 匿名アカウントを ID プロバイダーに自動的にリンクするフロー。
  • カスタマイズ可能: アプリに合わせて FirebaseUI の外観をカスタマイズします。また、FirebaseUI はオープン ソースであるため、プロジェクトをフォークして、必要に応じて正確にカスタマイズできます。

あなたが始める前に

  1. Apple プロジェクトに Firebase を追加します

  2. Podfile に FirebaseUI を追加します。

    pod 'FirebaseUI'
    

    必要に応じて、使用する Auth コンポーネントとプロバイダーのみを追加できます。

    pod 'FirebaseUI/Auth'
    
    pod 'FirebaseUI/Google'
    pod 'FirebaseUI/Facebook'
    pod 'FirebaseUI/OAuth' # Used for Sign in with Apple, Twitter, etc
    pod 'FirebaseUI/Phone'
    
  3. アプリを Firebase プロジェクトにまだ接続していない場合は、 Firebase コンソールから接続します。

サインイン方法を設定する

Firebase を使用してユーザーをサインインさせる前に、サポートするサインイン方法を有効にして構成する必要があります。

メールアドレスとパスワード

Firebase コンソールで、[認証]セクションを開き、メールとパスワードの認証を有効にします。

  1. Firebase コンソールで、[認証]セクションを開きます。 [サインイン方法] タブで、電子メール/パスワードプロバイダーを有効にします。メール リンク サインインを使用するには、メール/パスワード サインインを有効にする必要があることに注意してください。

  2. 同じセクションで、[電子メール リンク (パスワードなしのサインイン) ] サインイン方法を有効にし、[保存] をクリックします。

  3. FIREmailLinkAuthSignInMethodFUIEmailAuthインスタンスを初期化することにより、電子メール リンクのサインインを有効にできます。また、 handleCodeInAppを true に設定した有効なFIRActionCodeSettingsオブジェクトを提供する必要があります。

迅速

var actionCodeSettings = ActionCodeSettings()
actionCodeSettings.url = URL(string: "https://example.appspot.com")
actionCodeSettings.handleCodeInApp = true
actionCodeSettings.setAndroidPackageName("com.firebase.example", installIfNotAvailable: false, minimumVersion: "12")

let provider = FUIEmailAuth(authUI: FUIAuth.defaultAuthUI()!,
                            signInMethod: FIREmailLinkAuthSignInMethod,
                            forceSameDevice: false,
                            allowNewEmailAccounts: true,
                            actionCodeSetting: actionCodeSettings)

Objective-C

FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init];
actionCodeSettings.URL = [NSURL URLWithString:@"https://example.appspot.com"];
actionCodeSettings.handleCodeInApp = YES;
[actionCodeSettings setAndroidPackageName:@"com.firebase.example"
                    installIfNotAvailable:NO
                           minimumVersion:@"12"];

id<FUIAuthProvider> provider = [[FUIEmailAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]
                                                       signInMethod:FIREmailLinkAuthSignInMethod
                                                    forceSameDevice:NO
                                              allowNewEmailAccounts:YES
                                                  actionCodeSetting:actionCodeSettings];
  1. さらに、初期化子に渡す URL をホワイトリストに登録する必要があります。これはFirebase コンソールで行うことができ、[認証]セクションを開きます。 [サインイン方法] タブで、[承認済みドメイン] の下に URL を追加します。

  2. ディープ リンクを取得したら、それを処理できるように認証 UI に渡す必要があります。

迅速

FUIAuth.defaultAuthUI()!.handleOpen(url, sourceApplication: sourceApplication)

Objective-C

[[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];
  1. FirebaseUI-iOS での電子メール リンク サインインは、 FirebaseUI-AndroidおよびFirebaseUI-webと互換性があり、FirebaseUI-Android からフローを開始する 1 人のユーザーがリンクを開いて、FirebaseUI-web でのサインインを完了することができます。逆の流れも同様です。

アップル

  1. Firebase Sign in with Appleガイドの「始める前に」および「 Apple の匿名データ要件に準拠する」セクションに従ってください。

  2. Sign in with Apple 機能を資格ファイルに追加します。

  3. Sign in with Apple 用に構成された OAuth プロバイダー インスタンスを初期化します。

    迅速

    provider = FUIOAuth.appleAuthProvider()
    

    Objective-C

    FUIOAuth *provider = [FUIOAuth appleAuthProvider];
    

グーグル

  1. Firebase コンソールで、[認証]セクションを開き、Google サインインを有効にします。

  2. 逆引きクライアント ID を URL スキームとして Xcode プロジェクトに追加します。この値はGoogleService-Info.plistファイルにあります。

フェイスブック

  1. Facebook の開始ページに従って、Facebook ログイン SDK をセットアップします。

  2. Firebase コンソールで、[認証]セクションを開き、Facebook を有効にします。 Facebook サインインを有効にするには、Facebook 開発者コンソールで取得できる Facebook アプリ ID とアプリ シークレットを提供する必要があります。

  3. [Project Settings] > [Capabilities]画面から、Xcode プロジェクトでキーチェーン共有を有効にします。

  4. Xcode プロジェクトにfb FACEBOOK_APP_IDを URL スキームとして追加します。

  5. Facebook アプリ ID と表示名をInfo.plistファイルに追加します。

    価値
    FacebookAppID FACEBOOK_APP_ID (例: 1234567890 )
    Facebook表示名アプリの名前
  6. Facebook プロバイダー インスタンスを初期化します。

    迅速

    provider = FUIFacebookAuth(authUI: FUIAuth.defaultAuthUI())
    

    Objective-C

    FUIFacebookAuth *provider = [[FUIFacebookAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]];
    

  7. Facebook Limited Loginを使用する場合は、 FUIFacebookAuthインスタンスでuseLimitedLoginプロパティを設定します。

    迅速

    provider.useLimitedLogin = true
    

    Objective-C

    provider.useLimitedLogin = YES;
    

ツイッター

  1. Firebase コンソールで、[認証]セクションを開き、Twitter を有効にします。 Twitter サインインを有効にするには、Twitter アプリケーション管理コンソールで取得できる Twitter API コンシューマー キーとシークレットを提供する必要があります。

  2. Twitter ログイン用に構成された OAuth プロバイダー インスタンスを初期化します。

    迅速

    provider = FUIOAuth.twitterAuthProvider()
    

    Objective-C

    FUIOAuth *provider = [FUIOAuth twitterAuthProvider];
    

電話番号

  1. Firebase コンソールで [認証]セクションを開き、電話番号によるサインインを有効にします。

  2. Firebase は、電話番号サインイン リクエストがアプリからのものであることを確認できる必要があります。これを実現する方法の 1 つは、APNs 通知を使用することです。詳細については、アプリの検証を有効にするを参照してください。

    Firebase Authentication で使用する APNs 通知を有効にするには:

    1. Xcode で、プロジェクトのプッシュ通知を有効にします。

    2. APNs 認証キーを Firebase にアップロードします。 APNs 認証キーをまだ持っていない場合は、 Apple Developer Member Centerで必ず作成してください。

      1. Firebase コンソールのプロジェクト内で、歯車アイコンを選択し、[プロジェクト設定]を選択してから、[クラウド メッセージング] タブを選択します。

      2. [ iOS アプリの構成] の [ APNs 認証キー] で、[アップロード] ボタンをクリックします。

      3. キーを保存した場所を参照して選択し、[開く] をクリックします。キーのキー ID ( Apple Developer Member Centerで入手可能) を追加し、[アップロード] をクリックします。

      APNs 証明書が既にある場合は、代わりに証明書をアップロードできます。

  3. デバイスで APNs 通知を受信できない場合、Firebase は reCAPTCHA を使用してリクエストを確認します。

    reCAPTCHA 検証を有効にするには、反転したクライアント ID を URL スキームとして追加していない場合 (たとえば、Google サインインを有効にするため)、Xcode プロジェクトで追加します。この値はGoogleService-Info.plistファイルにあります。

  4. オプション: Firebase はメソッド スウィズリングを使用して、アプリの APNs トークンを自動的に取得し、Firebase がアプリに送信するサイレント プッシュ通知を処理し、検証中に reCAPTCHA 検証ページからのカスタム スキーム リダイレクトを自動的にインターセプトします。

    スウィズリングを使用したくない場合は、Firebase SDK 認証ドキュメントの付録: スウィズリングなしでの電話サインインの使用を参照してください。

サインイン

FirebaseUI サインイン フローを開始するには、まず FirebaseUI を初期化します。

迅速

import FirebaseAuthUI

/* ... */

FirebaseApp.configure()
let authUI = FUIAuth.defaultAuthUI()
// You need to adopt a FUIAuthDelegate protocol to receive callback
authUI.delegate = self

Objective-C

@import FirebaseAuthUI;

...

[FIRApp configure];
FUIAuth *authUI = [FUIAuth defaultAuthUI];
// You need to adopt a FUIAuthDelegate protocol to receive callback
authUI.delegate = self;

次に、サポートするサインイン方法を使用するように FirebaseUI を構成します。

迅速

import FirebaseAuthUI
import FirebaseFacebookAuthUI
import FirebaseGoogleAuthUI
import FirebaseOAuthUI
import FirebasePhoneAuthUI

let providers: [FUIAuthProvider] = [
  FUIGoogleAuth(),
  FUIFacebookAuth(),
  FUITwitterAuth(),
  FUIPhoneAuth(authUI:FUIAuth.defaultAuthUI()),
]
self.authUI.providers = providers

Objective-C

@import FirebaseAuthUI;
@import FirebaseFacebookAuthUI;
@import FirebaseGoogleAuthUI;
@import FirebaseOAuthUI;
@import FirebasePhoneAuthUI;

...

NSArray<id<FUIAuthProvider>> *providers = @[
  [[FUIGoogleAuth alloc] init],
  [[FUIFacebookAuth alloc] init],
  [[FUITwitterAuth alloc] init],
  [[FUIPhoneAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]]
];
_authUI.providers = providers;

Google または Facebook のサインインを有効にした場合は、Google および Facebook のサインアップ フローの結果のハンドラーを実装します。

迅速

func application(_ app: UIApplication, open url: URL,
    options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
  let sourceApplication = options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String?
  if FUIAuth.defaultAuthUI()?.handleOpen(url, sourceApplication: sourceApplication) ?? false {
    return true
  }
  // other URL handling goes here.
  return false
}

Objective-C

- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary *)options {
  NSString *sourceApplication = options[UIApplicationOpenURLOptionsSourceApplicationKey];
  return [[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];
}

最後に、 AuthViewControllerからFUIAuthのインスタンスを取得します。その後、それをアプリの最初のビュー コントローラーとして提示するか、アプリ内の別のビュー コントローラーから提示することができます。

迅速

サインイン方法セレクターを取得するには:

let authViewController = authUI.authViewController()

電話番号サインインのみを使用する場合は、代わりに電話番号サインイン ビューを直接表示できます。

let phoneProvider = FUIAuth.defaultAuthUI().providers.first as! FUIPhoneAuth
phoneProvider.signIn(withPresenting: currentlyVisibleController, phoneNumber: nil)

Objective-C

サインイン方法セレクターを取得するには:

UINavigationController *authViewController = [authUI authViewController];

電話番号サインインのみを使用する場合は、代わりに電話番号サインイン ビューを直接表示できます。

FUIPhoneAuth *phoneProvider = [FUIAuth defaultAuthUI].providers.firstObject;
[phoneProvider signInWithPresentingViewController:currentlyVisibleController phoneNumber:nil];

認証ビューを提示してユーザーがサインインすると、結果がdidSignInWithUser:error:メソッドの FirebaseUI Auth デリゲートに返されます。

迅速

func authUI(_ authUI: FUIAuth, didSignInWith user: FIRUser?, error: Error?) {
  // handle user and error as necessary
}

Objective-C

   - (void)authUI:(FUIAuth *)authUI
didSignInWithUser:(nullable FIRUser *)user
            error:(nullable NSError *)error {
  // Implement this method to handle signed in user or error if any.
}

サインアウト

FirebaseUI には、Firebase Authentication およびすべてのソーシャル ID プロバイダーからサインアウトするための便利なメソッドが用意されています。

迅速

authUI.signOut()

Objective-C

[authUI signOut];

カスタマイズ

FirebaseUI のビュー コントローラーをサブクラス化し、それらをFUIAuthのデリゲート メソッドで指定することにより、サインイン画面をカスタマイズできます。

迅速

func authPickerViewController(forAuthUI authUI: FUIAuth) -> FUIAuthPickerViewController {
  return FUICustomAuthPickerViewController(nibName: "FUICustomAuthPickerViewController",
                                           bundle: Bundle.main,
                                           authUI: authUI)
}

func emailEntryViewController(forAuthUI authUI: FUIAuth) -> FUIEmailEntryViewController {
  return FUICustomEmailEntryViewController(nibName: "FUICustomEmailEntryViewController",
                                           bundle: Bundle.main,
                                           authUI: authUI)
}

func passwordRecoveryViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordRecoveryViewController {
  return FUICustomPasswordRecoveryViewController(nibName: "FUICustomPasswordRecoveryViewController",
                                                 bundle: Bundle.main,
                                                 authUI: authUI,
                                                 email: email)
}

func passwordSignInViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordSignInViewController {
  return FUICustomPasswordSignInViewController(nibName: "FUICustomPasswordSignInViewController",
                                               bundle: Bundle.main,
                                               authUI: authUI,
                                               email: email)
}

func passwordSignUpViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordSignUpViewController {
  return FUICustomPasswordSignUpViewController(nibName: "FUICustomPasswordSignUpViewController",
                                               bundle: Bundle.main,
                                               authUI: authUI,
                                               email: email)
}

func passwordVerificationViewController(forAuthUI authUI: FUIAuth, email: String, newCredential: AuthCredential) -> FUIPasswordVerificationViewController {
  return FUICustomPasswordVerificationViewController(nibName: "FUICustomPasswordVerificationViewController",
                                                     bundle: Bundle.main,
                                                     authUI: authUI,
                                                     email: email,
                                                     newCredential: newCredential)
}

Objective-C

- (FUIAuthPickerViewController *)authPickerViewControllerForAuthUI:(FUIAuth *)authUI {
  return [[FUICustomAuthPickerViewController alloc] initWithNibName:@"FUICustomAuthPickerViewController"
                                                             bundle:[NSBundle mainBundle]
                                                             authUI:authUI];
}

- (FUIEmailEntryViewController *)emailEntryViewControllerForAuthUI:(FUIAuth *)authUI {
  return [[FUICustomEmailEntryViewController alloc] initWithNibName:@"FUICustomEmailEntryViewController"
                                                             bundle:[NSBundle mainBundle]
                                                             authUI:authUI];

}

- (FUIPasswordSignInViewController *)passwordSignInViewControllerForAuthUI:(FUIAuth *)authUI
                                                                     email:(NSString *)email {
  return [[FUICustomPasswordSignInViewController alloc] initWithNibName:@"FUICustomPasswordSignInViewController"
                                                                 bundle:[NSBundle mainBundle]
                                                                 authUI:authUI
                                                                  email:email];

}

- (FUIPasswordSignUpViewController *)passwordSignUpViewControllerForAuthUI:(FUIAuth *)authUI
                                                                     email:(NSString *)email {
  return [[FUICustomPasswordSignUpViewController alloc] initWithNibName:@"FUICustomPasswordSignUpViewController"
                                                                 bundle:[NSBundle mainBundle]
                                                                 authUI:authUI
                                                                  email:email];

}

- (FUIPasswordRecoveryViewController *)passwordRecoveryViewControllerForAuthUI:(FUIAuth *)authUI
                                                                         email:(NSString *)email {
  return [[FUICustomPasswordRecoveryViewController alloc] initWithNibName:@"FUICustomPasswordRecoveryViewController"
                                                                   bundle:[NSBundle mainBundle]
                                                                   authUI:authUI
                                                                    email:email];

}

- (FUIPasswordVerificationViewController *)passwordVerificationViewControllerForAuthUI:(FUIAuth *)authUI
                                                                                 email:(NSString *)email
                                                                         newCredential:(FIRAuthCredential *)newCredential {
  return [[FUICustomPasswordVerificationViewController alloc] initWithNibName:@"FUICustomPasswordVerificationViewController"
                                                                       bundle:[NSBundle mainBundle]
                                                                       authUI:authUI
                                                                        email:email
                                                                newCredential:newCredential];
}

アカウント作成画面にリンクされている、アプリの利用規約への URL をカスタマイズできます。

迅速

let kFirebaseTermsOfService = URL(string: "https://example.com/terms")!
authUI.tosurl = kFirebaseTermsOfService

Objective-C

authUI.TOSURL = [NSURL URLWithString:@"https://example.com/terms"];

最後に、カスタム バンドルを指定して、ユーザーに表示されるメッセージとプロンプトをカスタマイズできます。

迅速

authUI.customStringsBundle = NSBundle.mainBundle() // Or any custom bundle.

Objective-C

authUI.customStringsBundle = [NSBundle mainBundle]; // Or any custom bundle.

次のステップ

  • FirebaseUI の使用とカスタマイズの詳細については、GitHub のREADMEファイルを参照してください。
  • FirebaseUI で見つけて発行し、それを報告したい場合は、 GitHub イシュー トラッカーを使用してください。

FirebaseUIは、アプリで使用するためのドロップイン UI フローを提供する Firebase Authentication SDK の上に構築されたライブラリです。 FirebaseUI には次の利点があります。

  • 複数のプロバイダー: メール/パスワード、メール リンク、電話認証、Google サインイン、Facebook ログイン、Twitter ログインのサインイン フロー。
  • アカウント管理: アカウントの作成やパスワードのリセットなど、アカウント管理タスクを処理するためのフロー。
  • 匿名アカウントのリンク: 匿名アカウントを ID プロバイダーに自動的にリンクするフロー。
  • カスタマイズ可能: アプリに合わせて FirebaseUI の外観をカスタマイズします。また、FirebaseUI はオープン ソースであるため、プロジェクトをフォークして、必要に応じて正確にカスタマイズできます。

あなたが始める前に

  1. Apple プロジェクトに Firebase を追加します

  2. Podfile に FirebaseUI を追加します。

    pod 'FirebaseUI'
    

    必要に応じて、使用する Auth コンポーネントとプロバイダーのみを追加できます。

    pod 'FirebaseUI/Auth'
    
    pod 'FirebaseUI/Google'
    pod 'FirebaseUI/Facebook'
    pod 'FirebaseUI/OAuth' # Used for Sign in with Apple, Twitter, etc
    pod 'FirebaseUI/Phone'
    
  3. アプリを Firebase プロジェクトにまだ接続していない場合は、 Firebase コンソールから接続します。

サインイン方法を設定する

Firebase を使用してユーザーをサインインさせる前に、サポートするサインイン方法を有効にして構成する必要があります。

メールアドレスとパスワード

Firebase コンソールで、[認証]セクションを開き、メールとパスワードの認証を有効にします。

  1. Firebase コンソールで、[認証]セクションを開きます。 [サインイン方法] タブで、電子メール/パスワードプロバイダーを有効にします。メール リンク サインインを使用するには、メール/パスワード サインインを有効にする必要があることに注意してください。

  2. 同じセクションで、[電子メール リンク (パスワードなしのサインイン) ] サインイン方法を有効にし、[保存] をクリックします。

  3. FIREmailLinkAuthSignInMethodFUIEmailAuthインスタンスを初期化することにより、電子メール リンクのサインインを有効にできます。また、 handleCodeInAppを true に設定した有効なFIRActionCodeSettingsオブジェクトを提供する必要があります。

迅速

var actionCodeSettings = ActionCodeSettings()
actionCodeSettings.url = URL(string: "https://example.appspot.com")
actionCodeSettings.handleCodeInApp = true
actionCodeSettings.setAndroidPackageName("com.firebase.example", installIfNotAvailable: false, minimumVersion: "12")

let provider = FUIEmailAuth(authUI: FUIAuth.defaultAuthUI()!,
                            signInMethod: FIREmailLinkAuthSignInMethod,
                            forceSameDevice: false,
                            allowNewEmailAccounts: true,
                            actionCodeSetting: actionCodeSettings)

Objective-C

FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init];
actionCodeSettings.URL = [NSURL URLWithString:@"https://example.appspot.com"];
actionCodeSettings.handleCodeInApp = YES;
[actionCodeSettings setAndroidPackageName:@"com.firebase.example"
                    installIfNotAvailable:NO
                           minimumVersion:@"12"];

id<FUIAuthProvider> provider = [[FUIEmailAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]
                                                       signInMethod:FIREmailLinkAuthSignInMethod
                                                    forceSameDevice:NO
                                              allowNewEmailAccounts:YES
                                                  actionCodeSetting:actionCodeSettings];
  1. さらに、初期化子に渡す URL をホワイトリストに登録する必要があります。これはFirebase コンソールで行うことができ、[認証]セクションを開きます。 [サインイン方法] タブで、[承認済みドメイン] の下に URL を追加します。

  2. ディープ リンクを取得したら、それを処理できるように認証 UI に渡す必要があります。

迅速

FUIAuth.defaultAuthUI()!.handleOpen(url, sourceApplication: sourceApplication)

Objective-C

[[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];
  1. FirebaseUI-iOS での電子メール リンク サインインは、 FirebaseUI-AndroidおよびFirebaseUI-webと互換性があり、FirebaseUI-Android からフローを開始する 1 人のユーザーがリンクを開いて、FirebaseUI-web でのサインインを完了することができます。逆の流れも同様です。

アップル

  1. Firebase Sign in with Appleガイドの「始める前に」および「 Apple の匿名データ要件に準拠する」セクションに従ってください。

  2. Sign in with Apple 機能を資格ファイルに追加します。

  3. Sign in with Apple 用に構成された OAuth プロバイダー インスタンスを初期化します。

    迅速

    provider = FUIOAuth.appleAuthProvider()
    

    Objective-C

    FUIOAuth *provider = [FUIOAuth appleAuthProvider];
    

グーグル

  1. Firebase コンソールで、[認証]セクションを開き、Google サインインを有効にします。

  2. 逆引きクライアント ID を URL スキームとして Xcode プロジェクトに追加します。この値はGoogleService-Info.plistファイルにあります。

フェイスブック

  1. Facebook の開始ページに従って、Facebook ログイン SDK をセットアップします。

  2. Firebase コンソールで、[認証]セクションを開き、Facebook を有効にします。 Facebook サインインを有効にするには、Facebook 開発者コンソールで取得できる Facebook アプリ ID とアプリ シークレットを提供する必要があります。

  3. [Project Settings] > [Capabilities]画面から、Xcode プロジェクトでキーチェーン共有を有効にします。

  4. Xcode プロジェクトにfb FACEBOOK_APP_IDを URL スキームとして追加します。

  5. Facebook アプリ ID と表示名をInfo.plistファイルに追加します。

    価値
    FacebookAppID FACEBOOK_APP_ID (例: 1234567890 )
    Facebook表示名アプリの名前
  6. Facebook プロバイダー インスタンスを初期化します。

    迅速

    provider = FUIFacebookAuth(authUI: FUIAuth.defaultAuthUI())
    

    Objective-C

    FUIFacebookAuth *provider = [[FUIFacebookAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]];
    

  7. Facebook Limited Loginを使用する場合は、 FUIFacebookAuthインスタンスでuseLimitedLoginプロパティを設定します。

    迅速

    provider.useLimitedLogin = true
    

    Objective-C

    provider.useLimitedLogin = YES;
    

ツイッター

  1. Firebase コンソールで、[認証]セクションを開き、Twitter を有効にします。 Twitter サインインを有効にするには、Twitter アプリケーション管理コンソールで取得できる Twitter API コンシューマー キーとシークレットを提供する必要があります。

  2. Twitter ログイン用に構成された OAuth プロバイダー インスタンスを初期化します。

    迅速

    provider = FUIOAuth.twitterAuthProvider()
    

    Objective-C

    FUIOAuth *provider = [FUIOAuth twitterAuthProvider];
    

電話番号

  1. Firebase コンソールで [認証]セクションを開き、電話番号によるサインインを有効にします。

  2. Firebase は、電話番号サインイン リクエストがアプリからのものであることを確認できる必要があります。これを実現する方法の 1 つは、APNs 通知を使用することです。詳細については、アプリの検証を有効にするを参照してください。

    Firebase Authentication で使用する APNs 通知を有効にするには:

    1. Xcode で、プロジェクトのプッシュ通知を有効にします。

    2. APNs 認証キーを Firebase にアップロードします。 APNs 認証キーをまだ持っていない場合は、 Apple Developer Member Centerで必ず作成してください。

      1. Firebase コンソールのプロジェクト内で、歯車アイコンを選択し、[プロジェクト設定]を選択してから、[クラウド メッセージング] タブを選択します。

      2. [ iOS アプリの構成] の [ APNs 認証キー] で、[アップロード] ボタンをクリックします。

      3. キーを保存した場所を参照して選択し、[開く] をクリックします。キーのキー ID ( Apple Developer Member Centerで入手可能) を追加し、[アップロード] をクリックします。

      APNs 証明書が既にある場合は、代わりに証明書をアップロードできます。

  3. デバイスで APNs 通知を受信できない場合、Firebase は reCAPTCHA を使用してリクエストを確認します。

    reCAPTCHA 検証を有効にするには、反転したクライアント ID を URL スキームとして追加していない場合 (たとえば、Google サインインを有効にするため)、Xcode プロジェクトで追加します。この値はGoogleService-Info.plistファイルにあります。

  4. オプション: Firebase はメソッド スウィズリングを使用して、アプリの APNs トークンを自動的に取得し、Firebase がアプリに送信するサイレント プッシュ通知を処理し、検証中に reCAPTCHA 検証ページからのカスタム スキーム リダイレクトを自動的にインターセプトします。

    スウィズリングを使用したくない場合は、Firebase SDK 認証ドキュメントの付録: スウィズリングなしでの電話サインインの使用を参照してください。

サインイン

FirebaseUI サインイン フローを開始するには、まず FirebaseUI を初期化します。

迅速

import FirebaseAuthUI

/* ... */

FirebaseApp.configure()
let authUI = FUIAuth.defaultAuthUI()
// You need to adopt a FUIAuthDelegate protocol to receive callback
authUI.delegate = self

Objective-C

@import FirebaseAuthUI;

...

[FIRApp configure];
FUIAuth *authUI = [FUIAuth defaultAuthUI];
// You need to adopt a FUIAuthDelegate protocol to receive callback
authUI.delegate = self;

次に、サポートするサインイン方法を使用するように FirebaseUI を構成します。

迅速

import FirebaseAuthUI
import FirebaseFacebookAuthUI
import FirebaseGoogleAuthUI
import FirebaseOAuthUI
import FirebasePhoneAuthUI

let providers: [FUIAuthProvider] = [
  FUIGoogleAuth(),
  FUIFacebookAuth(),
  FUITwitterAuth(),
  FUIPhoneAuth(authUI:FUIAuth.defaultAuthUI()),
]
self.authUI.providers = providers

Objective-C

@import FirebaseAuthUI;
@import FirebaseFacebookAuthUI;
@import FirebaseGoogleAuthUI;
@import FirebaseOAuthUI;
@import FirebasePhoneAuthUI;

...

NSArray<id<FUIAuthProvider>> *providers = @[
  [[FUIGoogleAuth alloc] init],
  [[FUIFacebookAuth alloc] init],
  [[FUITwitterAuth alloc] init],
  [[FUIPhoneAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]]
];
_authUI.providers = providers;

Google または Facebook のサインインを有効にした場合は、Google および Facebook のサインアップ フローの結果のハンドラーを実装します。

迅速

func application(_ app: UIApplication, open url: URL,
    options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
  let sourceApplication = options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String?
  if FUIAuth.defaultAuthUI()?.handleOpen(url, sourceApplication: sourceApplication) ?? false {
    return true
  }
  // other URL handling goes here.
  return false
}

Objective-C

- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary *)options {
  NSString *sourceApplication = options[UIApplicationOpenURLOptionsSourceApplicationKey];
  return [[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];
}

最後に、 AuthViewControllerからFUIAuthのインスタンスを取得します。その後、それをアプリの最初のビュー コントローラーとして提示するか、アプリ内の別のビュー コントローラーから提示することができます。

迅速

サインイン方法セレクターを取得するには:

let authViewController = authUI.authViewController()

電話番号サインインのみを使用する場合は、代わりに電話番号サインイン ビューを直接表示できます。

let phoneProvider = FUIAuth.defaultAuthUI().providers.first as! FUIPhoneAuth
phoneProvider.signIn(withPresenting: currentlyVisibleController, phoneNumber: nil)

Objective-C

サインイン方法セレクターを取得するには:

UINavigationController *authViewController = [authUI authViewController];

電話番号サインインのみを使用する場合は、代わりに電話番号サインイン ビューを直接表示できます。

FUIPhoneAuth *phoneProvider = [FUIAuth defaultAuthUI].providers.firstObject;
[phoneProvider signInWithPresentingViewController:currentlyVisibleController phoneNumber:nil];

認証ビューを提示してユーザーがサインインすると、結果がdidSignInWithUser:error:メソッドの FirebaseUI Auth デリゲートに返されます。

迅速

func authUI(_ authUI: FUIAuth, didSignInWith user: FIRUser?, error: Error?) {
  // handle user and error as necessary
}

Objective-C

   - (void)authUI:(FUIAuth *)authUI
didSignInWithUser:(nullable FIRUser *)user
            error:(nullable NSError *)error {
  // Implement this method to handle signed in user or error if any.
}

サインアウト

FirebaseUI には、Firebase Authentication およびすべてのソーシャル ID プロバイダーからサインアウトするための便利なメソッドが用意されています。

迅速

authUI.signOut()

Objective-C

[authUI signOut];

カスタマイズ

FirebaseUI のビュー コントローラーをサブクラス化し、それらをFUIAuthのデリゲート メソッドで指定することにより、サインイン画面をカスタマイズできます。

迅速

func authPickerViewController(forAuthUI authUI: FUIAuth) -> FUIAuthPickerViewController {
  return FUICustomAuthPickerViewController(nibName: "FUICustomAuthPickerViewController",
                                           bundle: Bundle.main,
                                           authUI: authUI)
}

func emailEntryViewController(forAuthUI authUI: FUIAuth) -> FUIEmailEntryViewController {
  return FUICustomEmailEntryViewController(nibName: "FUICustomEmailEntryViewController",
                                           bundle: Bundle.main,
                                           authUI: authUI)
}

func passwordRecoveryViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordRecoveryViewController {
  return FUICustomPasswordRecoveryViewController(nibName: "FUICustomPasswordRecoveryViewController",
                                                 bundle: Bundle.main,
                                                 authUI: authUI,
                                                 email: email)
}

func passwordSignInViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordSignInViewController {
  return FUICustomPasswordSignInViewController(nibName: "FUICustomPasswordSignInViewController",
                                               bundle: Bundle.main,
                                               authUI: authUI,
                                               email: email)
}

func passwordSignUpViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordSignUpViewController {
  return FUICustomPasswordSignUpViewController(nibName: "FUICustomPasswordSignUpViewController",
                                               bundle: Bundle.main,
                                               authUI: authUI,
                                               email: email)
}

func passwordVerificationViewController(forAuthUI authUI: FUIAuth, email: String, newCredential: AuthCredential) -> FUIPasswordVerificationViewController {
  return FUICustomPasswordVerificationViewController(nibName: "FUICustomPasswordVerificationViewController",
                                                     bundle: Bundle.main,
                                                     authUI: authUI,
                                                     email: email,
                                                     newCredential: newCredential)
}

Objective-C

- (FUIAuthPickerViewController *)authPickerViewControllerForAuthUI:(FUIAuth *)authUI {
  return [[FUICustomAuthPickerViewController alloc] initWithNibName:@"FUICustomAuthPickerViewController"
                                                             bundle:[NSBundle mainBundle]
                                                             authUI:authUI];
}

- (FUIEmailEntryViewController *)emailEntryViewControllerForAuthUI:(FUIAuth *)authUI {
  return [[FUICustomEmailEntryViewController alloc] initWithNibName:@"FUICustomEmailEntryViewController"
                                                             bundle:[NSBundle mainBundle]
                                                             authUI:authUI];

}

- (FUIPasswordSignInViewController *)passwordSignInViewControllerForAuthUI:(FUIAuth *)authUI
                                                                     email:(NSString *)email {
  return [[FUICustomPasswordSignInViewController alloc] initWithNibName:@"FUICustomPasswordSignInViewController"
                                                                 bundle:[NSBundle mainBundle]
                                                                 authUI:authUI
                                                                  email:email];

}

- (FUIPasswordSignUpViewController *)passwordSignUpViewControllerForAuthUI:(FUIAuth *)authUI
                                                                     email:(NSString *)email {
  return [[FUICustomPasswordSignUpViewController alloc] initWithNibName:@"FUICustomPasswordSignUpViewController"
                                                                 bundle:[NSBundle mainBundle]
                                                                 authUI:authUI
                                                                  email:email];

}

- (FUIPasswordRecoveryViewController *)passwordRecoveryViewControllerForAuthUI:(FUIAuth *)authUI
                                                                         email:(NSString *)email {
  return [[FUICustomPasswordRecoveryViewController alloc] initWithNibName:@"FUICustomPasswordRecoveryViewController"
                                                                   bundle:[NSBundle mainBundle]
                                                                   authUI:authUI
                                                                    email:email];

}

- (FUIPasswordVerificationViewController *)passwordVerificationViewControllerForAuthUI:(FUIAuth *)authUI
                                                                                 email:(NSString *)email
                                                                         newCredential:(FIRAuthCredential *)newCredential {
  return [[FUICustomPasswordVerificationViewController alloc] initWithNibName:@"FUICustomPasswordVerificationViewController"
                                                                       bundle:[NSBundle mainBundle]
                                                                       authUI:authUI
                                                                        email:email
                                                                newCredential:newCredential];
}

アカウント作成画面にリンクされている、アプリの利用規約への URL をカスタマイズできます。

迅速

let kFirebaseTermsOfService = URL(string: "https://example.com/terms")!
authUI.tosurl = kFirebaseTermsOfService

Objective-C

authUI.TOSURL = [NSURL URLWithString:@"https://example.com/terms"];

最後に、カスタム バンドルを指定して、ユーザーに表示されるメッセージとプロンプトをカスタマイズできます。

迅速

authUI.customStringsBundle = NSBundle.mainBundle() // Or any custom bundle.

Objective-C

authUI.customStringsBundle = [NSBundle mainBundle]; // Or any custom bundle.

次のステップ

  • FirebaseUI の使用とカスタマイズの詳細については、GitHub のREADMEファイルを参照してください。
  • FirebaseUI で見つけて発行し、それを報告したい場合は、 GitHub イシュー トラッカーを使用してください。