iOS で Twitter ログインを使用して認証する

Twitter ログインをアプリに統合して、ユーザーが Firebase での認証に Twitter アカウントを使用できるようにすることができます。

認証されたユーザーは、対象ユーザーが制限された Firebase Realtime Database と Firebase Storage のデータにアクセスできます。

準備

  1. Firebase を iOS プロジェクトに追加しますPodfile に次のポッドをインクルードします。
     verbatim 69c2a21022e657d9f2ea355fa969894c pod 'Firebase/Auth' endverbatim 69c2a21022e657d9f2ea355fa969894c 
    
  2. Twitter でデベロッパー アプリケーションとしてアプリを登録し、アプリの API キーAPI シークレットを取得します。
  3. Twitter ログインを有効にします。
    1. Firebase console で [Authentication] を開きます。
    2. [ログイン方法] タブで [Twitter] を有効にし、Twitter から取得した [API キー] と [API シークレット] を指定します。
    3. 次に、Firebase OAuth リダイレクト URImy-app-12345.firebaseapp.com/__/auth/handler など)を、Twitter アプリの設定にあるアプリ設定ページで [Callback URL] として設定します。

Firebase で認証する

  1. デベロッパー向けドキュメントに沿って Twitter ログインをアプリに統合します。

    buttonWithLogInCompletion または logInWithCompletion のコールバック メソッドで、ログイン セッションの Twitter 認証トークンと Twitter 認証トークン シークレットを取得します。次に例を示します。

    Objective-C

     TWTRLogInButton *logInButton =
         [TWTRLogInButton buttonWithLogInCompletion:^(TWTRSession* session,
                                                      NSError* error) {
      if (session) {
        NSString *authToken = session.authToken;
        NSString *authTokenSecret = session.authTokenSecret;
        // ...
      } else {
        // ...
      }
    }];
    

    Swift

    let logInButton = TWTRLogInButton(logInCompletion: { session, error in
      if (session != nil) {
        let authToken = session.authToken
        let authTokenSecret = session.authTokenSecret
        // ...
      } else {
          // ...
      }
    })
    

  2. Firebase モジュールを UIApplicationDelegate サブクラスにインポートします。

    Objective-C

    @import Firebase;
    

    Swift

    import Firebase
    
  3. FIRApp 共有インスタンスを設定します。通常はアプリケーションの application:didFinishLaunchingWithOptions: メソッドを使用します。

    Objective-C

     verbatim f4837415eb98478ae53b9bc9796b0226 // Use Firebase library to configure APIs
    [FIRApp configure]; endverbatim f4837415eb98478ae53b9bc9796b0226 
    

    Swift

     verbatim 2ac23ab3ab1009da8a019fb5469208e7 // Use Firebase library to configure APIs
    FIRApp.configure() endverbatim 2ac23ab3ab1009da8a019fb5469208e7 
    
  4. ユーザーがログインに成功したら、didCompleteWithResult:error: の実装で、Twitter 認証トークンと Twitter 認証トークン シークレットを Firebase 認証情報と交換します。

    Objective-C

     verbatim 6fcbac49625bfbf5d21feb71dfa9b33b FIRAuthCredential *credential =
    [FIRTwitterAuthProvider credentialWithToken:session.authToken
                                         secret:session.authTokenSecret]; endverbatim 6fcbac49625bfbf5d21feb71dfa9b33b 
    

    Swift

     verbatim 00db2933775c2e73618511785814536b let credential = FIRTwitterAuthProvider.credential(withToken: session.authToken, secret: session.authTokenSecret) endverbatim 00db2933775c2e73618511785814536b 
    
  5. 最後に、Firebase 認証情報を使用して Firebase での認証を行います。

    Objective-C

     verbatim 250f0c4b6af36828ab7637eeb89b0f4d [[FIRAuth auth] signInWithCredential:credential
                              completion:^(FIRUser *user, NSError *error) {
                                // ...
                                  if (error) {
                                    // ...
                                    return;
                                  } endverbatim 250f0c4b6af36828ab7637eeb89b0f4d 
    

    Swift

     verbatim c03f657c17c9bc1a332468b1dba71322 FIRAuth.auth()?.signIn(with: credential) { (user, error) in
      // ...
        if let error = error {
          // ...
          return
        } endverbatim c03f657c17c9bc1a332468b1dba71322 
    
  6. 省略可: ユーザーのプロフィールにメールアドレスを追加します。 ユーザーが Twitter を使用してアプリにログインした場合、Firebase ではそのメールアドレスにアクセスできません。Twitter を使用してログインするユーザーのプロフィールにメールアドレスを追加する場合は、ユーザーにメールアドレスを入力してもらってから updateEmail を呼び出します。次に例を示します。

    Objective-C

     verbatim e9f6c6761e469ce4b741fedb80e2fab8 [[FIRAuth auth]
            .currentUser
        updateEmail:userInput
         completion:^(NSError *_Nullable error) {
           // ...
         }]; endverbatim e9f6c6761e469ce4b741fedb80e2fab8 
    

    Swift

     verbatim 56c9cd74ed4ac619292525cc72941383 FIRAuth.auth()?.currentUser?.updateEmail(userInput) { (error) in
      // ...
    } endverbatim 56c9cd74ed4ac619292525cc72941383 
    

次のステップ

ユーザーが初めてログインすると新しいユーザー アカウントが作成され、ユーザーがログインに使用した認証情報(ユーザー名とパスワードや認証プロバイダ情報)にリンクされます。この新しいアカウントは Firebase プロジェクトの一部として保存され、ユーザーのログイン方法にかかわらず、プロジェクトのすべてのアプリでユーザーを識別するために使用できます。

  • アプリでは、FIRUser オブジェクトからユーザーの基本的なプロフィール情報を取得できます。ユーザーの管理についての記事をご覧ください。

  • Firebase Realtime Database と Firebase Storage のセキュリティ ルールで、ログイン済みユーザーに固有のユーザー ID を auth 変数から取得し、これを使用してユーザーがアクセスできるデータを制御できます。

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

ユーザーのログアウトを行うには signOut: を呼び出します。

Objective-C

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

Swift

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

さまざまな認証エラーに対応できるようにエラー処理コードを追加することもできます。エラーの処理についての記事をご覧ください。

フィードバックを送信...