Я разрабатываю игру для Android с помощью Служб Google Play для создания взаимного соответствия.
Сначала все было нормально. Я загружаю разворотные соответствия для подписанного пользователя с помощью
Games.TurnBasedMultiplayer.loadMatchesByStatus(getApiClient(),
new int[]{TurnBasedMatch.MATCH_TURN_STATUS_MY_TURN,
TurnBasedMatch.MATCH_TURN_STATUS_THEIR_TURN,
TurnBasedMatch.MATCH_TURN_STATUS_INVITED,
TurnBasedMatch.MATCH_TURN_STATUS_COMPLETE})
.setResultCallback(this);
Он всегда загружает все совпадения, которые являются любыми из заданных состояний. Но с прошлых выходных вызывается callback, но совпадений нет, так как я не участвую ни в одном матче (ответ "Состояние" в порядке). Я удалил кеш из Google Play Services на свой телефон и перезагрузил устройство. В этот момент все матчи были показаны снова до следующего раза, когда я открыл приложение. Снова все матчи отсутствовали. Как только я начинаю новый матч, матч продолжает демонстрироваться с помощью вышеописанного метода (обновление списка), пока я не закрою приложение. На следующем запуске этот матч также исчез.
Я должен сказать, что игра еще не опубликована, но на этапе тестирования в консоли разработчика Google Play. Я нашел ту же проблему на эмуляторе. Он работал отлично в течение нескольких дней, но внезапно возникла та же проблема, что и у моего реального устройства (с более поздней сборкой, поэтому это не означает, что это приводит к одному изменению кода).
Кто-нибудь еще заметил это поведение или имеет представление о том, как его разрешить?
Возможно, это связано с тем, что к одной игре подключено несколько приложений? У меня было два приложения, подписанные с сертификатами отладки, и сегодня днем добавили один для подписанного apk. Когда я использовал подписанный apk, он работал снова, пока я не развернул новое тестовое приложение (отладочная подпись). После переключения обратно на подписанный apk ошибка все еще вокруг.
Как никто, кажется, не знает ответа, позвольте мне перефразировать вопрос. Должен ли я сам кэшировать TurnBasedMatches на устройстве? Я снова удалил кеш игровых сервисов и снова открыл приложение. Результат? Список сотен игр (так как я должен каждый раз запускать новую игру во время тестирования...)
Мой код для обработки loadMatchesResult
@Override
public void onResult(TurnBasedMultiplayer.LoadMatchesResult loadMatchesResult)
{
showToast("GotMatches status: " + loadMatchesResult.getStatus().getStatusCode());
//add matches to listview (only caching matchId, no references to turnbasedmatch)
loadMatchesResult.getMatches().getMyTurnMatches().close();
loadMatchesResult.getMatches().getInvitations().close();
loadMatchesResult.getMatches().getTheirTurnMatches().close();
loadMatchesResult.getMatches().getCompletedMatches().close();
loadMatchesResult.release();
}
Нашел еще один интересный момент.. он начинает выглядеть, как проблема возникает при развертывании нового apk на устройстве... После развертывания нового apk (либо путем установки альфа-версии из игры Google, либо непосредственно отлаживаемой версии из Android Studio ) матчи ушли. Когда я не изменю apk, я могу перезагрузить свой телефон/закрыть приложение, и он отлично работает...
Проблема также возникает, если я обновляю приложение через магазин воспроизведения... Там должно быть больше людей, имеющих эту проблему!