iOSのプログラム言語SwiftでFirebaseのAuthenticationを使ってみたい!(Google編)

  •  
  •  
  •  
  •  
  •  
  •  

前回のFirebase Authenticationの続きになります。前回はメアドを使ったユーザ管理を行いましたが、今回はGoogleアカウントを使ってみたいと思います。

今回も同様にテストアプリを動かすまでの流れを書いて行きます。

(前回のおさらい)
iOSのプログラム言語SwiftでFirebaseのAuthenticationを使ってみたい!(メアド編)

Xcodeプロジェクト作成からFirebaseの導入まで

Xcodeのプロジェクト作成してFirebaseの導入までを行います。
「iOSのプログラム言語SwiftでFirebaseのRealtime Databaseを使ってみたい!」
「Xcodeプロジェクトを作成する」から「XcodeにFirebaseを導入する」
までと同じ手順となるのでそちらを参照してください。ただし、一点違う手順があるので参照する前の下記の赤枠部分の内容を確認してください。

Podfileを開いて
pod ‘Firebase/Database’
の箇所を、今回は上記赤枠の
pod ‘Firebase/Auth’
pod ‘GoogleSignIn’
を追加します。

次に(プロジェクト名).xcworkspaceからXcodeを起動します。

左側のツリービューから「GoogleService-Info.plist」を選択し、「REVERSED_CLIENT_ID」のValue値をコピーします。

左側のツリービューから「プロジェクト名」を選択し、「URL Types」を展開して「URL Schemes」の箇所に先程コピーした「REVERSED_CLIENT_ID」のValue値を貼り付けます。

AppDelegate.swiftを選択して
「import Firebase」「FirebaseApp.configure()」の他に下記のコードを上記の位置に追加します。
import GoogleSignIn
GIDSignIn.sharedInstance().clientID = FirebaseApp.app()?.options.clientID

テストアプリを実装する

ここからはテストアプリを実装していきます。

実装内容は、
・Googleアカウントの連携を行う。
・Googleアカウントでユーザ登録を行う。
・サインイン中のGmailとユーザIDを表示する。
・サインイン中のユーザをサインアウトさせる。

Main.storyboardを選択してViewController上に必要なコントロールを配置します。
Googleアカウントのユーザ認証を行うためのボタンはあらかじめライブラリで用意されているものを使います。
まずボタン用にViewコントロールを配置します。このViewコントロールを選択した状態で右側のプロパティエリアから「Custom Class」プロパティを表示させてClass項目にGIDSignInButtonを追加します。Xcode上ではただのViewコントロールのままですが実際に起動させるとGoogleサインインボタンが表示されます。
それ以外のコントロールは「email」「userId」を表示させるためのUITextField、サインアウトするためのUIButtonを配置します。


import UIKit
import Firebase
import GoogleSignIn

class ViewController: UIViewController, GIDSignInUIDelegate, GIDSignInDelegate {

    @IBOutlet weak var fromEmail: UILabel!
    @IBOutlet weak var fromUserId: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        GIDSignIn.sharedInstance().uiDelegate = self
        GIDSignIn.sharedInstance().delegate = self
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
        if let error = error {
            print("Error: \(error.localizedDescription)")
            return
        }
        
        guard let authentication = user.authentication else { return }
        let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken, accessToken: authentication.accessToken)
        
        Auth.auth().signIn(with: credential) { (user, error) in
            if let error = error {
                print("Error: \(error.localizedDescription)")
                return
            }
            self.fromEmail.text = user?.email
            self.fromUserId.text = user?.uid
        }
    }
    
    func sign(_ signIn: GIDSignIn!, didDisconnectWith user: GIDGoogleUser!, withError error: Error!) {
    }
    
    @IBAction func signOut(_ sender: AnyObject) {
        GIDSignIn.sharedInstance().signOut()
        self.fromEmail.text = "--- (サインアウトしました)"
        self.fromUserId.text = "---"
    }

}

ViewController.swiftに上記ソースコードから実装部分を追加します。ソースコードまるまるコピペでもOKです。Delegateもお忘れなく。

最後にストーリボード上のコントロールとソースコードのIBOutlet&IBActionの紐づけを行いましょう。
サインアウト用のUIButtonは「signOut」メソッドを「Mouse Down」イベントと紐づけます。GIDSignInButtonとして配置したViewコントロールはIBOutletやIBActionと紐付ける必要はありません。

ここまでできたら実装完了です。

FirebaseのAuthenticationを設定する

Firebase ConsoleのAuthenticationから有効にする認証タイプの設定を行います。

左側のメニューから[Develop]-[Authentication]を選択し、Authenticationの「ログイン方法」タブに切り替えたらログインプロバイダ一覧にある「Google」を選択します。

赤枠の部分を有効にして保存ボタンを押します。

「Google」のステータスが「有効」になっていればOKです。最後にXcodeのシミュレーターを起動させてGoogleのユーザ認証等が出来ているのかを確認していきましょう。

Googleアカウントとテストアプリの連携を確認する

Googleアカウントとテストアプリがちゃんと連携されているのかを確認してみましょう。

Googleアカウント画面から「ログインとセキュリティ」にある「アカウントにアクセスできるアプリ」を選択います。

「アカウントにアクセスできるアプリ」画面にある赤枠「アプリを管理」を選択します。

アカウントにアクセスできるアプリの一覧が表示されます。ここにテストアプリが表示されていればOKです。

まとめ

前回のメアドのユーザ管理と比べてテストアプリ実装までの導入手順は若干増えていて少し面倒かも知れませんが、実装に関してはライブラリで用意されているGoogleサインイン機能を使えば実装する手間はだいぶ省けますね。

Googleアカウントのユーザ認証機能はSNSアプリでは必須といっても過言ではないくらいよく使われている機能なので簡単に実装できてしまうメリットは計り知れないものがあると思います。

次回は「Firebase Authentication機能を使ってみたい」シリーズ最後のTwitterのアカウントと連携したユーザ管理に挑戦します!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です