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

Android游戏Google Sign In仅支持单个账号登录问题求助

排查Google Sign In切换测试账号时IdToken为空的问题

我来帮你梳理这个问题,结合你的代码和描述,核心问题应该出在Google Sign In的权限配置上,咱们一步步来排查:

1. 修正GoogleSignInOptions的配置(最关键)

你当前使用的GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN是游戏服务的默认配置,它只请求了Google Play游戏服务的相关权限(比如排行榜、成就),但并没有请求Firebase身份验证所需的IdToken。这就是为什么只有主账号(可能早期配置时附带了权限)能拿到IdToken,其他测试账号拿不到的原因。

你需要显式在配置中添加requestIdToken,传入Firebase的Web客户端ID:

private void startSignInIntent() {
    // 构建包含IdToken请求的配置
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
            .requestIdToken(getString(R.string.default_web_client_id)) // 新增这一行
            .build();

    Intent intent = GoogleSignIn.getClient(this, gso).getSignInIntent();
    startActivityForResult(intent, RC_SIGN_IN);
}

注意:default_web_client_id需要在你的strings.xml中配置,这个值可以从Firebase控制台的项目设置 → 通用 → Web应用里找到对应的OAuth客户端ID。

2. 确认测试账号在Firebase的权限

即使你已经把账号添加到Google Play游戏服务的测试账号列表,还要确保这些账号在Firebase控制台中被标记为测试用户:

  • 打开Firebase控制台 → 进入你的项目 → 点击身份验证 → 切换到测试用户标签
  • 添加你的测试账号邮箱,确保它们能正常通过Firebase的身份验证校验

3. 检查OAuth客户端ID的关联

去Google Cloud Console(可以从Firebase控制台的项目设置 → 服务账号跳转过去),确认:

  • 你的Android客户端ID和Web客户端ID都属于同一个项目
  • Web客户端ID的配置没有错误,确保它和你填入strings.xml的default_web_client_id完全一致

4. 清除旧会话缓存

有时候设备上的旧登录会话会干扰新账号的授权,让测试设备做以下操作:

  • 清除你的游戏应用缓存和数据
  • 清除Google Play服务的缓存
  • 进入Google账号的安全设置,找到你的游戏应用,撤销它的授权权限,然后重新尝试登录

5. 验证测试账号的游戏服务状态

确保测试账号已经完成了Google Play游戏服务的首次授权流程:

  • 用测试账号登录设备后,打开Google Play游戏应用,确保账号状态正常
  • 第一次登录你的游戏时,会弹出授权请求,务必允许所有权限

按照以上步骤调整后,应该就能解决测试账号IdToken为空的问题了。

内容的提问来源于stack exchange,提问作者Nicolas Zimmermann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:12:58