Отслеживание выигрышей и проигрышей в игровых сервисах Google Play

Я использую игру Turn Base Multiplayer с помощью Google Play Services . Кажется, что в нем отсутствует основная функция: отслеживание выигрышей и проигрышей! Кажется, это очень важная функция для любой конкурентной игры.

Я что-то упускаю? Это уже обрабатывается Google каким-то образом?

Если нет, мне интересно, осуществил ли кто-либо свою собственную систему отслеживания w / l, и как они подошли к ней. Я беспокоюсь о том, чтобы просто сохранить его локально, так как он может выйти из-под контроля с реальностью. Я полагаю, что я мог бы использовать Google Cloud Storage, но я также опасаюсь, что отслеживание того, какие совпадения были учтены, может быть небольшой склонностью к ошибкам (например, подсчет выигрышей / проигрышей в одном совпадении несколько раз). Возможно, использование системы Google Play Leaderboard будет хорошим, так как вы можете сравнить с друзьями / и т. Д.

Возможно, вы захотите попробовать использовать Службы, предоставляемые Службами игры Google Play. Вот шаги для его использования:

  1. Откройте консоль разработчика Android
  2. На боковой панели нажмите «Игровые службы», выберите свое приложение, затем «События»
  3. Затем создайте два новых События, один из которых называется «Игры Побежденные» и другие «Потерянные игры», затем нажмите, чтобы опубликовать свои изменения
  4. Нажмите ссылку Получить ресурсы, чтобы увидеть идентификаторы ресурсов ваших новых событий, и добавьте их в свое приложение в каталоге res / values
  5. Когда игра выиграна или проиграна, вызовите следующий код, где eventRef – это ваше дружеское имя ресурса, которое вы добавили на последнем шаге, либо «events_games_won», либо «events_games_lost»:

    int eventInt = activity.getApplicationContext().getResources().getIdentifier(eventRef, "string", "com.yourpackage.android"); String eventID = activity.getString(eventInt); Games.Events.increment(apiClient, eventID, 1); 

    Если вы используете basegameutils, ваш экземпляр apiClient можно получить с помощью aHelper.getApiClient (), в противном случае следуйте этим инструкциям, чтобы настроить его.

  6. Чтобы прочитать сохраненные данные, вы можете использовать обратный вызов следующим образом:

     PendingResult<Events.LoadEventsResult> results = Games.Events.load(apiClient, true); results.setResultCallback(new ResultCallback<Events.LoadEventsResult>() { @Override public void onResult(Events.LoadEventsResult result) { Events.LoadEventsResult r = (Events.LoadEventsResult)result; EventBuffer eb = r.getEvents(); for (int i=0; i < eb.getCount(); i++) { Event event = eb.get(i); // do something, like cache the results for later YourGameState.eventStats.put(event.getName(), (int)event.getValue()); } eb.close(); listener.onResult(); } }); 

Преимущества такого подхода к поддержанию и управлению счетами на местном уровне:

  • Выигрыши и потери сохраняются в облаке Google Play, и они будут храниться на всех устройствах пользователя
  • Вы можете использовать «События для создания квестов» (также описанные в Google Play), такие как «Win 10 игр на этой неделе» или «Перейти на эту неделю непобедимым»,
  • Google Play предоставит вам статистику по событиям для всех, кто играет в вашу игру, что может быть очень полезно для анализа активности и производительности игроков

И, конечно же, вы можете использовать тот же подход для создания событий для чего угодно.

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

Например.

 SharedPreferences prefs = this.getSharedPreferences( "com.example.app", Context.MODE_PRIVATE); if (gameOver(Side.White)) { prefs.edit().putLong(dateTimeKey, prefs.getLong(losses, 0) + 1).commit(); } else if (gameOver(Side.Black)){ prefs.edit().putLong(dateTimeKey, prefs.getLong(wins, 0) + 1).commit(); }