Android - "Connecting to Google Play" 仍然给出错误代码 4?

Android - "Connecting to Google Play" still gives Error Code 4?

我对 Google API 和 GoogleApiClient class 还是有点陌生​​,所以我关注了 this tutorial 希望能够充分设置以显示排行榜。

目前我已经在我的游戏中实现了这段代码activity。

public void onConnectionFailed(ConnectionResult arg0) {
    Log.d("fes", "error " + arg0.getErrorCode());
    if (!isGooglePlayIntentOpen && arg0.hasResolution()) {
        try {
            isGooglePlayIntentOpen = true;
            startIntentSenderForResult(arg0.getResolution()
                    .getIntentSender(), 10, null, 0, 0, 0);
        } catch (SendIntentException ex) {
            isGooglePlayIntentOpen = false;
            this.getApiClient().connect();
        }
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 10) {
        isGooglePlayIntentOpen = false;
        if (!this.getApiClient().isConnecting() && !this.getApiClient().isConnected()) {
            this.getApiClient().connect();
        }
    }
}

事实上,这确实会弹出一个小意图,上面写着 "Connecting to Google Play",然后选择一个帐户。符合预期。

但是,每次调用 onConnectionFailed 时,错误代码似乎是 4

根据 ConnectionResult,4 表示 需要登录

什么给了?即使在多个帐户上尝试 "sign in" 之后,我仍然会收到相同的错误代码。我是否需要以某种方式将登录结果传递给我的 GoogleApiClient

干杯!

听起来您的游戏可能没有在 Play 游戏机中正确设置。要检查的一些事项:

  1. 您的应用程序中的 appId 与控制台中的应用程序 ID 匹配。

  2. 有一个链接到您的游戏的 Android 应用程序。

  3. 链接的应用程序已将包配置为与您的 AndroidManifest.xml
  4. 中的包相匹配
  5. 链接的应用程序已获得授权,并且具有与您用于签署应用程序的密钥库相匹配的 SHA1 指纹。
  6. 确保您用于登录的用户 ID 在您游戏的测试人员列表中。
  7. 如果您正在使用 SavedGamesAPI,请确保它已在控制台上启用。

您可以在 https://developers.google.com/games/services/android/quickstart#step_2_set_up_the_game_in_the_dev_console

查看执行所有这些操作的说明

已修复。

获得无数后SIGN_IN_REQUIRED我分配了很多RESULT_APP_MISCONFIGURED

解决办法?添加 ProGuard 异常 非常重要,如 here.

所述

如果它在本地构建中连接并正常工作,但您从 Play 商店下载的版本不工作(它给出登录错误),这就是您修复它的方法。当您上传 APK 时,您使用 SHA1 作为上传版本。 Google 在您上传您的 APK 后给您一个不同的 SHA1。 您需要将这个新的 SHA1 输入到您的凭据中。


按照以下步骤操作:

  1. 转到Google开发者控制台
  2. 单击所有应用程序 > 您的应用程序
  3. 转到发布管理 > 应用签名
  4. 注意有一个 "Upload Certificate" 和一个 "App Signing Certificate"。
  5. 从应用程序签名证书中复制 SHA1。 (在所有这些密钥库死板的代码之后,他们没有在文档中提及这部分!)
  6. 在游戏服务中创建一个新的连接应用,然后 将应用程序签名证书中的 SHA1 粘贴到此处,并确保您的程序包名称正确无误。

现在一切正常!我不明白为什么没有清楚地记录下来。

即使距离提出最初的问题已经四年了,我还是想加上我的 2c 价值,因为我遇到了同样的问题,none 上述建议为我解决了这个问题。

对我来说解决这个问题的是意识到当你的应用程序发布到 Google Play 商店时你需要一个 SHA1 指纹,而当你调试时需要一个不同的指纹。第一个是在 Google Play 控制台中设置应用时自动创建的,并且是唯一的,但在您发布应用之前不会使用。您必须自己创建调试器,并且对于您正在调试的所有应用程序都是一样的。凭据的详细信息存储在您的 Google API 控制台中。

总而言之,您拥有的每个使用 Google Play 服务的应用都应该在 Google API 控制台中有两个 OAuth 客户端 ID,一个用于调试,一个用于发布版本.如何做到这一点在文档 here.

中有充分的解释

确保使用 SHA1 密钥。

命令 "keytool -list -keystore [path to debug keystore]" 可能会显示 SHA-256 密钥。

要获取 SHA1 密钥,您可以按照以下步骤操作:

  1. 打开您的项目
  2. 点击“Gradle”(右侧)
  3. 选择你的模块
  4. 任务 -> android ->(双击)signingReport

image: get your SHA1 key

我的情况是我使用了错误的 SHA1,因为 google 为我创建了一个。我 google 控制台,当你打开一个 app/game 转到

-> Setup
-> App Integrity

在这里您可以看到“应用签名密钥证书”和“上传密钥证书”。 当我从“App signing key certificate”添加 SHA1 时,sing in 开始工作。