とてもハマってしまったため、書いておきます。
ハマったところ
FlutterでFirebaseのGoogle SignInを実装しようとして、次の2つでハマりました。
- AndroidX
- サポートメールの設定
AndroidX
実装後、ビルドが通らなくなりました。
supportライブラリにビルドエラーが出ていました。
いろいろ調べたところ、どうやらパッケージがAndroidXに切り替わったタイミングがあるらしく、その依存関係の問題でした。
AndroidXを使わないバージョンの指定方法も上の記事には書いてあったのですが、あとあと面倒になるので、AndroidXに対応するよう修正しました。
サポートメールの設定
ビルドが通るようになって、Googleのサインイン画面でサインインボタンを押すところまでできるようになったのですが、ボタンを押すと、signIn()で以下のExceptionが発生しました。
PlatformException (PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 12500: , null))
stackoverflowにはいろいろな解決策が提示されていて、だいたいは、SHA1のキーをFirebaseに設定すればいいんだよ、というものでしたが、どれもダメでした。
探しまくったところ、以下の質問の回答に今回の解決策がありました。
Finally I found that Forgot to set support e-mail address in Google Developers Console > API and service > certificate > user consent screen link and this option also in your Firebase project setting .After set up everything should work.Hope this will help you.
原因は、Firebaseプロジェクトのサポートメールを設定していなかったためでした。
これを設定したところ、無事、サインインできるようになりました。
分かった後でググってみると、きちんと書いてある記事もありました。
https://dev.classmethod.jp/smartphone/flutter_firebase-authentication1/
対応コード
signInWithGoogleはもうありません
FirebaseUser user = await _auth.signInWithCredential(
GoogleAuthProvider.getCredential(
accessToken: googleAuth.accessToken, idToken: googleAuth.idToken));
AndroidX対応いろいろ
firebase_core: ^0.4.0+1
firebase_auth: ^0.11.1
google_sign_in: ^4.0.1+3
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0'
classpath 'com.google.gms:google-services:4.2.0'
}
android {
compileSdkVersion 28
...
defaultConfig {
...
minSdkVersion 21
targetSdkVersion 28
...
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
...
dependencies {
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
implementation 'com.google.firebase:firebase-core:16.0.9'
}
apply plugin: 'com.google.gms.google-services' // Google Play services Gradle plugin
android.enableJetifier=true
android.useAndroidX=true
その他
Google SignInのための設定。
Firebase Consoleでの作業
プロジェクトの設定で、マイアプリを作成する。
flutterプロジェクトのSHA証明書フィンガープリントを設定する。(Android Studioで確認できる)
google-services.jsonをダウンロードして、android/appに置く。
Authenticationのログイン方法で、Googleを有効にする。
Androidの場合は、他の設定は不要。
Google Developer Consoleでの作業
OAuth 同意画面を設定する
おしまい。