谷歌游戏服务登录错误:ApiException:4。

5
我正在开发一款在Android Studio上使用Google Play Games服务的应用程序,包括成就和排行榜,但是我在尝试登录时遇到了错误。 我遵循了文档中的说明,所有密钥和OAuth代码都匹配,但我仍然在尝试登录时收到此错误信息:

com.google.android.gms.common.api.ApiException: 4: 4:

我已经到处查找答案,重新启动了所有凭据,取消发布并重新发布了所有新内容,检查了所有ID。 如果有人能给我一些建议,我将不胜感激。
com.google.android.gms.common.api.ApiException: 4: 4: 
    at com.google.android.gms.common.internal.ApiExceptionUtil.fromStatus(Unknown Source)
    at com.google.android.gms.common.internal.zai.zaf(Unknown Source)
    at com.google.android.gms.common.internal.zaj.onComplete(Unknown Source)
    at com.google.android.gms.common.api.internal.BasePendingResult.zaa(Unknown Source)
    at com.google.android.gms.common.api.internal.BasePendingResult.setResult(Unknown Source)
    at com.google.android.gms.auth.api.signin.internal.zzj.zzc(Unknown Source)
    at com.google.android.gms.auth.api.signin.internal.zzt.dispatchTransaction(Unknown Source)
    at com.google.android.gms.internal.auth-api.zzd.onTransact(Unknown Source)
    at android.os.Binder.execTransact(Binder.java:461)

这是从Google文档中用于登录的代码。

private void startSignInIntent() {
    GoogleSignInClient signInClient = GoogleSignIn.getClient(
        this, GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN
    );
    Intent intent = signInClient.getSignInIntent();
    startActivityForResult(intent, RC_SIGN_IN);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RC_SIGN_IN) {
        GoogleSignInResult result =
            Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        if (result.isSuccess()) {
            // The signed in account is stored in the result.
            GoogleSignInAccount signedInAccount = result.getSignInAccount();
        } else {
            String message = result.getStatus().getStatusMessage();
            if (message == null || message.isEmpty()) {
                message = getString(R.string.signin_other_error);
            }
            new AlertDialog.Builder(this)
                .setMessage(message)
                .setNeutralButton(android.R.string.ok, null)
                .show();
        }
    }
}
3个回答

4
当我遇到这个问题时,我需要做两件事情:
  1. 使用我的发布密钥(通常)签署我的应用程序,并使用adb将应用程序部署到我的手机上
  2. 转到console.developers.google.com,在凭证部分下,转到OAuth 2.0客户端ID,找到我的应用程序,单击它,然后输入您的发布密钥中的SHA1密钥。 (请参考此处说明)
对于其他人也有价值的是,需要在执行silentSignIn之前用OP正在执行的内容进行操作。OP,您不必担心这一点。
编辑:无需理会,似乎是silentSignIn导致了OP的问题。
第二次编辑:我认为这个答案有些错了。我认为您可以在这里找到正确的答案:https://dev59.com/FzQBtIcB2Jgan1zn1ApP#56463302

1
你好,我尝试了您的建议,但到目前为止都没有运气。您有没有其他方法呢?我仍然无法登录。这让我很疯狂。不管怎样还是谢谢。 - BigBoiVladica
我已经等了大约3个小时。当我尝试登录时,我会得到一个带有动画的绿色弹出窗口,但是当动画结束时,我会得到上面的错误代码。尽管我尝试了我上面提到的所有事情,我仍然得到相同的错误。此外,我之前使用Google Play游戏服务发布过应用程序(这些服务运行良好),并且我从未遇到过这种类型的错误。我不知道我会一直尝试直到成功。 - BigBoiVladica
我正在onCreate方法中执行silentSignin,所以当用户进入应用程序时,如果没有人登录,它就会被触发。谢谢建议,我现在会尝试一下 :D。 - BigBoiVladica
很高兴你们在聊天中进行了一些讨论,但是你还记得解决方案吗?能否分享给社区?谢谢!(我似乎处于完全相同的情况...) - Orabîg
@Orabîg 这个答案可能会对你有所帮助。我不记得我们在聊天中具体讨论了什么。https://dev59.com/FzQBtIcB2Jgan1zn1ApP#56463302 - retodaredevil
显示剩余6条评论

1
如果您正在使用Play Games Services v2 SDK,
implementation 'com.google.android.gms:play-services-games-v2:17.0.0'

当我尝试使用GoogleSignIn API和Play Games Services v2 SDK进行登录时,出现了以下错误:
使用v2 SDK,您不能再使用GoogleSignIn API进行登录或退出(参见移除登录和退出调用)。
登录将在游戏启动时自动触发(第一次),或者您可以使用GamesSignInClient.signIn()手动触发它(参见迁移到Play Games Services登录v2)。
因此,您的代码可能需要进行修改:
private void startSignInIntent() {
    PlayGames.getGamesSignInClient(this).signIn();
}

(如果您使用 signInSilently,您可以参考我的另一个答案获取更多信息。)

1
我将我的app_id添加到资源文件夹中,并在清单文件中使用@string/app_id,现在从Api获得了一个成功的响应,将进一步测试以确定结果是否有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接