見出し画像

Firebase Authentication によるログイン機能を試す - iOS版

「Firebase Authentication」によるログイン機能を試したのでまとめました。


1. Firebase Authentication

「Firebase Authentication」安全なログイン機能を提供するFirebaseのサービスです。メールアドレスとパスワードの組み合わせ、電話認証、Google、Twitter、Facebook、GitHubログインなどに対応しています。

2. Firebaseプロジェクトの準備

Firebaseプロジェクトの準備手順は、次のとおりです。

(1) Firebaseのコンソールでプロジェクトを作成。

(2) 「アプリを追加」ボタンを押し、「iOS」を選択。

(3) 「バンドルID」と「アプリのニックネーム」を指定して、「アプリを登録」ボタンを押す。

(4) 「GoogleService-Info.plistをダウンロード」ボタンで「GoogleService-Info.plist」ダウンロードし、Xcodeプロジェクトのルートにドラッグ&ドロップして全ターゲットに追加し、「次へ」ボタンを押す。

(5) Xcodeの「PROJECT」の「Package Dependencies」の「+」を押し、右上に以下のURLを入力し、「firebase-ios-sdk」を選択し、「Add Package」ボタンを押す。

https://github.com/firebase/firebase-ios-sdk


(6) パッケージプロダクトの選択で、「FirebaseAnalytics」を選択し、「Add Package」ボタンを押す

(7) 「AppDelegate.swift」にFirebaseの初期化コードを追加。

import UIKit
import FirebaseCore  // Firebaseのパッケージ宣言も追加

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    // アプリ起動時に呼ばれる
    func application(_ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions:
        [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
        // Firebaseの初期化コード
        FirebaseApp.configure()
        return true
    }

        :
}

3. Firebaseコンソールでのログイン機能の準備

Firebaseコンソールでのログイン機能の準備手順は、次のとおりです。

(1) 「Firebaseコンソール」で「Authentication」を選択し、「ログイン方法を設定」ボタンを押す。

(2) 追加するログイン方法として「Google」を選択。

(2) 有効化し、プロジェクト公開名とプロジェクトサポートメールを入力し、保存ボタンを押す。

4. Xcodeでのログイン機能の準備

Xcodeでのログイン機能の準備手順は、次のとおりです。

(1) Xcodeの「PROJECT」の「Package Dependencies」の「+」を押し、右上に以下のURLを入力し、「FirebaseUI-iOS」の最新バージョンを指定し (しないと古いバージョンが選択された) 、「Add Package」ボタンを押す。

https://github.com/firebase/FirebaseUI-iOS.git

(2) パッケージプロダクトの選択で、以下を選択し、「Add Package」ボタンを押す。

・FirebaseAuthUI
・FirebaseGoogleAuthUI

ログイン方法によって、追加すべきパッケージプロダクトが変わります。

(3) Xcodeの「TARGETS」の「Info → URL Type」で「+」をクリックし、「URL Schemes」に「GoogleService-Info.plist」の「REVERSED_CLIENT_ID」をコピー&ペースト。

(4) コードを以下のように編集。

・ViewController.swift

import UIKit
import FirebaseAuthUI
import FirebaseGoogleAuthUI
class ViewController: UIViewController, FUIAuthDelegate {

    // ロード時に呼ばれる
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    // 認証ボタン
    @IBAction private func onAuthButton(_ sender: UIButton) {
        // 認証
        let authUI = FUIAuth.defaultAuthUI()!
        authUI.delegate = self
        let providers: [FUIAuthProvider] = [
            FUIGoogleAuth(authUI: authUI)
        ]
        authUI.providers = providers
        let authViewController = authUI.authViewController()
        self.present(authViewController, animated: true)
    }
    
    // 認証の結果取得時に呼ばれる
    internal func authUI(_ authUI: FUIAuth,
        didSignInWith authDataResult: AuthDataResult?, error: Error?) {
        // 成功
        if let user = authDataResult?.user {
            // ユーザー情報の確認
            print("uid:", user.uid)
            print("displayName:", user.displayName ?? "")
            print("photoURL:", user.photoURL ?? "")
        }
        // 失敗
        if let error = error {
            print("error:", error.localizedDescription)
        }
    }
}

認証後は、ユーザー情報をauthDataResult.userで取得できます。

・user.uid : ユニークID
・user.email : メール
・user.displayName : 表示名
・user.photoURL : アイコン画像URL

(5) Storyboardにボタンを追加し、onAuthButton()に関連付ける。

5. アプリの実行

アプリの実行手順は次のとおりです。

(1) アプリを起動して、「Auth」ボタンを押し、「Sign in with Google」ボタンを押し、Googleアカウントでログイン。

(2) Xcodeのコンソールでログイン結果を確認。
成功時にはユーザー情報、失敗時にはエラーメッセージを表示するようにしています。

uid: <ユニークID>
email: <メールアドレス>
displayName: <表示名>
photoURL: <アイコン画像URL>

6. ユーザー情報

ログイン中は、Auth.auth().currentUserでユーザー情報を取得できます。ログイン中かどうかの判定にも利用できます。

import FirebaseAuth
if let user = Auth.auth().currentUser {
    print("uid:", user.uid)
    if let displayName = user.displayName {
        print("displayName:", displayName)
    }
    if let photoURL = user.photoURL {
        print("photoURL:", photoURL)
    }
}

7. ログアウト

Auth.auth().signOut()でログアウトできます。

Ado {
    try Auth.auth().signOut()
} catch {
    print(error)
}



この記事が気に入ったらサポートをしてみませんか?