🙆‍♀️

Flutter google_sign_inでidTokenを取得

に公開

目的

https://pub.dev/packages/google_sign_in
上記のパッケージを使用してGoogle OAuthのidTokenを取得する

対象読者

上記のパッケージを利用してGoogle CloudのOAuthクライアントをAndoroid向けにセットアップしてSHA1などの情報があっているにも関わらず以前としてidTokenを取れない人向け

結論

自分でandroid用にOAuth同意画面とOAuthクライアントForAndoroidを適切にセットアップしてもidTokenは何故か取れないので、firebase authenticationを有効化してfirebaseが自動的に作成するOAuthクライアント(何故かweb)を使えば取れる。

Firebaseプロジェクトの追加

https://console.firebase.google.com/?hl=ja

対象プロジェクトにAndroidアプリを登録


sha1はandroidディレクトリ以下で./gradlew signingReportすればデバッグビルドで使用したキーの確認が可能。build.gradleの設定に応じてパッケージ名も同様に設定

google-services.jsonはgradleのフレーバーに応じて探索するので、android/app/src/devなど環境別に分けて置いておいてもいいし、一個しかないならトップレベルにおいても良い。

firebase authenticationを有効にする前にダウンロードするとoauth_clientの情報が含まれていないjsonになってしまうのでまだの場合はここでDLしなくても良い。

android/app/build.gradle.ktsのところにプラグイン追加id("com.google.gms.google-services")
android/settings.gradle.ktsにプラグイン追加id("com.google.gms.google-services") version "4.4.2" apply false
firebaseの方はなくても動く

firebase authenticationの有効化




有効化できたら、google-services.jsonをDLして配置

google_sign_inのインストール

flutter pub add google_sign_in

実装して検証

適当にボタンを作ってコールバックで検証するとわかりやすい

final googleSignIn = GoogleSignIn();
    onGoogleSignInPressed() async {
      try {
        final account = await googleSignIn.signIn();
        final auth = await account?.authentication;
        print("auth: $auth");
        final idToken = auth?.idToken;
        final accessToken = auth?.accessToken;
        print('idToken: $idToken');
        print('accessToken: $accessToken');
      } catch (e) {
        print("SignInScreen: $e");
      }
    }

Discussion