Google Play Games Android 登录出现错误代码 4

Posted

技术标签:

【中文标题】Google Play Games Android 登录出现错误代码 4【英文标题】:Google Play Games Android Sign In Getting Error Code 4 【发布时间】:2019-05-29 08:44:48 【问题描述】:

我目前正在开发一个 android 应用程序,我想在其中使用 Google Play 游戏服务(成就、排行榜等)。经过多次迭代,我终于得到了能够显示 Google Play 游戏登录提示 的代码。现在的问题是,用户登录后需要一段时间,然后抛出错误代码 4,错误消息为空。经过大量研究后,并没有真正帮助我解决这个问题。

我曾尝试直接从 Android Studio 中启动它,手动或通过 Google Play 安装应用程序,都在多台设备上,但没有任何效果。

如果需要,这里有一些代码:

private static GoogleSignInClient mGoogleSignInClient;

...

@Override
protected void onCreate(Bundle savedInstanceState) 
    ...

    mGoogleSignInClient = GoogleSignIn.getClient(this, new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN).requestIdToken(getResources().getString(R.string.app_id)).build());

    signInSilently(); // Can't be tested yet.
    // isSignedIn() and loginDeclined are both false
    if(!isSignedIn() && !loginDeclined) startSignInIntent();


...

private void startSignInIntent() 
    startActivityForResult(mGoogleSignInClient.getSignInIntent(), RC_SIGN_IN);
    loginDeclined = true;


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) 
    super.onActivityResult(requestCode, resultCode, intent);
    // resultCode = 0

    if (requestCode == RC_SIGN_IN) 
        Task<GoogleSignInAccount> task =
                GoogleSignIn.getSignedInAccountFromIntent(intent);

        try 
            GoogleSignInAccount account = task.getResult(ApiException.class);
            // Now this never happens :(
            System.out.println("SUCCESS!");
         catch (ApiException apiException) 
            System.out.println(apiException.getStatusCode() + " + " + apiException.getMessage());
            // statusCode is 4, message is "4: "

            String message = apiException.getMessage();
            if (message == null || message.isEmpty()) 
                message = "Error signing in to Google Play Games";
            

            new android.app.AlertDialog.Builder(this)
                    .setMessage(message)
                    .setNeutralButton(android.R.string.ok, null)
                    .show();
        
    

【问题讨论】:

我遇到了同样的错误,我检查了我的 google playconsole gameservices 项目是否使用相同的 SHA1,这就是罪魁祸首。确保您的应用 SHA1 和 playconsole gameservices 项目具有相同的 SHA1 【参考方案1】:

确保您使用 SHA1 密钥。

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

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

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

image: get your SHA1 key

【讨论】:

【参考方案2】:

在互联网上搜索了几个小时并检查了 google play 游戏服务文档 (https://developers.google.com/games/services/android/troubleshooting) 中故障排除部分的每一步后,我填写了“OAuth 同意屏幕”表格,它终于奏效了。

    登录 Google Play 控制台 转到游戏服务 去你的游戏 在“游戏详情”页面一直向下滚动到链接的 API 控制台项目 点击链接的 API 控制台项目的链接 点击左侧栏中的“OAuth 设置屏幕” 选择外部 填写表格并上传图标 发送验证

之后,我的 Google Play 游戏服务登录立即生效。

【讨论】:

【参考方案3】:

请检查以下详细信息以了解 GPG 登录问题:

确保您已按照 instructions 创建您的客户端 ID 和 configure the games services.

清单中的元数据标签应与应用程序的数字 ID 匹配,并且应仅包含数字。还要仔细检查您的包裹名称。不要使用示例应用程序包名称。用你自己的。

您用来签署游戏的证书应与与您的客户端 ID 关联的证书指纹相匹配。

最后一件重要的事情,检查测试帐户是否已启用。我一直忘记这一步。

确保应用签名证书中的指纹与游戏服务中链接的应用相匹配。您还可以通过导航到您的 Google API 控制台 -> 选择您的应用程序 -> 凭据 -> OAuth 2.0 客户端 ID 来验证这些详细信息。

我注意到的另一件事是,如果应用程序已发布,那么您需要从 Play 商店安装应用程序才能使这些凭据正常工作。如果该应用尚未发布,请确保您使用的是调试指纹并且与您的游戏服务(调试指纹)匹配。

只要你有这些指纹,你应该没问题。如果您仍然遇到问题,我建议您通过代码实验室获得有关如何扩展现有 Unity 游戏以在 Android 设备上运行并集成 Play Game Services 的分步帮助。 https://codelabs.developers.google.com/codelabs/playservices_unity/index.html?index=..%2F..%2Findex#0

或者这里是帮助快速测试的示例应用程序 - https://github.com/playgameservices/android-basic-samples。

您还可以通过 logcat 帮助我们更好地理解问题。

【讨论】:

【参考方案4】:

最近,当我尝试使用保存的游戏 api 将用户数据写入他的驱动器时,我遇到了这个问题。我发现了问题所在。以下是我的观察,希望对一般情况有所帮助:

    您可以通过在 Play 控制台中添加测试人员,在调试版本中测试 Play Games api。 如果您想在签名的 apk 上进行测试,那么您需要使用“app.keystore”密钥库文件生成 SHA1 密钥,并将具有此 SHA1 密钥的 Android 应用程序添加到特定于该应用程序的玩游戏服务中。现在您将能够获得预期的结果。(这是我的问题) 如果要将数据存储在用户驱动器上,则需要在玩游戏服务中启用“已保存游戏”api。

【讨论】:

【参考方案5】:

在我的情况下,一切看起来都很好,但得到错误代码,然后我检查 Google Play Console> Play Game Service 并发布更改。关键是发表我做的东西。

【讨论】:

以上是关于Google Play Games Android 登录出现错误代码 4的主要内容,如果未能解决你的问题,请参考以下文章

Google Play Games Android 登录出现错误代码 4

是否可以将 Google Play Games Services Realtime Multiplayer 集成到适用于 Android 和 iOS 的 LibGDX 中?

Google Play Games RealTime Multiplayer 添加图片

google play games:从邀请ID中获取请求的玩家总数

Google Play Games Services Leaderboard API,看不到其他玩家的分数

100% “google.play.games.games.v1.Applications.RecordApplicationActivity” 一个月以来