Застрял и не могу войти после удаления данных Google Play. - PullRequest
0 голосов
/ 28 июня 2018

Я использую Сервисы Google Play для моей игры libgdx. Я создал несколько фиктивных достижений для тестирования и позже хотел их удалить. На моем телефоне я зашел в Google Play Игры -> Настройки -> Удалить данные Play Игры -> Удаленные данные из моей игры.

Вернувшись в свою игру, я заметил, что игра думала, что я все еще вошел в систему. Я использую следующий код, чтобы проверить, вошел ли пользователь в систему:

@Override
public boolean isSignedIn(){
    return GoogleSignIn.getLastSignedInAccount(androidLauncher) != null;
}

Если пользователь не вошел в систему, я пытаюсь войти в него без уведомления

private void signInSilently() {

    signedInClient.silentSignIn().addOnCompleteListener(androidLauncher,
        new OnCompleteListener<GoogleSignInAccount>() {
            @Override
            public void onComplete(@NonNull Task<GoogleSignInAccount> task) {
                if (task.isSuccessful()) {
                    signedInAccount = task.getResult();
                }
            }
        });
}

Если я не могу подписать их молча. Я создаю новое намерение, чтобы они вручную вошли в систему и дали доступ к приложению:

    GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
    if (result.isSuccess()) {
        signedInAccount = result.getSignInAccount();
        showSignedInDialog();
    } 

Проблема в том, что после удаления данных Play Games мой метод isSignedIn всегда возвращает значение true. Однако, когда я пытаюсь сделать что-то вроде отображения достижений, я получаю следующую ошибку:

com.google.android.gms.common.api.ApiException: 4: The user must be signed in to make this API call.

Код для отображения достижений:

@Override
public void showAchievements(){

    androidLauncher.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            if (isSignedIn()) {
                loadingView.showLoadingView();
                Games.getAchievementsClient(androidLauncher, signedInAccount)
                    .getAchievementsIntent()
                    .addOnSuccessListener(new OnSuccessListener<Intent>() {
                        @Override
                        public void onSuccess(Intent intent) {                                    
                             androidLauncher
                                    .startActivityForResult(intent, RC_ACHIEVEMENT_UI);
                        }
                    })
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Logger.error(e);
                        }
                    })
            } 
        }
    });
}

Мне любопытно, почему это происходит. Согласно документации , мой метод isSignedIn должен работать правильно. Однако, поскольку я получаю ошибку, которую я получаю, когда я на самом деле пытаюсь сделать вызов API, кажется, что метод не работает. Я могу только предположить, что все это происходит от того, что я удалил свои данные игр, так как до этого момента все работало нормально.

Что-то еще, что я хочу отметить - Я попытался, чтобы мой метод isSignedIn возвратил false для принудительного входа в систему без вывода сообщений. Мой вход в систему без вывода сообщений возвратил следующую ошибку:

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

Я провел небольшое исследование и нашел сообщение об ошибке . Похоже, код состояния 8 Внутренняя ошибка . Google, по крайней мере, знает о проблеме .

Обновление : после того, как мой метод isSignedIn вернул false, и после отключения моего тихого входа я принудительно выполнил вход в систему. После принудительного входа и входа в систему он теперь работает , Однако я не смогу сделать это для пользователей, если они столкнутся с той же проблемой. Они застрянут, так как метод isSignedIn, кажется, всегда возвращает true после удаления данных Play Games.

1 Ответ

0 голосов
/ 08 августа 2018

У меня была похожая проблема, и для меня сработало включение API Google Drive для моего проекта. Не уверен, почему это сработало, но это сработало.

Перейдите к https://console.developers.google.com/apis,, затем откройте пункт меню «Библиотека». Оттуда, найдите «Drive» и нажмите на «Google Drive API» пункт. Вы должны увидеть кнопку включения.

...