[Firebase][swift] Facebook Authentication実装手順
Firebase[swift]のFacebook認証連携でハマったのでメモ
FirebaseとFacebookを行き来するので注意
1.[facebook] https://developers.facebook.com/
でアプリ登録。アプリ名はiOSのアプリのバンドル名と同じにしておいた方がよいかも
2.[facebook] iOSスタートアップでConfigure your info.plist欄にある文字列をすべてコピーしてxcode上のinfo.plistを右クリック→ソースで開く→<dict>…</dict>の間にペースト。アプリのバンドルIDも登録
3.[facebook] 設定タブ→アプリIDとapp secretを控える
4.[Firebase] アプリを登録
5.[Firebase] Auth→ログイン方法でFacebook認証をONにする
6.[Firebase] Facebook欄の「アプリケーション ID」「アプリ シークレット」に先ほどFacebookから控えたアプリIDとapp secretをそれぞれ入力
7.[Firebase] Facebook欄のOAuth リダイレクト URIをコピー
8.[facebook] 左ペインのプロダクト→Facebookログインを追加、「有効なOAuthリダイレクトURI」欄に先ほどのOAuth リダイレクト URIをペースト
9.[Firebase] 左ペイン上部の歯車→設定からGoogleService-Info.plistをダウンロード
10.xcodeのプロジェクトのプロジェクトファイルと同じ場所に「Podfile」を作成、以下の設定を追加する
pod 'Firebase/Auth' pod 'FBSDKLoginKit' target '****projectName****' do end target '****projectName****Tests' do end
****projectName****はそれぞれのプロジェクト名
11.コンソールを起動させ、先ほどのpodFileのある場所まで移動、pod installコマンドでpodをインストール
12.xcodeを一度閉じ、workspaceファイルができているので、workspaceファイルを開く
AppDelegate.swiftに以下を追加
import Firebase import FBSDKCoreKit import FBSDKLoginKit func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { FIRApp.configure() FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) return true } func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool { return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation) }
ViewController.swift(ログインを実装したいページ)に以下を追加、@IBActionはstoryboardでボタンなどに関連づけしておく
import Firebase import FBSDKCoreKit import FBSDKLoginKit @IBAction func facebookLogin (sender: AnyObject){ let facebookLogin = FBSDKLoginManager() print("Logging In") facebookLogin.logInWithReadPermissions(["email"], fromViewController: self, handler:{(facebookResult, facebookError) -> Void in if facebookError != nil { print("Facebook login failed. Error \(facebookError)") } else if facebookResult.isCancelled { print("Facebook login was cancelled.") } else { let credential = FIRFacebookAuthProvider.credentialWithAccessToken(FBSDKAccessToken.currentAccessToken().tokenString) FIRAuth.auth()?.signInWithCredential(credential) { (user, error) in print(error); return } print("Firebase Registration Success"); //あとは、その後の実装 } }); } //サインアウト用 @IBAction func didTapSignOut(sender: AnyObject) { // [START signout] let firebaseAuth = FIRAuth.auth() do { try firebaseAuth?.signOut() print ("Signing out Success") } catch let signOutError as NSError { print ("Error signing out: %@", signOutError) } // [END signout] }
以上