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

请求Google Play Games API游戏权限范围时ResultCode为0的问题求助

解决Google Play Games API权限请求失败的问题

我来帮你排查这个Google Play Games API权限请求的问题,结合你的描述和代码片段,下面是几个关键的排查和解决步骤:

1. 核对Google Cloud & Play Console的核心配置

这是最容易出问题的环节,很多权限请求失败都源于配置不匹配:

  • 确保你在代码中使用的Server Client Id是Google Cloud Console中Web应用类型的客户端ID,而非Android客户端ID(requestServerAuthCode和requestIdToken都需要Web类型的ID)
  • 检查Google Play Console中,你的应用是否已正确关联对应的Google Cloud项目,并且启用了Google Play Games服务
  • 进入Google Cloud Console的OAuth同意屏幕设置,确认已勾选游戏相关的权限范围(比如games权限),如果是测试阶段,务必将测试设备的Google账号添加到测试用户列表中

2. 修正GoogleSignInOptions的构建逻辑

虽然DEFAULT_GAMES_SIGN_IN应该包含必要的游戏权限范围,但显式声明权限有时能解决隐式配置的问题,修改你的代码如下:

// 显式定义游戏权限范围
Scope gamesScope = new Scope("https://www.googleapis.com/auth/games");

GoogleSignInOptions gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
    .requestIdToken("你的Web类型Server Client Id")
    .requestServerAuthCode("你的Web类型Server Client Id")
    .requestEmail()
    .requestScopes(gamesScope) // 显式添加游戏权限
    .build();

GoogleSignInClient mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
// 启动登录流程
startActivityForResult(mGoogleSignInClient.getSignInIntent(), RC_SIGN_IN);

3. 再次验证签名证书指纹

即使你重新签名了,也需要确认以下两点:

  • 用于构建APK的密钥库的SHA-1指纹(包括debug和release版本)已经添加到Google Cloud Console对应的Android客户端ID中
  • 如果你的应用使用了Google Play应用签名(App Signing by Google Play),需要将Google Play Console中显示的发布证书指纹也添加到Cloud Console的客户端ID配置里

4. 确保Google Play Games服务初始化正常

在发起登录请求前,先验证Play Games服务的可用性,避免因服务未就绪导致的权限问题:

// 检查Play Games服务是否可用
GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
int resultCode = apiAvailability.isGooglePlayServicesAvailable(this);

if (resultCode != ConnectionResult.SUCCESS) {
    if (apiAvailability.isUserResolvableError(resultCode)) {
        // 提示用户修复服务问题
        apiAvailability.getErrorDialog(this, resultCode, 9000).show();
    } else {
        Toast.makeText(this, "设备不支持Google Play Games服务", Toast.LENGTH_SHORT).show();
    }
    return;
}

// 服务可用,再启动登录流程
startActivityForResult(mGoogleSignInClient.getSignInIntent(), RC_SIGN_IN);

5. 排查登录回调的错误信息

在登录结果回调中捕获具体错误,能精准定位问题:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RC_SIGN_IN) {
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        try {
            GoogleSignInAccount account = task.getResult(ApiException.class);
            // 登录成功后,初始化Games客户端
            Games.getGamesClient(this, account).signIn();
        } catch (ApiException e) {
            // 打印错误码和详情,常见错误码:
            // 12500:客户端ID/指纹不匹配;10:用户拒绝授权;7:Play服务版本过低
            Log.e(TAG, "登录失败,错误码: " + e.getStatusCode() + ",详情: " + e.getMessage());
        }
    }
}

先从配置层面入手排查,这往往是问题的根源,再逐步验证代码和服务状态,应该能解决权限请求失败的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:48:50