SwiftにてGoogle認証を実装

SwiftでGoogle認証を実装しようとしたところ,Googleのライブラリに対して公式のサンプルコードが古いみたいで,ビルド前にエラーが表示される.

それで調べたところ,ようやく発見.XCodeのUIKitのプロジェクトはすでに準備できている前提.

  • ライブラリをSwift Package Manager (XCodeの[File]→[Add Packages…])で入れるが,うまく動かない場合がある.そこで,事前にターミナルで “git config –global tag.forcesignannotated false" を実行しておく.
  • Firebaseを利用可能にして,Authorizationを設定する.これはドキュメントがたくさんある.案内に従ってGoogle認証を有効化し,"GoogleService-Info.plist"をダウンロードし,XCodeのProjectに追加する.Xcode の [Targets]→[Info]→[URL Types] を追加し,URL Scheme に GoogleService-Info.plist の REVERSED_CLIENT_ID を指定する.Googleと(Firebase)との接続情報が記録されているということ.
  • https://zenn.dev/paraches/articles/firebase_authui に従って設定する.「ここのコードが呼ばれない」という部分があるが,実際には呼ばれるので実装する.
    • XCodeでFirebaseUIライブラリを設定.XCodeの[File]→[Add Packages…]で開くダイアログの右上の検索窓で「Firebase」と入れると,FirebaseUI-iOSが表示されるのでそれを選択して Add Package].ここでうまく動かない場合は,上記最初の操作をしていないはず.
    • FirebaseAuthUI, FirebaseGoogleAuthUI, FirebaseOAuthUI をチェック.他にも必要なのがあったらチェックする.後で追加する場合は,XCodeで[TARGET]→[General]→[Frameworks, Libraries, and Embedded Content]の下部の+ボタンを押す.
    • Apple認証を追加する場合は,[TARGET]→[Signing & Capabilities]タブのAllの左の「+」をクリックし,"Sign in with Apple"をダブルクリックで追加.
    • AppDelegate.swift の先頭で,"import FirebaseCore" を追加
    • FirebaseApp.configure()をapplication(_:didFinishLaunchingWithOptions:)に追加
    • 下記コードを追加

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
  let sourceApplication = options[UIApplication.OpenURLOptionsKey.sourceApplication] as! String?
    if FUIAuth.defaultAuthUI()?.handleOpen(url, sourceApplication: sourceApplication) ?? false {
      return true
    }
  return false
}

    • ViewController.swiftの先頭に,"import FirebaseAuthUI", “import FirebaseGoogleAuthUI", “FirebaseOAuthUI" を追加
    • 認証結果を受け取るために class ViewController: UIViewController, FUIAuthDelegate { とする
    • let authUI = FUIAuth.defaultAuthUI() を定義する
    • viewDidLoad() 内で,authUI?.delegate = self
    • 認証結果を受け取る処理は func authUI(_ authUI: FUIAuth, didSignInWith user: User?, error: Error?) { } で定義.user内にユーザー情報が入っている.デバッグすれば中身を確認できる.
    • 認証プロバイダのリストを作成
      • let googleAuthProvider = FUIGoogleAuth(authUI: authUI!)
        let appleAuthProvider = FUIOAuth.appleAuthProvider(withAuthUI: authUI!)
        let twitterAuthProvider = FUIOAuth.twitterAuthProvider(withAuthUI: authUI!)
        let providers: [FUIAuthProvider] = [googleAuthProvider, appleAuthProvider, twitterAuthProvider]
      • authUI?.providers = providers
    • 画面表示を準備

override func viewDidAppear(_ animated: Bool) {
  if let authViewController = authUI?.authViewController() {
    self.present(authViewController, animated: true)
  }
}

  • ビルドする.通れば成功.Googleでログインできるか試す.
  • Twitter認証は,TwitterAPIの設定が必要.不要な場合は,コードから除去する.コードを見ればすぐわかる.
  • 同様に,Microsoft認証,Github認証,Yahoo認証,メールアドレス認証,電話認証,なども追加できるようだ.