java.lang.IllegalStateException: GoogleApiClient еще не подключен

Я пытаюсь добавить достижения в свою игру, используя игровые сервисы Google Play. Активность в моей игре, которая отвечает за выдачу достижения, уже расширяет BaseGameActivity и вызывает beginUserInitiatedSignIn, когда должна выдать достижение, поэтому пользователь должен войти в систему, но в то время, когда я разблокирую достижение для пользователя, я сохраняю получение «java.lang.IllegalStateException: GoogleApiClient еще не подключен». Может ли кто-нибудь сказать мне, что я делаю неправильно? Вот код, отвечающий за разблокировку достижения (он находится в классе, расширяющем BaseGameActivity, из BaseGameUtils):

private void darConquistaDerrubouArvore(int numeroDeAcertos) {
     // start the asynchronous sign in flow
    mSignInClicked = true;
    mGoogleApiClient.connect();
    if(numeroDeAcertos <= 40)
    {
        try
        {
                beginUserInitiatedSignIn();
                Games.Achievements.unlock(gameHelper.getApiClient(), "CgkIs_27xcoSEAIQAQ");
                Log.i("TelaModoCasual", "usuário não está logado");
                this.onSignInFailed();

        }
        catch(Exception exc)
        {
            exc.printStackTrace();
            this.onSignInFailed();
        }
    }

}

person Fabio Phillip Rocha Marques    schedule 08.12.2014    source источник
comment
См. это сообщение.   -  person jfdoming    schedule 09.12.2014
comment
да, я видел этот пост, но мне не нужна кнопка входа, я хочу, чтобы мое приложение попыталось немедленно войти в систему пользователя. Это невозможно?   -  person Fabio Phillip Rocha Marques    schedule 09.12.2014
comment
Да, к сожалению, вам нужно запросить разрешение пользователя, прежде чем войти в систему, потому что вход означает, что ваше приложение получает всевозможные новые разрешения. Вот почему Android заставляет вас сначала показывать диалог.   -  person jfdoming    schedule 09.12.2014
comment
Насколько я знаю, способа нет, но если кто-то еще его обнаружит, он должен обязательно опубликовать его здесь.   -  person jfdoming    schedule 09.12.2014


Ответы (1)


Взгляните на базовый пример https://github.com/playgameservices/android-basic-samples/tree/master/BasicSamples/TypeANumber. Поток подключения для API Google является асинхронным, поэтому вы не можете разблокировать достижение в том виде, в котором оно у вас есть. Существует обратный вызов onConnected(), который вызывается после установления соединения. В этом методе вы можете разблокировать достижения.

Документация для клиента API находится по адресу http://developer.android.com/google/auth/api-client.html

person Clayton Wilkinson    schedule 19.12.2014