AAB形式でビルドしたFlutter製のAndroidアプリでGoogleログイン時にPlatformException
はじめに
最近個人開発しているアプリのsubskunの方でGoogleログインを実装した。
デバッグビルドで動作確認をしていたときは問題なく動作していたが、AppDistributionとストアからインストールしたときは以下のエラーが出てGoogleログインができなかった。
PlatformException(sign_in_failed, com.google.android.gms.common.api.b: 10: , null, null)
解決法
ストアからのインストール
PlayConsoleの設定>アプリの完全性>アプリの署名>アプリ署名鍵の証明書
にフィンガープリントがある。
このフィンガープリントをFirebaseのプロジェクトの設定>全般>マイアプリ
にあるフィンガープリント
に登録する必要があった。
ちなみにFirebaseの方で以下の説明がされている。DynamicLinksを使わないのであれば登録するのはSHA-1だけでよいだろう。
SHA-1: ご使用のアプリの OAuth 2 クライアントと API キーを作成する場合に使用
SHA-256: Firebase Dynamic Links の設定に使用
AppDistributionからのインストール
実はなんとAppDistributionにあるAAB
ボタンをホバーすると以下のツールチップが表示される。
証明書を表示
ボタンを押すと以下のフィンガープリントが表示されるので、これをストアからのインストールと同じくFirebaseのプロジェクトに設定する。
これでAppDistributionからインストールしたアプリもGoogleログインができるようになった。
これが一番時間がかかった…。そもそもストアとAppDistributionで別々に設定するとは思わなかった…。
デバッグビルドでのインストール
ついでにデバッグビルドで実機にインストールするときにGoogleログインできるようにする対応も書いておく。
cd android
でandroid
ディレクトリに移動し、./gradlew signingReport
をターミナルで実行する。
すると、以下のようにフィンガープリントが出力されるのでこれをFirebaseのプロジェクトに登録するとデバッグビルドでもGoogleログインの動作確認が可能になる。
参考: https://developers.google.com/android/guides/client-auth?authuser=0#using_gradles_signing_report
おわり
公式ドキュメントに明記されていなかったし、ストアとAppDistributionからのインストールそれぞれで設定が必要なことに気づかず、かなり時間を溶かすことになった。
一方で、AABを扱うのは今回の個人開発が初めてだし、Androidの署名まわりも完全に把握しているわけではない、という知識に関する部分も時間がかかった理由にあると思われる。この辺りは今後少しずつキャッチアップしていきたい。
(おまけ)上記の対応でもエラーが出る場合
以下の対応ができているか確認してみるとよいかもしれない。
- Firebaseの
プロジェクトの設定>全般>公開設定>サポートメール
が入力されているか - 最新のgoogle-services.jsonをダウンロードしてビルドできているか