События для Android-игр

В этом руководстве показано, как собирать данные об игровом процессе игроков для аналитики игры, используя API событий, предоставляемые сервисами Google Play Games. API можно найти в пакетах com.google.android.gms.games.event и com.google.android.gms.games .

Прежде чем начать

Если вы еще этого не сделали, вам может быть полезно повторить концепции игры, основанной на событиях .

Прежде чем начать писать код, используя API событий:

Загрузите клиент событий.

Для начала использования API событий ваша игра должна сначала получить объект EventsClient . Это можно сделать, вызвав метод PlayGames.getEventsClient() и передав в него объект Activity.

Отправить события

Вы можете добавить в свою игру код, который будет уведомлять Play Games Services о каждом событии, представляющем интерес для вашей игры.

Для отправки обновления события вызовите метод EventsClient.increment() , указав значение eventId и целочисленное incrementAmount , равное или большее 0.

  • Идентификатор eventId генерируется сервисами Play Games Services при первом определении события в консоли Google Play и используется для уникальной идентификации этого события в вашей игре.

  • С помощью параметра incrementAmount можно указать количественный прогресс игрока в достижении определенной игровой цели. Например, если событие, которое отслеживает ваша игра, — «Победить 500 монстров с выпученными глазами» , значение incrementAmount может быть равно количеству монстров, убитых игроком в одном бою.

Вот пример того, как отправить событие с шагом в 1:

public void submitEvent(String eventId) {
  PlayGames.getEventsClient(this)
      .increment(eventId, 1);
}

Получение событий

Вы можете получить все данные о событиях, хранящиеся на серверах Google для вашей игры, вызвав метод EventsClient.load() . В вызове метода передайте логическое значение, указывающее, следует ли Play Games Services очищать локально кэшированные данные на устройстве пользователя.

Чтобы получить данные для конкретных событий, которые вы определили в консоли Google Play, вызовите метод EventsClient.loadByIds() и передайте массив идентификаторов событий в качестве входных параметров.

Следующий фрагмент кода показывает, как можно запросить у Play Games Services список всех событий для вашей игры:

public void loadEvents() {
  PlayGames.getEventsClient(this)
      .load(true)
      .addOnCompleteListener(new OnCompleteListener<AnnotatedData<EventBuffer>>() {
        @Override
        public void onComplete(@NonNull Task<AnnotatedData<EventBuffer>> task) {
          if (task.isSuccessful()) {
            // Process all the events.
            for (Event event : task.getResult().get()) {
              Log.d(TAG, "loaded event " + event.getName());
            }
          } else {
            // Handle Error
            Exception exception = task.getException();
            int statusCode = CommonStatusCodes.DEVELOPER_ERROR;
            if (exception instanceof ApiException) {
              ApiException apiException = (ApiException) exception;
              statusCode = apiException.getStatusCode();
            }
            showError(statusCode);
          }
        }
      });
}