13
8

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.

iOSでFirebase AuthenticationをFacebookログインでやってみる

Posted at

処理の流れは以下のようになります。

  • ログイン済みかチェックし、未ログインならログインボタンを表示
  • ログインボタンを押下するとfacebookのログイン画面がsafariで開く。
  • ログインに成功したらcredentialをFirebaseに登録。

こちらの手順を参考にしました。
Authenticate Using Facebook Login on iOS  |  Firebase

準備

Firebaseコンソールでプロジェクトを追加

Firebase Consoleにログインしてプロジェクトを作成します。
iosアプリにFirebaseを追加します。

Facebook for DevelopersでFacebookアプリを作成

Facebook for Developersにログインしてアプリを作成します。

設定 > ベーシックでアプリIDとapp secretが確認できるので控えておきます。

FirebaseコンソールでFacebookログインを有効化

コンソールの開発 > Authenticationを開きFacebookを選択します。
選択するとアプリケーションIDとアプリシークレットを入力する画面が表示されるので、先程控えたアプリケーションIDとアプリシークレットを入力します。
表示されているOAuth redirect URIを控えておきます。

Facebook for DevelopersでFacebookログインを有効化

アプリのダッシュボードを開き、プロダクトの追加から「Facebookログイン」を追加します。
Facebookログインの設定を開き、有効なOAuthリダイレクトURIに先程Firebase consoleで控えたリダイレクトURIを入力します。

実装

Podfileに必要なライブラリを追加

Firebaseの基本機能とAuth、Facebookログイン用のSDKを追加します。

pod 'Firebase/Core'
pod 'Firebase/Auth'
pod 'FBSDKLoginKit'

プロジェクトルートでコマンドを実行します。

$ pod install

info.plistを編集

iOS FacebookログインSDKページの4. info.plistを構成するから以下のような2つのXMLをコピーしてinfo.plistの<dict>...</dict>に貼り付けます。

<key>CFBundleURLTypes</key>
<array>
  <dict>
  <key>CFBundleURLSchemes</key>
  <array>
    <string>XXXXXXXX</string>
  </array>
  </dict>
</array>
<key>FacebookAppID</key>
<string>XXXXXXXX</string>
<key>FacebookDisplayName</key>
<string>XXXXXXXX</string>
<key>LSApplicationQueriesSchemes</key>
<array>
  <string>fbapi</string>
  <string>fb-messenger-share-api</string>
  <string>fbauth2</string>
  <string>fbshareextension</string>
</array>

AppDelegate

AppDelegate.swiftを以下のように編集します。

AppDelegate.swift
import UIKit
import Firebase
import FBSDKCoreKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    
    func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        FirebaseApp.configure()
        return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
    }
    
    func application(_ application: UIApplication,open url: URL,sourceApplication: String?,annotation: Any) -> Bool {
        return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
    }
    
    func applicationDidBecomeActive(_ application: UIApplication) {
        FBSDKAppEvents.activateApp()
    }
}

ViewController

ViewController.swiftを以下のように編集します。

ViewController.swift
import UIKit
import Firebase
import FBSDKCoreKit
import FBSDKLoginKit

class ViewController: UIViewController,FBSDKLoginButtonDelegate {
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    override func viewDidAppear(_ animated: Bool) {
        // ログイン済みかチェック
        if let token = FBSDKAccessToken.current() {
            let credential = FacebookAuthProvider.credential(withAccessToken: token.tokenString)
            Auth.auth().signInAndRetrieveData(with: credential) { (authResult, error) in
                if error != nil {
                    // ...
                    return
                }
                // ログイン時の処理
            }
            return
        }
        // ログインボタン設置
        let fbLoginBtn = FBSDKLoginButton()
        fbLoginBtn.readPermissions = ["public_profile", "email"]
        fbLoginBtn.center = self.view.center
        fbLoginBtn.delegate = self
        self.view.addSubview(fbLoginBtn)
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    
    // login callback
    func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
        
        if error != nil {
            print("Error")
            return
        }
        // ログイン時の処理
    }
    
    @IBAction func logoutButton(_ sender: Any) {
        let firebaseAuth = Auth.auth()
        do {
            try firebaseAuth.signOut()
        } catch let signOutError as NSError {
            print ("Error signing out: %@", signOutError)
        }
    }
    
    // Logout callback
    func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) {
    }
}

動作確認

アプリを起動すると、Facebookログインボタンが表示されます。
Facebookログインに成功するとFirebaseのコンソールから開発 > Authentication > ユーザーにユーザーが追加されます。

13
8
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
13
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?