Flutter应用health包3.0.3对接Google Fit选账号后返回授权失败
health 3.0.3 版本 Google Fit 授权静默返回 false 的排查清单
你当前使用的 health: ^3.0.3 属于较早版本,对接的是旧版 Google Fit REST 接口,并非谷歌后续推出的 Health Connect,常见的选完账号直接关闭弹窗、授权返回false的问题可按以下顺序逐一核对:
- 核对 Google 服务控制台的 OAuth 配置匹配度
- 必须保证控制台注册的 Android OAuth 客户端的应用签名 SHA1,和当前调试/运行的Flutter应用的签名SHA1完全一致(包含调试签名、正式发布签名),SHA1不匹配是最常见的静默授权拒绝诱因
- OAuth 客户端绑定的应用包名,必须和 Android 端配置的
applicationId完全一致,不存在大小写差异、后缀补全/缺失的问题 - 对应控制台项目内必须手动开启 Google Fit API,未开启API的状态下所有权限请求都会被直接拒绝,不会弹出明确错误提示
- 核对 Android 端Manifest与权限配置
- 需在
AndroidManifest.xml的权限声明块中,补充对应数据类型的读取权限:
缺失该类权限声明时,授权流程会在选择完Google账号后被系统直接拦截,返回权限值为false的结果<uses-permission android:name="android.permission.FITNESS_ACTIVITY" /> <uses-permission android:name="android.permission.FITNESS_LOCATION" /> - 若应用开启了代码混淆,需确认混淆规则已保留
com.google.android.gms包下的所有类,避免相关Google Fit依赖类被裁剪导致流程中断
- 需在
- 核对代码逻辑适配
health 3.0.3的授权流程依赖前置的Google账号登录校验,你当前提供的授权逻辑直接实例化HealthFactory后就发起权限请求,没有在前置流程中完成Google账号的基础登录校验,是常见的选完账号流程中断的诱因- 核对申请的权限范围(计步、步行跑步距离)是否和控制台OAuth配置中申请的权限范围匹配,权限范围不匹配时不会弹出明确错误,只会静默返回授权拒绝
- 排查辅助方式
- 授权返回false时,可通过logcat过滤包含 "Health"、"Google Fit" 关键字的系统日志,静默拒绝的场景下,日志中会明确标注具体的拒绝原因,无需仅靠业务层的布尔返回值定位问题
注:该插件3.0.3版本已停止维护,长期开发建议评估升级至支持Health Connect的新版本,规避谷歌接口调整带来的兼容性问题
内容的提问来源于stack exchange,提问作者bulgarian-beast
相关产品推荐
相关产品推荐

