Flutter google_sign_inでidTokenを取得
目的
上記のパッケージを使用してGoogle OAuthのidTokenを取得する
対象読者
上記のパッケージを利用してGoogle CloudのOAuthクライアントをAndoroid向けにセットアップしてSHA1などの情報があっているにも関わらず以前としてidTokenを取れない人向け
結論
自分でandroid用にOAuth同意画面とOAuthクライアントForAndoroidを適切にセットアップしてもidTokenは何故か取れないので、firebase authenticationを有効化してfirebaseが自動的に作成するOAuthクライアント(何故かweb)を使えば取れる。
Firebaseプロジェクトの追加
対象プロジェクトに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