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
相关产品推荐
相关产品推荐

