Closed1
FlutterにおけるプラットフォームごとのGoogle認証方法まとめ

プラットフォームごとに処理が異なるためメモを残しておく。
WebやDesktopではクライアントIDの承認済みドメイン(ホワイトリスト)やリダイレクトURIの指定が別途必要(そのため、Webでの開発はポート番号固定での起動がおすすめ flutter run -d chrome --web-port=5000
)。
iOS/Android
- 普通にgoogle_sign_in | Flutter Packageを使えば良い
- v5.4.0からiOSでの
GoogleService-Info.plist
指定が不要になった(=設定不要になった) - Androidの場合はSHA-1の登録が必要(Firebaseコンソール)
- 設定が済んでいるのにもかかわらずうまく動作しない場合、iOSもAndroid両方ともネイティブ起動すれば、詳細のログがでてきて原因特定しやすい
- 例: iOSで認証ボタン押下時にアプリがKillされる→Xcode経由で起動するとREVERSE_CLIENT_IDが間違っているとのログが出力
Web
- モバイル同様google_sign_in | Flutter Packageを使えば良いが、依存関係にあるgoogle_sign_in_web | Flutter Packageが実際は機能しているので、詳細は後者のREADMEを見るのが良い。
-
google_sign_in_web
のREADMEにも記載されているが、v0.12からGIS(Google Identity Services)方式に変更となっている- Authentication(認証)とAuthorization(認可)が明確に区別された
-
signInSilently
メソッドで認証する必要がある-
signIn
メソッドではIdToken
が取得できない点に注意 - これ単体では
IdToken
の取得はできるもののaccessToken
が取得できない点に注意
-
-
accessToken
が必要な場合は、requestScopes
メソッドで利用スコープの認可要求が必要
サンプルコード
Future<GoogleSignInAccount?> _signInWithWeb() async {
final googleSignIn = GoogleSignIn(
clientId: [YOUR_CLIENT_ID],
);
// 定義したスコープで認可リクエスト
final res = await googleSignIn.requestScopes([
'email',
'https://www.googleapis.com/auth/userinfo.profile',
]);
// 認証
return res ? googleSignIn.signInSilently() : null;
}
signInSilently() の挙動 |
---|
![]() |
Desktop(macOS)
-
google_sign_in
ではサポートされていない - monoさんコメントに記載の通りdesktop_webview_auth | Flutter Packageを利用する
このスクラップは2023/10/16にクローズされました