Firebase Summit で発表されたすべての情報をご覧ください。Firebase を使用してアプリ開発を加速し、自信を持ってアプリを実行する方法を紹介しています。詳細

AppleプラットフォームでTwitterを使用して認証する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Firebase SDK を使用して一般的な OAuth ログインをアプリに統合し、エンド ツー エンドのサインイン フローを実行することで、Twitter などの OAuth プロバイダーを使用してユーザーが Firebase で認証できるようにすることができます。

あなたが始める前に

Swift Package Manager を使用して、Firebase の依存関係をインストールおよび管理します。

  1. Xcode で、アプリ プロジェクトを開いた状態で、 File > Add Packagesに移動します。
  2. プロンプトが表示されたら、Firebase Apple プラットフォーム SDK リポジトリを追加します。
  3.   https://github.com/firebase/firebase-ios-sdk
  4. Firebase Authentication ライブラリを選択します。
  5. 完了すると、Xcode はバックグラウンドで依存関係の解決とダウンロードを自動的に開始します。

Twitter アカウントを使用してユーザーをサインインさせるには、最初に Twitter を Firebase プロジェクトのサインイン プロバイダとして有効にする必要があります。

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

  2. Podfileに次のポッドを含めます:

    pod 'FirebaseAuth'
    
  3. Firebase コンソールで、 Authセクションを開きます。
  4. [サインイン方法] タブで、 Twitterプロバイダーを有効にします。
  5. そのプロバイダーの開発者コンソールからAPI キーAPI シークレットをプロバイダー構成に追加します。
    1. アプリを開発者アプリケーションとして Twitter に登録し、アプリの OAuth API キーAPI シークレットを取得します。
    2. Firebase OAuth リダイレクト URI (例: my-app-12345.firebaseapp.com/__/auth/handler ) が、 Twitter アプリの config のアプリの設定ページで認証コールバック URLとして設定されていることを確認してください。
  6. [保存]をクリックします。

Firebase SDK でログイン フローを処理する

Firebase Apple プラットフォーム SDK でサインイン フローを処理するには、次の手順に従います。

  1. カスタム URL スキームを Xcode プロジェクトに追加します。

    1. プロジェクト構成を開きます。左側のツリー ビューでプロジェクト名をダブルクリックします。 [ターゲット] セクションからアプリを選択し、[情報] タブを選択して、[ URL の種類] セクションを展開します。
    2. [ + ] ボタンをクリックし、反転したクライアント ID の URL スキームを追加します。この値を見つけるには、 GoogleService-Info.plist構成ファイルを開き、 REVERSED_CLIENT_IDキーを探します。そのキーの値をコピーして、構成ページの [ URL スキーム]ボックスに貼り付けます。他のフィールドは空白のままにします。

      完了すると、構成は次のようになります (ただし、アプリケーション固有の値があります)。

  2. プロバイダー ID twitter.comを使用してOAuthProviderのインスタンスを作成します。

    迅速

        var provider = OAuthProvider(providerID: "twitter.com")
        

    Objective-C

        FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"twitter.com"];
        
  3. オプション: OAuth 要求で送信する追加のカスタム OAuth パラメーターを指定します。

    迅速

        provider.customParameters = [
          "lang": "fr"
          ]
        

    Objective-C

        [provider setCustomParameters:@{@"lang": @"fr"}];
        

    Twitter がサポートするパラメーターについては、 Twitter OAuth のドキュメントを参照してください。 setCustomParametersで Firebase に必要なパラメータを渡すことはできないことに注意してください。これらのパラメータはclient_idredirect_uriresponse_typescope 、およびstateです。

  4. オプション: reCAPTCHA をユーザーに表示するときにアプリがSFSafariViewControllerまたはUIWebViewを表示する方法をカスタマイズする場合は、 FIRAuthUIDelegateプロトコルに準拠するカスタム クラスを作成し、それをgetCredentialWithUIDelegate:completion:に渡します。

  5. OAuth プロバイダー オブジェクトを使用して Firebase で認証します。

    迅速

        provider.getCredentialWith(nil) { credential, error in
          if error != nil {
            // Handle error.
          }
          if credential != nil {
            Auth.auth().signIn(with: credential) { authResult, error in
              if error != nil {
                // Handle error.
              }
              // User is signed in.
              // IdP data available in authResult.additionalUserInfo.profile.
              // Twitter OAuth access token can also be retrieved by:
              // (authResult.credential as? OAuthCredential)?.accessToken
              // Twitter OAuth ID token can be retrieved by calling:
              // (authResult.credential as? OAuthCredential)?.idToken
              // Twitter OAuth secret can be retrieved by calling:
              // (authResult.credential as? OAuthCredential)?.secret
            }
          }
        }
        

    Objective-C

        [provider getCredentialWithUIDelegate:nil
                                   completion:^(FIRAuthCredential *_Nullable credential, NSError *_Nullable error) {
          if (error) {
           // Handle error.
          }
          if (credential) {
            [[FIRAuth auth] signInWithCredential:credential
                                      completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) {
              if (error) {
                // Handle error.
              }
              // User is signed in.
              // IdP data available in authResult.additionalUserInfo.profile.
              // Twitter OAuth access token can also be retrieved by:
              // authResult.credential.accessToken
              // Twitter OAuth ID token can be retrieved by calling:
              // authResult.credential.idToken
              // Twitter OAuth secret can be retrieved by calling:
              // authResult.credential.secret
            }];
          }
        }];
        

    OAuth アクセス トークンを使用して、 Twitter APIを呼び出すことができます。

    たとえば、基本的なプロファイル情報を取得するには、REST API を呼び出して、 Authorizationヘッダーでアクセス トークンを渡します。

    https://api.twitter.com/labs/1/users?usernames=TwitterDev
    
  6. 上記の例はサインイン フローに焦点を当てていますが、Twitter プロバイダーを既存のユーザーにリンクすることもできます。たとえば、複数のプロバイダーを同じユーザーにリンクして、いずれかでサインインできるようにすることができます。

    迅速

        Auth().currentUser.link(withCredential: credential) { authResult, error in
          if error != nil {
            // Handle error.
          }
          // Twitter credential is linked to the current user.
          // IdP data available in authResult.additionalUserInfo.profile.
          // Twitter OAuth access token can also be retrieved by:
          // (authResult.credential as? OAuthCredential)?.accessToken
          // Twitter OAuth ID token can be retrieved by calling:
          // (authResult.credential as? OAuthCredential)?.idToken
          // Twitter OAuth secret can be retrieved by calling:
          // (authResult.credential as? OAuthCredential)?.secret
        }
        

    Objective-C

        [[FIRAuth auth].currentUser
            linkWithCredential:credential
                    completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
          if (error) {
            // Handle error.
          }
          // Twitter credential is linked to the current user.
          // IdP data available in authResult.additionalUserInfo.profile.
          // Twitter OAuth access token is can also be retrieved by:
          // ((FIROAuthCredential *)authResult.credential).accessToken
          // Twitter OAuth ID token can be retrieved by calling:
          // ((FIROAuthCredential *)authResult.credential).idToken
          // Twitter OAuth secret can be retrieved by calling:
          // ((FIROAuthCredential *)authResult.credential).secret
        }];
        
  7. 同じパターンをreauthenticateWithCredentialで使用できます。これを使用して、最近のログインが必要な機密操作の新しい資格情報を取得できます。

    迅速

        Auth().currentUser.reauthenticateWithCredential(withCredential: credential) { authResult, error in
          if error != nil {
            // Handle error.
          }
          // User is re-authenticated with fresh tokens minted and
          // should be able to perform sensitive operations like account
          // deletion and email or password update.
          // IdP data available in result.additionalUserInfo.profile.
          // Additional OAuth access token is can also be retrieved by:
          // (authResult.credential as? OAuthCredential)?.accessToken
          // Twitter OAuth ID token can be retrieved by calling:
          // (authResult.credential as? OAuthCredential)?.idToken
          // Twitter OAuth secret can be retrieved by calling:
          // (authResult.credential as? OAuthCredential)?.secret
        }
        

    Objective-C

        [[FIRAuth auth].currentUser
            reauthenticateWithCredential:credential
                              completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
          if (error) {
            // Handle error.
          }
          // User is re-authenticated with fresh tokens minted and
          // should be able to perform sensitive operations like account
          // deletion and email or password update.
          // IdP data available in result.additionalUserInfo.profile.
          // Additional OAuth access token is can also be retrieved by:
          // ((FIROAuthCredential *)authResult.credential).accessToken
          // Twitter OAuth ID token can be retrieved by calling:
          // ((FIROAuthCredential *)authResult.credential).idToken
          // Twitter OAuth secret can be retrieved by calling:
          // ((FIROAuthCredential *)authResult.credential).secret
        }];
        

次のステップ

ユーザーが初めてサインインすると、新しいユーザー アカウントが作成され、サインインに使用したユーザーの資格情報 (ユーザー名とパスワード、電話番号、または認証プロバイダー情報) にリンクされます。この新しいアカウントは Firebase プロジェクトの一部として保存され、ユーザーのサインイン方法に関係なく、プロジェクト内のすべてのアプリでユーザーを識別するために使用できます。

  • アプリでは、ユーザーの基本的なプロファイル情報をFIRUserオブジェクトから取得できます。ユーザーの管理を参照してください。

  • Firebase Realtime Database と Cloud Storageセキュリティ ルールでは、サインインしているユーザーの一意のユーザー ID をauth変数から取得し、それを使用してユーザーがアクセスできるデータを制御できます。

認証プロバイダーの資格情報を既存のユーザー アカウントにリンクすることで、ユーザーが複数の認証プロバイダーを使用してアプリにサインインできるようにすることができます。

ユーザーをサインアウトするには、 signOut:を呼び出します。

迅速

    let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}
  

Objective-C

    NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

認証エラーの全範囲に対してエラー処理コードを追加することもできます。エラーの処理を参照してください。