#はじめに
Firebaseの機能の一つ**"Authentication"**を使用してTwitterLoginを実装する方法についての記事です。
Firebaseガイドを参考にしていたのですが、理解度が足りてないからか手間取ったのでまとめてみました。
準備
TwitterのAPIKeyとAPISecretを取得
TwitterAppに登録後にTwitterApplicationを作成しAPIKeyとAPISecretを取得。
TwitterAppの登録が割と面倒に感じたのでここは我慢して対応してください笑
FirebaseConsoleでTwitterLoginを有効化
FirebaseConsole > Authentication > ログイン方法
(1)TwitterLoginを有効化
(2)APIKeyとAPISecretを登録
(3)CallBackURLをコピーし作成したTwitterApplicationのSettingsの項目"CallbackURLs"に設定
実装
twitterkit-{APIKey}をInfo.plistに登録
###Xcodeから直接Info.plistを追加する場合
URL types > Item0 > URL Schemes > Item 0にtwitterkit-{APIKey}を記入
※twitterkit-{APIKey}の{APIKey}には取得したTwitterのAPIKeyを入れてください
###Vimで追加する場合
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をそれぞれ追加してください
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
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)
}
}
動作確認
端末でLogin処理を行った後のAuthenticationのユーザ画面
ユーザが追加されていることが確認できました!
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内サービスの連携について書きます!