Kekeの日記

エンジニア、読書なんでも

Firebase Authenticateを使ってiOSでログイン処理を行う

f:id:bobchan1915:20180901143023p:plain

1. Firebase Antheticate

1.0 Firebase Autheticateとは

Firebase Authticateとは、

パスワード、電話番号、一般的なフェデレーション ID プロバイダ(Google、Facebook、Twitter)などを使用した認証を行うことができるサービス

のことです。しかも、めちゃめちゃ簡単に実装できます

あまり本質的ではないので、Firebaseについては説明しません。

1.1 公式ドキュメント

詳しく知りたい人は以下のドキュメントをごらんください。

Firebase Authentication  |  Firebase

1.2 サービスとしてやっていくには

Firebase Authenticateは認証の必要最低限しかやってくれません。

なので、れっきとしてユーザーの登録情報を保存するデータベースなどが必要です。 そのようなデーターベースなどのバックエンドのことをカスタムユーザーバックエンドといいます。

以下のようなアーキテクチャになると思います。

f:id:bobchan1915:20180901143226p:plain

今回はログイン処理だけしたいので、カスタムユーザーバックエンドは実装しません。

2. 実装

2.1 Firebase SDK for iOSをインストール

Cocoapodを使ってインストールします。

pod 'Firebase/Auth'

2.2 Firebaseでプロジェクトの作成・iOSアプリを有効化する

Google Cloud Platform(GCP)と連携させることができます。

なので、最初にGCPを作っておくのがのちのちMySQLなどを構築するときは便利でしょう。

作成されると以下のような画面になります。

f:id:bobchan1915:20180831160631p:plain

これからアプリを有効化します。

Project Overviewの隣の設定メニューを押して「アプリ」セクションをみて「iOSアプリにFirebaseを追加」します。

f:id:bobchan1915:20180831221606p:plain

まず、バンドルネームなど必要なものを設定します。あとは手順に従うだけです。

f:id:bobchan1915:20180831221927p:plain

正しく認証されると以下のようになります。

f:id:bobchan1915:20180831223719p:plain

2.3 メール・パスワード認証を有効にする

「ログイン方法」タブから有効にすることができます。

2.4 Firebase作成

まず、初期化をする必要があります。 共通で設定したいので、AppDelegateに追加します。

import Firebase

...
FirebaseApp.configure()
...

2.4 Signup実装

ここでは以下のようにインポートします。

ViewControllerを分ける時は、その都度、インポートしてください。

import FirebaseAuth

サインアップのbuttonが押されると

@objc func signupPressed(_ sender: Any){
        guard let email = emailTextField.text else {return}
        guard let password = passwordTextField.text else {return}
        
        Auth.auth().createUser(withEmail: email, password: password){(user,error) in
             // なにかする...
        }
    }

2.5 Signin実装

ここではSigninするViewControllerも

import FirebaseAuth

そしてUIButtonを定義していて、そのボタンを押すと以下のようなメソッドが呼ばれるとします。

@objc func signinPressed(_ sender: Any){
        guard let email = emailTextField.text else {return}
        guard let password = passwordTextField.text else {return}
        
        Auth.auth().signIn(withEmail: email, password: password){(user,error) in
            // なにかする...
        }
    }

2.6 おまけ

まだまだいろんなプロバイダー(facebook, github...)を使って認証することができます。 使うときが来たら使おうと思います。

https://firebase.google.com/docs/auth/images/auth-providers.png?hl=ja

3. まとめ

FirebaseはWeb Appでしか使ったことがなかったのですが、全く一緒で、とにかく使いやすいの一言につきます