Google Play Games API возвращает SIGN_IN_REQUIRED - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь реализовать автоматизацию входа игрока в игры Google Play в моем приложении для Android. Во-первых, как уже упоминалось здесь , я пытаюсь войти в систему без вывода сообщений:

@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). Поэтому в этом случае я пытаюсь войти с помощью пользовательского интерфейса:

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). Как я могу получить этот код, когда я пытаюсь войти с помощью намерения? Итак, мое приложение находится в бесконечном цикле, потому что onResume вызывается каждый раз, когда моя активность загружается после получения результата, и каждый раз, когда код состояния - CommonStatusCodes.SIGN_IN_REQUIRED. Так в чем же проблема? В Google samples нет информации о том, как я могу обработать автоматический вход, только руководство с кнопками входа. Но Google рекомендует использовать автоматизированный вход. Пожалуйста, помогите всем понять, что здесь не так.

Ответы [ 2 ]

0 голосов
/ 09 июля 2018

Неправильный идентификатор клиента OAuth 2.0 для отладочной версии моего приложения! Не знаю, почему в этой ситуации есть код состояния SIGN_IN_REQUIRED, это действительно сбивает с толку!

0 голосов
/ 08 июля 2018

Вы не должны запускать экран входа в систему с помощью метода onResume. Это тихий вход в систему, который работает, если пользователь хочет (нажав кнопку). Вот почему примеры показывают это только так.

...