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

Flutter集成Google Play Games登录报ApiException:10 配置SHA-1仍报错

Google Play Games 登录报错 ApiException: 10 解决方案

错误码10属于DEVELOPER_ERROR,本质是客户端请求的签名、包名、客户端ID和Google后台登记的信息不匹配。在你已经完成SHA-1配置、OAuth客户端创建、同意屏幕发布的前提下,重点排查以下几个绝大多数人会踩的遗漏点:

  • 删掉代码里多余的配置参数
    你当前代码里手动传入了clientId和hostedDomain,这是触发10错误的最高频原因。使用SignInOption.games(即Google Play Games登录)模式时,Google服务会自动从应用和Play Games后台的关联配置里拉取合法的客户端ID,不需要手动指定。hostedDomain仅适用于Google Workspace托管域的账号登录场景,普通C端游戏账号登录不需要配置这个参数,传值错误会直接被服务端判定为非法请求。

  • 补全所有要求的SHA-1指纹
    不要只加本地发布keystore的SHA-1:

    • 本地调试必须额外添加debug.keystore的SHA-1指纹
    • 如果开启了Google Play应用签名(Play App Signing),必须同时在Google Cloud/Firebase控制台、Play Games控制台添加Google Play后台展示的应用签名证书SHA-1和上传证书SHA-1,仅添加本地上传keystore的指纹会导致从Play商店安装的包100%触发10错误
    • 新增SHA-1后最长需要2小时同步生效,不要刚加完就测试
  • 确认Play Games服务配置完整且已发布
    游戏登录不能只配Google Cloud/Firebase侧的OAuth客户端,必须在Google Play控制台完成Play Games服务的配置:

    1. 完成Play Games服务基础信息填写,关联和你安装包包名一致的应用
    2. 为对应构建变体创建登录凭据,凭据绑定的包名、SHA-1必须和你测试的安装包完全匹配
    3. 确认Play Games服务不是草稿状态,已完成发布
    4. 如果服务还在测试阶段,必须把你用来测试的Google账号加到Play Games测试者列表、同时加到OAuth同意屏幕的测试用户列表里,哪怕是开发者自己的账号也需要加
  • 清理缓存避免旧配置干扰
    每次改完配置重新测试前,先卸载设备上已安装的测试包,同时清除Google Play服务、Google Play游戏的应用缓存,本地残留的旧凭据缓存会导致配置更新后依然报错。

修正后的代码参考

Future<AuthCredential?> getGoogleCredential() async {
  print('Inside getGoogleCredential');
  final GoogleSignIn googleSignIn = GoogleSignIn(
    signInOption: SignInOption.games,
    scopes: [GamesApi.gamesScope],
    // 移除手动传入的clientId、hostedDomain参数
  );
  print('google Sign in currentUser: ${googleSignIn.currentUser}');

  final GoogleSignInAccount? googleUser =
      await googleSignIn.signIn().catchError((error) {
    print('Failed to sign in with Google Play Games: $error');
    return null;
  });

  print('google User is ${googleUser}');

  if (googleUser == null) {
    print('Failed to sign in with Google Play Games.');
    return null;
  }

  final GoogleSignInAuthentication googleAuth =
      await googleUser.authentication;
  final credential = GoogleAuthProvider.credential(
    accessToken: googleAuth.accessToken,
    idToken: googleAuth.idToken,
  );

  return credential;
}

Future signIn() async {
  final AuthCredential? googleCredential = await getGoogleCredential();
  if (googleCredential != null) {
    await FirebaseAuth.instance.signInWithCredential(googleCredential);
  } else {
    print('Trying signInAnonymously');
    await FirebaseAuth.instance.signInAnonymously();
  }
}

快速定位技巧:可以临时把signInOption改成SignInOption.standard测试,如果标准Google登录能正常唤起、只有games模式报错,问题100%出在Play Games服务侧的配置,和通用OAuth配置无关。

内容的提问来源于stack exchange,提问作者Utkarsh Karnik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 20:36:21