[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アカウント認証画面が表示される