Google Play游戏API返回SIGN_IN_REQUIRED

时间:2018-07-05 14:31:46

标签: java android google-signin google-play-games

我正在尝试在我的Android应用中实现玩家自动登录Google Play游戏。首先,如here所述,我尝试静默登录:

@Override
protected void onResume() {
    super.onResume();
    signInSilently();
}

private void signInSilently() {
    mGoogleSignInClient.silentSignIn().addOnCompleteListener(this, task -> {
        if (task.isSuccessful())
            //everything ok
        else {
            final ApiException exception = (ApiException) task.getException();
            if (BuildConfig.DEBUG)
                Log.d(TAG, "Silent Sign In failure: ", exception);
            if (exception.getStatusCode() == CommonStatusCodes.SIGN_IN_REQUIRED)
                startSignInIntent();
        }
    });

每次我都收到代码4(CommonStatusCodes.SIGN_IN_REQUIRED)的异常。因此,在这种情况下,我尝试使用ui登录:

private void startSignInIntent() {
    startActivityForResult(mGoogleSignInClient.getSignInIntent(), RC_SIGN_IN);
}

@Override
protected void onActivityResult(int request, int response, Intent data) {
    super.onActivityResult(request, response, data);
    if (request == RC_SIGN_IN) {
        final GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        if (result.isSuccess()) {
            // everything is ok, get account from result
        } else if (result.getStatus().hasResolution()) {
            resolveManually(result.getStatus());
        } else {
            String message = result.getStatus().getStatusMessage();
            if (BuildConfig.DEBUG)
                Log.d(TAG, "status code" + result.getStatus().getStatusCode());
            if (message == null || message.isEmpty()) {
                message = "other error";
            }
            new AlertDialog.Builder(this).setMessage(message)
                    .setNeutralButton(android.R.string.ok, null).show();
        }
    }
}

在这里,每当我收到带有其他错误的消息时!状态码还是4(CommonStatusCodes.SIGN_IN_REQUIRED)。尝试使用Intent登录时如何获取此代码?因此,我的应用处于无限循环状态,因为每次在收到结果后加载我的活动,并且每次状态代码为CommonStatusCodes.SIGN_IN_REQUIRED时,都会调用onResume。那么,问题出在哪里呢? 在Google samples中,没有任何信息说明如何处理自动登录,只有手动操作和带有登录按钮的信息。但是Google recommends可以使用自动登录。请帮助任何人了解这里出了什么问题。

2 个答案:

答案 0 :(得分:1)

一定不要从onResume方法启动登录屏幕。这是一种无提示登录,如果用户需要(通过点击按钮),则可以使用。这就是为什么示例仅以此方式显示它的原因。

答案 1 :(得分:0)

我的应用的调试版本的OAuth 2.0客户端ID错误!不知道为什么在这种情况下会有SIGN_IN_REQUIRED状态代码,这确实令人困惑!