Android - “连接到 Google Play”仍然给出错误代码 4?

Posted

技术标签:

【中文标题】Android - “连接到 Google Play”仍然给出错误代码 4?【英文标题】:Android - "Connecting to Google Play" still gives Error Code 4? 【发布时间】:2015-05-09 06:05:12 【问题描述】:

我对 Google API 和 GoogleApiClient 类还有些陌生,所以我关注了 this tutorial,希望能够进行足够的设置以显示排行榜。

目前我已将此代码实现到我的游戏活动中。

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();
        
    

实际上,这确实会弹出一个小意图,上面写着“连接到 Google Play”,然后是一个帐户选择。符合预期。

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

根据ConnectionResult,4 表示需要登录

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

干杯!

【问题讨论】:

【参考方案1】:

如果它在本地构建中连接并正常工作,但您从 Play 商店下载的版本不起作用(它会导致登录错误),那么您就是这样修复它的。当您上传 APK 时,您使用 SHA1 作为上传版本。在您上传 APK 后,Google 会为您提供不同的 SHA1。 您需要将此 NEW SHA1 输入到您的凭证中。

请按以下步骤操作:

    转到 Google 开发者控制台 单击所有应用程序 > 您的应用程序 转到发布管理 > 应用签名 注意有一个“上传证书”和一个“应用程序签名证书”。 从 APP 签名证书中复制 SHA1。 (毕竟密钥库的不严谨,他们没有在文档中提到这部分!) 在游戏服务中创建一个新的连接应用程序,然后 将应用签名证书中的 SHA1 粘贴到此处,并确保您的包名称正确。

现在一切都应该正常了!我不明白为什么没有明确记录。

【讨论】:

【参考方案2】:

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

    您的应用程序中的 appId 与控制台中的应用程序 id 匹配。

    有一个链接到您的游戏的 android 应用程序。

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

您可以在https://developers.google.com/games/services/android/quickstart#step_2_set_up_the_game_in_the_dev_console 查看执行所有这些操作的说明

【讨论】:

是否需要上传实际的 APK 才能进行测试?关于“链接应用程序”。 不,您不需要上传您的 apk - 链接应用程序集(在 URL 中概述)将您在游戏控制台中的游戏元数据关联到应用程序(具有 SHA-1指纹。)【参考方案3】:

固定。

在得到无数SIGN_IN_REQUIRED之后,我设法分配了很多RESULT_APP_MISCONFIGURED

解决方案?添加 ProGuard 异常 非常重要,如 here 所述。

【讨论】:

【参考方案4】:

尽管问到最初的问题已经四年了,但我想加上我的 2c 价值,因为我遇到了同样的问题,而上述建议都没有为我解决这个问题。

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

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

【讨论】:

【参考方案5】:

确保您使用 SHA1 密钥。

命令“keytool -list -keystore [调试密钥库的路径]”可能会显示 SHA-256 密钥。

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

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

image: get your SHA1 key

【讨论】:

【参考方案6】:

在我的情况下,我使用了错误的 SHA1,因为谷歌为我创建了一个。我谷歌控制台,当你打开一个应用程序/游戏去

-> Setup
-> App Integrity

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

【讨论】:

以上是关于Android - “连接到 Google Play”仍然给出错误代码 4?的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

android 21 是啥版本

Android逆向-Android基础逆向(2-2)

【Android笔记】android Toast

图解Android - Android核心机制

Android游戏开发大全的目录