はじめに
SwiftUIでアプリを開発しようと開発を始めて、まずはログイン機能を実装しようしました。
FirebaseのAuthenticationでログインプロバイダにGoogleアカウントを使えば簡単にログイン機能を実装できるだろうと考えていました。
しかし、見事にハマってしまい数時間消費してしまったので備忘録を残しておきます。
前提知識
AuthentictionでログインプロバイダにGoogleを利用する場合Googleが用意している「Google Sign-In for iOS」を利用します。
「Google Sign-In for iOS」を利用すると以下のような見慣れた「Sign in with Google」ボタンとログイン画面を簡単に実装できます。(UIKitならば)
このログイン画面でGoogleアカウントの認証を行い、その認証情報を利用してさらにfirebaseにログインすると言う流れです。
はまった点
FirebaseがGoogleアカウントの認証からFirebaseの認証まで詳しい手順を公開してくれています。
「iOS で Google ログインを使用して認証する」
https://firebase.google.com/docs/auth/ios/google-signin?hl=ja
しかし、「GoogleSignIn with SwiftUI」はUIKitにしか対応していないと言う問題があるようです。(2021年10月7日時点)
今回はUIKitではなくSwiftUIを利用したいので上記の手順どおりに実装することができませんでした。
そのため、ひたすらUIKitとSwiftUIの共存について闇雲に調べることになったのでした。
解決策
結果的にはとても参考になるソースがGithubにありましたのでご紹介します。
「GoogleSignIn6_SwiftUI」
https://github.com/paraches/GoogleSignIn6_SwiftUI
こちらがとても参考になりました。
ソース内に直書きされている「clientID」を自分のものに書き換えるように記載されていますが、
私の環境ではプロジェクト設定の中の「Info」→「URL Types」→「URL Schemes」も書き換える必要がありました。
このソースではGoogleの認証までしか行っていませんので、firebaseにログインするためにはさらに以下の手順の「2. Google ログインを実装する」の4の手順でcredentialを宣言するところ以降の手順が必要になります。
「iOS で Google ログインを使用して認証する」
https://firebase.google.com/docs/auth/ios/google-signin?hl=ja
さいごに
もともとFirebaseやswiftを使い慣れている方であればそんなに混乱しないのかもしれませんが、あまり慣れていない方は私と同様の混乱が生じると思います。「Sign in with Google」が正式にswiftUIでそのまま利用できる様になるまでですが、参考になればと思います。
「Google Sign-In for iOS」のGithubのレポジトリにおいてもswiftUI関連のサンプルソースのプルリクエストやissuesが上がっていますので近々対応することを期待しています。
https://github.com/google/GoogleSignIn-iOS/pulls