12
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Firebase/Authenticationを使用してTwitterLoginを実装

Last updated at Posted at 2018-10-08

#はじめに
Firebaseの機能の一つ**"Authentication"**を使用してTwitterLoginを実装する方法についての記事です。
Firebaseガイドを参考にしていたのですが、理解度が足りてないからか手間取ったのでまとめてみました。

準備

TwitterのAPIKeyとAPISecretを取得

TwitterAppに登録後にTwitterApplicationを作成しAPIKeyとAPISecretを取得。

TwitterAppの登録が割と面倒に感じたのでここは我慢して対応してください笑

FirebaseConsoleでTwitterLoginを有効化

FirebaseConsole > Authentication > ログイン方法
スクリーンショット_2018-10-09_1_26_01.png

(1)TwitterLoginを有効化
(2)APIKeyとAPISecretを登録
(3)CallBackURLをコピーし作成したTwitterApplicationのSettingsの項目"CallbackURLs"に設定
スクリーンショット_2018-10-09_1_35_10.png

実装

twitterkit-{APIKey}をInfo.plistに登録

###Xcodeから直接Info.plistを追加する場合
URL types > Item0 > URL Schemes > Item 0にtwitterkit-{APIKey}を記入
※twitterkit-{APIKey}の{APIKey}には取得したTwitterのAPIKeyを入れてください
スクリーンショット 2018-10-09 1.47.41.png

###Vimで追加する場合
Info.plistのタグの中に記入してください

Info.plist
<array>
  <dict>
     <key>CFBundleURLSchemes</key>
      <array>
        <string>twitterkit-{APIKey}</string>
      </array>
  </dict>
</array>

使うライブラリをPod経由でインストール

以下二つのライブラリを使用します。
pod 'Firebase/Auth'
pod 'FirebaseUI/Twitter'

Podfileに追加後にpod installを実行してください

AppDelegateに起動経路ごとに処理を追加

起動時とCustomURLScheme経由でアプリが起動された時の処理を追加します

withConsumerKeyにAPIKey
consumerSecretにAPISecretをそれぞれ追加してください

AppDelegate.swift
import UIKit
import Firebase
import TwitterKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        FirebaseApp.configure()
        TWTRTwitter.sharedInstance().start(withConsumerKey:"{APIKey}",consumerSecret:"{APISecret}")
        return true
    }
    
    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        return TWTRTwitter.sharedInstance().application(app, open: url, options: options)
    }
}

TwitterLogin実装

ざっくりロジック周りの説明
・ログイン成功時のCallBackで返ってくるsession情報からauthToken,authTokenSecretを取得する
・取得したauthToken,authTokenSecretを元にAuth証明書を作成
・作成したAuth証明書を元にFirebase/AuthenticationにSignIn

ViewController.swift
import UIKit
import FirebaseAuth
import TwitterKit
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let logInButton = TWTRLogInButton(logInCompletion: { session, error in
            if let session = session {
                let authToken = session.authToken
                let authTokenSecret = session.authTokenSecret
                let credential = TwitterAuthProvider.credential(withToken: session.authToken, secret: session.authTokenSecret)
                
                Auth.auth().signIn(with: credential) { (authResult, error) in
                    if let error = error { return }
                    //Sign In Completed
                }
            }
        })
        logInButton.center = self.view.center
        self.view.addSubview(logInButton)
    }
}

動作確認

端末上の画面
IMG_9385.PNG

端末でLogin処理を行った後のAuthenticationのユーザ画面
ユーザが追加されていることが確認できました!
スクリーンショット_2018-10-09_2_16_28(2).png

Tips

ログインしているユーザ取得

        if let user = Auth.auth().currentUser {
            // User is signed in.
        }else{
            // No user is signed in.
        }

SignOut

        let firebaseAuth = Auth.auth()
        do {
            try firebaseAuth.signOut()
        } catch let signOutError as NSError {
            // SignOut failed
        }

次回

今回はFirebaseのAuthenticationを使用してTwitterログインを行うという内容でした。
次回は、Twitter画像をStorageに保存しFireStoreにユーザデータを保存するといったFirebase内サービスの連携について書きます!

次回予告した記事はこちら

12
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?