Flutter Android谷歌登录报ApiException:10 iOS端serverAuthCode为null
Flutter google_sign_in 插件集成问题及修复方案
问题清单
- Android端登录触发失败,抛出异常:
PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null),已参考公开社区同问题的解决方案操作,问题未解决 - iOS端可正常拉起授权弹窗、完成登录流程并获取用户基础信息,但返回结果中
serverAuthCode字段值为null
对应问题修复步骤
Android端 ApiException 错误码10 修复
错误码10本质是Google服务端对当前应用的身份校验不通过,按以下优先级排查:
- 核对Google Cloud/Firebase控制台填写的应用包名,和项目
android/app/build.gradle中配置的applicationId完全一致,若存在debug、release、多渠道包不同包名的情况,需要把所有包名都在控制台添加对应配置 - 补全所有签名证书的SHA1指纹,不要只配置debug签名:
- debug签名SHA1获取命令:
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android - release签名SHA1获取命令:
keytool -list -v -keystystore [你的release签名文件本地路径] -alias [你的证书别名],按提示输入签名密码即可查看 - 若应用已上架Google Play,需要额外到Play管理中心的「应用签名」板块,将Google托管的应用签名证书SHA1也添加到控制台
- debug签名SHA1获取命令:
- 所有配置修改完成后,重新从控制台下载最新的
google-services.json文件,替换项目中android/app/路径下的旧配置文件,不要手动修改旧文件内容 - 检查项目内所有Google相关依赖的版本,确保和
google_sign_in插件依赖的play-services-auth版本对齐,避免版本冲突导致身份校验异常 - 排除测试设备环境问题:部分国行机自行安装的魔改GMS、第三方模拟器自带的修改版Google服务框架,会导致校验失败,换搭载官方原生GMS的设备测试验证
iOS端 serverAuthCode 返回null 修复
- 初始化
GoogleSignIn实例时,必须显式传入iOS端对应的OAuth客户端ID(格式为xxx-xxx.apps.googleusercontent.com),不要留空使用默认配置 - 若需要给后端传递授权码做登录校验,初始化时要传入你后端服务对应的Web端OAuth客户端ID,或者在拿到登录账号后主动调用方法请求授权码,示例代码:
// 初始化配置示例 final GoogleSignIn googleSignIn = GoogleSignIn( clientId: "你的iOS端OAuth客户端ID", // 替换为你自己的Web端客户端ID,后端用这个ID换token serverClientId: "你的Web端OAuth客户端ID", scopes: ['email', 'profile'], ); // 登录时获取授权码示例 final GoogleSignInAccount? account = await googleSignIn.signIn(); if (account != null) { final GoogleSignInAuthentication auth = await account.authentication; // 此时auth.serverAuthCode就不会为null final String? serverAuthCode = auth.serverAuthCode; }
- 核对
ios/Runner/Info.plist中的URL Scheme配置,需要和你使用的iOS客户端ID的反向格式完全匹配,格式为com.googleusercontent.apps.xxx-xxx,不要出现字符错漏 - 若使用Firebase Auth承接登录,需要到Firebase控制台的Google登录配置页,补全项目支持邮箱,未填写支持邮箱会导致授权码返回空
开发环境信息(flutter doctor 检测结果)
[✓] Flutter (Channel stable, 3.0.4, on macOS 12.4 21F79 darwin-x64, locale en-US) • Flutter version 3.0.4 at /Users/cuongtruongquoc/Documents/fvm/3.0.4 • 上游代码仓库为Flutter官方仓库 • Framework revision 85684f9300 (2 days ago), 2022-06-30 13:22:47 -0700 • Engine revision 6ba2af10bb • Dart version 2.17.5 • DevTools version 2.12.2 [✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0) • Android SDK at /Users/cuongtruongquoc/Library/Android/sdk • Platform android-33, build-tools 33.0.0 • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840) • All Android licenses accepted. [✓] Xcode - develop for iOS and macOS (Xcode 13.2.1) • Xcode at /Applications/Xcode.app/Contents/Developer • CocoaPods version 1.11.3 [✓] Chrome - develop for the web • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome [✓] Android Studio (version 2021.2) • Android Studio at /Applications/Android Studio.app/Contents • 已安装Flutter开发插件 • 已安装Dart开发插件 • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840) [✓] Connected device (4 available) • Live (mobile) • AHB00036590 • android-arm64 • Android 10 (API 29) • sdk gphone x86 64 (mobile) • emulator-5554 • android-x64 • Android 11 (API 30) (emulator) • macOS (desktop) • macos • darwin-x64 • macOS 12.4 21F79 darwin-x64 • Chrome (web) • chrome • web-javascript • Google Chrome 103.0.5060.53 [✓] HTTP Host Availability • All required HTTP hosts are available
内容的提问来源于stack exchange,提问作者Cuong Truong Quoc
相关产品推荐
相关产品推荐

