Edited at

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

More than 1 year has passed since last update.


はじめに

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内サービスの連携について書きます!

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