Flutter Google登录选择账号后无报错无限卡住如何解决?
调试方法
- 新增GoogleSignIn状态监听:初始化GoogleSignIn后添加状态回调,打印底层返回的用户数据与异常,避免await静默丢失响应:
_googleSignIn.onCurrentUserChanged.listen((account) { print("当前登录账号:$account"); }, onError: (e) { print("登录回调异常:$e"); }); - 抓取原生层日志:Flutter层未捕获异常大概率是原生层报错未向上抛出,安卓端连接设备后执行命令
adb logcat -s GoogleSignIn,Flutter,筛选谷歌登录相关的原生报错信息 - 最小scope测试:先把GoogleSignIn初始化的scopes改为仅
['email'],排除敏感权限校验导致的卡住问题
可行解决方案
- 校验OAuth同意屏幕配置
登陆Google Cloud控制台,找到对应Firebase项目的OAuth同意屏幕:- 如果应用处于测试状态,必须将你用来测试的谷歌账号添加到「测试用户」列表中,未在列表内的账号选完后会直接卡住无报错
- 确认必填项(应用名称、开发者联系方式)已完整填写,缺项会导致谷歌权限校验不通过
- 修正密钥与配置文件匹配问题
- 确认当前打包用的签名密钥SHA1、SHA256已全部添加到Firebase对应应用的配置中,debug模式用的是debug.keystore的签名,release模式用的是正式签名,二者SHA值不同,需要分别添加
- 重新从Firebase控制台下载最新的
google-services.json,放到安卓项目android/app/目录下,确认文件内的包名、client_id和你的项目配置完全匹配
- 适配google_sign_in 5.1.0版本的已知问题
该版本存在登录缓存导致的await卡住问题,可在调用signIn前先强制清除缓存,修改代码如下:try { // 新增这行,先清之前的登录缓存 await _googleSignIn.signOut(); GoogleSignInAccount? googleSignInAccount = await _googleSignIn.signIn(); // 原有后续代码保持不变 } - 检查安卓端构建配置
- 确认项目级
android/build.gradle中已添加谷歌服务依赖,推荐适配Flutter 2.2.1的版本为4.3.8:dependencies { classpath 'com.android.tools.build:gradle:4.1.0' classpath 'com.google.gms:google-services:4.3.8' } - 确认应用级
android/app/build.gradle底部已添加谷歌服务插件引用:apply plugin: 'com.google.gms.google-services'
- 确认项目级
- 敏感权限适配
你使用的https://www.googleapis.com/auth/contacts.readonly属于谷歌敏感权限,需要在OAuth同意屏幕提交权限申请并通过谷歌审核后才能正式使用,测试阶段建议先移除该scope,验证基础登录流程正常后再单独处理权限申请问题。
内容的提问来源于stack exchange,提问作者mike hennessy
相关产品推荐
相关产品推荐

