You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google登录申请contacts.readonly权限后一直显示加载无法正常生效

问题原因
  • 敏感权限未完成前置配置:https://www.googleapis.com/auth/contacts.readonly属于Google敏感权限范畴,测试阶段如果没有将测试账号加入Google Cloud OAuth同意屏幕的测试用户列表,或者正式上线阶段没有完成Google官方的敏感权限审核,授权流程会被系统拦截卡住,导致页面一直显示加载状态。
  • 代码缺少异常捕获和边界处理:现有代码没有处理signIn()方法可能抛出的各类异常,也没有兼容用户主动取消授权的场景,当权限校验失败、网络异常、用户取消授权时,方法抛出异常后无后续处理逻辑,前端就会一直停在加载状态。
  • 依赖API未开启:联系人只读权限对应需要提前在Google Cloud控制台开启People API,未开启该API时权限校验会直接失败,触发「Google API无法正常运行」的报错。
  • 基础配置不匹配:Firebase绑定的Google Cloud项目配置错误,比如Android端SHA1签名、包名和OAuth客户端ID配置不一致,iOS端bundle ID配置错误,也会导致授权流程卡住。
  • 网络环境限制:运行设备的网络无法正常访问Google服务,也会导致授权流程无法推进。
修复方案
  1. 完成权限和API前置配置
  • 进入Google Cloud对应项目的「API和服务」页面,搜索开启People API,这是使用contacts.readonly权限的必要前提。
  • 进入「OAuth同意屏幕」配置页:测试阶段将所有需要参与测试的Google账号添加到「测试用户」列表,不在列表内的账号无法使用敏感权限;正式上线阶段提交权限申请,完成Google官方的敏感权限审核后,即可面向所有用户开放该权限。
  1. 优化代码补充异常和边界处理
    修改后的参考代码如下:
Future googleSignIn() async {
  try {
    final GoogleSignInAccount? googleUser = await GoogleSignIn(
        scopes: ['https://www.googleapis.com/auth/contacts.readonly']).signIn();
    // 处理用户主动取消授权的场景
    if (googleUser == null) {
      // 此处添加关闭加载弹窗、提示用户取消登录的业务逻辑
      return;
    }
    final GoogleSignInAuthentication googleAuth =
        await googleUser.authentication;
    final credential = GoogleAuthProvider.credential(
      accessToken: googleAuth.accessToken,
      idToken: googleAuth.idToken,
    );
    await FirebaseAuth.instance.signInWithCredential(credential);
    // 此处添加登录成功后的业务逻辑
  } catch (e) {
    // 打印错误日志便于排查,同时关闭加载弹窗、给用户弹出失败提示
    print('Google登录错误信息: $e');
    // 此处添加登录失败的业务处理逻辑
  }
}
  1. 校验基础配置信息
    确认Firebase项目绑定的Google Cloud项目配置正确,Android端的SHA1签名、包名和Google Cloud控制台OAuth客户端ID的配置完全一致,iOS端的bundle ID配置无误。
  2. 确认运行设备的网络可以正常访问Google服务。

内容的提问来源于stack exchange,提问作者Tanmay Mondal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:48:04