[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]
}
以上