Closed4

Flutter+SupabaseでAndroid Google認証の触りだけやってみる備忘録

kazy_developerkazy_developer

ほぼ参考記事の順番にやる。
一旦Androidだけで動作が見れればよしとする。
なので、iOSの設定はスキップ。

keystoreの格納場所

コマンドで生成したdebug.keystoreandroid/に設置されていたらandroid/app/にmvしておく
GPTに聞いたらapp/にあればbuild.gradleで直接指定不要らしいけど、android/でも大丈夫なのかもしれない(未確認)
ただ、個人的にもandroid/よりandroid/app/のほうが好きなのでandroid/app/mvした。

Google Cloudコンソール

Webアプリはなし、iOS、Androidでの実装だけだとしても、「ウェブアプリケーション」用のクライアントIDの作成が必須なので注意。

公式ドキュメントにも書いてあったのに見逃してた。

kazy_developerkazy_developer

Androidでエラーがでる

PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null)

上記エラーで検索すると、「だいたいAndroidのSHA-1が間違ってる、設定できていない」
という内容が出てきた。
念の為、debug.keystoreSHA-1とのSHA-1 証明書のフィンガープリントの値をチェックする。

debug.keystoreはこれで出力できる

$ cd android
$ ./gradlew signingReport

↑ただし、この./gradlew signingReportはAndroidのbuild.gradleにflutter build時など環境変数の注入が前提の作りになっていると、Android単体でコケてしまう場合があるので注意。

$ ./gradlew signingReport

FAILURE: Build failed with an exception.

* Where:
Build file '/hogehoge/android/app/build.gradle' line: 22

* What went wrong:
A problem occurred evaluating project ':app'.
> Could not get unknown property 'dartDefines' for project ':app' of type org.gradle.api.Project.

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.

このプロジェクトはdart-define-from-fileで環境変数を注入して当て込みまくってるbuild.gradleで発生したエラー
なので、どうしようもない場合は、CursorやClaudeなどに頼んでデフォルト値のハンドリングを追加してもらうか、このコマンドを叩く際だけ固定値入れておけば良い。
滅多に叩かないコマンドなので固定値いれてgradlewが実行できるようにするくらいで良いと思う。

取り敢えず一時的に直して、$ ./gradlew signingReportを叩いて正常に出力されるようになったので、SHA-1の値を確認...
どうやら違っていたようで、GC上のAndroidのクライアントID設定のSHA-1を正しい値に設定し直したらGoogle認証通った。

めでたし。

kazy_developerkazy_developer

認証処理

参考記事だとGoogleSignInのインスタンス生成時にOS判定でだし分けてどちらもclientIdに入れていたけど、このandroidClientIdはいらないっぽい?

final GoogleSignIn googleSignIn = GoogleSignIn(
    clientId: Platform.isAndroid ? Env.androidClientId : Env.iosClientId,
    serverClientId: Env.webClientId,
  );

公式Docだとこうなってた。

  /// TODO: update the Web client ID with your own.
  ///
  /// Web Client ID that you registered with Google Cloud.
  const webClientId = 'my-web.apps.googleusercontent.com';

  /// TODO: update the iOS client ID with your own.
  ///
  /// iOS Client ID that you registered with Google Cloud.
  const iosClientId = 'my-ios.apps.googleusercontent.com';

  final GoogleSignIn googleSignIn = GoogleSignIn(
    clientId: iosClientId,
    serverClientId: webClientId,
  );

なので、ここ以外で、androidClientIdを使うタイミングがなければそもそも定義削除して問題なさそう。

このスクラップは2025/01/17にクローズされました