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.
для получения дополнительной информации Нажмите здесь