BaseGameUtils Неизвестная ошибка, onConnectionFailed: результат 4

Я уже тестировал пример ButtonClicker 2000, и он отлично работает. Теперь я пытаюсь внедрить службы Google Games в другую игру, но это дает некоторую ошибку:

06-06 12:30:46.353: D/BaseGameActivity(7982): isGooglePlayServicesAvailable returned 0
06-06 12:30:46.353: D/BaseGameActivity(7982): beginUserInitiatedSignIn: starting new sign-in flow.
06-06 12:30:46.416: D/BaseGameActivity(7982): Connecting GamesClient.
06-06 12:30:46.424: D/BaseGameActivity(7982): onStart.
06-06 12:30:46.424: D/BaseGameActivity(7982): onStart: connecting clients.
06-06 12:30:46.424: D/BaseGameActivity(7982): Connecting GamesClient.
06-06 12:30:46.424: E/GmsClient(7982): Calling connect() while still connected, missing disconnect().
06-06 12:30:46.713: D/BaseGameActivity(7982): onConnectionFailed: result 4
06-06 12:30:46.713: D/BaseGameActivity(7982): onConnectionFailed: since user initiated sign-in, trying to resolve problem.
06-06 12:30:46.713: D/BaseGameActivity(7982): resolveConnectionResult: trying to resolve result: ConnectionResult{statusCode=SIGN_IN_REQUIRED, resolution=PendingIntent{41692200: [email protected]}}
06-06 12:30:46.713: D/BaseGameActivity(7982): result has resolution. Starting it.

06-06 12:30:46.900: D/BaseGameActivity(7982): onActivityResult, req 9001 response 0
06-06 12:30:46.900: D/BaseGameActivity(7982): responseCode != RESULT_OK, so not reconnecting.
06-06 12:30:46.900: D/BaseGameActivity(7982): giveUp: giving up on connection. Status code: 4
06-06 12:30:46.900: D/BaseGameActivity(7982): Making error dialog for error: 4

com.google.android.gms регистрирует следующую ошибку:

E/SignInActivity(7432): SignInActivity must be started with startActivityForResult

Что я сделал:

  • Я правильно настроил сторону консоли разработчика. SHA1 является правильным (соответствует хранилищу ключей androiddebug).
  • В API-консоли все выглядит нормально.
  • Я расширил GameBaseActivity и реализовал запрошенные интерфейсы.
  • У меня есть папка ids.xml в значениях, которая соответствует той, что находится в консоли разработчика.
  • У меня есть избыточные запрошенные методы, включенные onActivityResult()
  • манифест также в порядке, он включает запрошенные метаданные.

  • Это код, который я использую для входа в onCreate:

    setSignInMessages("SIGNING IN", "SIGNING OUT");
    beginUserInitiatedSignIn();
    

При тестировании примера Button Clicker 2000 у меня также была Неизвестная ошибка и исправлена ​​правильная настройка панели. Текущая игровая панель также настроена правильно, поэтому я не знаю, что происходит. Что мне не хватает?

EDIT:

  • Я также попытался развернуть BaseGameActivity и реализовать GameHelper прямо в моей основной деятельности.
  • Я попытался опубликовать настройки приложений для игр (потому что эта игра уже опубликована в Play Маркете). Связал другое приложение с моим изданием, подписывающим SHA1 ключ. Настроено как основное приложение для установки. Все еще не повезло.

Ответ 1

Это действительно странно. Ошибка, которую вы получили, в зависимости от ваших журналов BaseGameActivity не должна произойти.

SignInActivity действительно не отображается в коде, так как вы запускаете его, вызывая GameHelper.resolveConnectionResult, который вызывается mConnectionResult.startResolutionForResult(mActivity, RC_RESOLVE). Это mConnectionResult, у которого есть намерение, которое запустит SignInActivity. И журналы BaseGameActivity говорят, что вы запускаете его правильно, поэтому, если вы не внесли некоторые изменения в BaseGameActivity и GameHelper, ошибка странная.

Где вы ищете ошибки? В вашем пакете фильтр? Действительно полезная информация отображается в LogCat, но не в вашем приложении. Найдите все сообщения без фильтра, в LogCat и найдите теги Volley и GameAgent. Это может показать вам некоторые ошибки.

Еще одна вещь: показывается диалоговое окно SignIn? Когда отображается ошибка SignInActivity (временная метка)?

Ответ 2

Ошибка очень ясна:

E/SignInActivity(): SignInActivity must be started with startActivityForResult

Это означает, что SignInActivity запускается с startActivity вместо startActivityForResult.

Найдите, где начинается эта деятельность, и измените ее на startActivityForResult. Если бы вы разместили какой-то код, я был бы в состоянии помочь больше!

Ответ 3

в соответствии с вашими ошибками вы подключаете геймервер дважды (возможно, в вашем oncreate?), и он возвращает состояние ошибки 4. Вы не даете код, но я уверен, что знаю, что ваша проблема. Вы, возможно, испортили вход google с GamesClient.connect Подождите, пока учетная запись google не войдет в систему, прежде чем подключаться к игровому клиенту. Я сделал

public void onSignInSucceeded() {    
            mGamesClient.connect();}

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

Ответ 4

Проблема:

ConnectionResult {StatusCode = SIGN_IN_REQUIRED, resolution = PendingIntent {#: android.os.BinderProxy @#}}

решена:

@Override
public void onConnectionFailed(ConnectionResult arg0) {
    <Your Code...>

    try {
        arg0.startResolutionForResult(this, 9001);
    } catch (SendIntentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

Это просто грубая демонстрация, обработайте ConnectionResult, как подскажите в Google.

для получения дополнительной информации Нажмите здесь