[swift] Firebase + Googleアカウント認証の実装
目次
Firebase + Googleアカウント認証の実装
Firebase + Googleアカウント認証の実装するには以下の手順を実施する
Firebase
FirebaseのauthenticationでGoogle認証を有効にする
設定→GoogleService-info.plistをダウンロードする
pod
podファイルに下記ライブラリを追加しpodファイルのあるフォルダに移動してから
pod install
をコンソールで実行する
pod 'Firebase/Auth' pod 'GoogleSignIn'
xcode
xcodeにGoogleService-info.plistをコピーする
GoogleService-info.plistを開き、REVERSED_CLIENT_IDの値をコピーする
xcodeのtarget->Info->URL Types->URL Schemesに先程のREVERSED_CLIENT_IDの値を貼り付けする
AppDelegate
AppDelegateに下記コードを実装
import Firebase func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { //Firebase ////////////// FIRApp.configure() //for enable Firebase } func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool { if GIDSignIn.sharedInstance().handleURL(url, sourceApplication: sourceApplication, annotation: annotation) { return true } return true }
StoryBoard
Google認証を実施したいviewControllerにViewを配置し、GIDSignInButtonをクラスに設定する
見た目は変わらないが、Buildすると配置したViewがGoogleっぽいログインボタンで表示される
もしUIButtonなどカスタマイズされたボタンが必要な場合は、UIButtonを配置しておいてもよい
ViewController
認証を行いたいviewControllerに以下のコードを実装する
import UIKit import Firebase class ViewController: UIViewController,GIDSignInDelegate, GIDSignInUIDelegate{ @IBOutlet weak var ggSignInButton: GIDSignInButton! //GIDSignInButtonクラスを継承したViewに関連付ける override func viewDidLoad() { super.viewDidLoad() //GoogleAccount ///// GIDSignIn.sharedInstance().clientID = FIRApp.defaultApp()?.options.clientID GIDSignIn.sharedInstance().delegate = self GIDSignIn.sharedInstance().uiDelegate = self } //UIButtonでSignInを実施したい場合はこちら @IBAction func ggSignInButtonClicked(sender: AnyObject) { GIDSignIn.sharedInstance().signIn() } //ログインが成功した場合 func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, withError error: NSError!) { print("Google Sing In didSignInForUser") if let error = error { print(error.localizedDescription) return } let authentication = user.authentication let credential = FIRGoogleAuthProvider.credentialWithIDToken(authentication.idToken,accessToken: authentication.accessToken) //ユーザ登録後の処理.... } //ログインがキャンセル・失敗した場合 func signIn(signIn: GIDSignIn!, didDisconnectWithUser user:GIDGoogleUser!, withError error: NSError!) { print("Google Sing In didDisconnectWithUser") // Perform any operations when the user disconnects from app here. // ... } }
GIDSignInDelegate, GIDSignInUIDelegateの2つのDelegateを継承しておくこと、
ぱっと見同じDelegateに見えるがサインインのイベント用とUI用となっている
GIDSignInButtonが押されるか、もしくはGIDSignIn.sharedInstance().signIn()が呼ばれるとGoogleアカウント認証画面が表示される