События в играх для Android

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

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

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

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

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

Чтобы начать использовать API событий, ваша игра должна сначала получить объект EventsClient . Вы можете сделать это, вызвав метод Games.getEventsClient() и передав активность и GoogleSignInAccount для текущего игрока. Чтобы узнать, как получить информацию об учетной записи игрока, см. раздел «Вход в игры для Android» .

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

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

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

  • eventId генерируется игровыми сервисами Google Play, когда вы впервые определяете событие в консоли Google Play, и используется для уникальной идентификации этого события в вашей игре.
  • Вы можете использовать incrementAmount , чтобы указать количественный прогресс игрока в достижении какой-либо конкретной игровой цели. Например, если ваша игра хочет отслеживать событие «Победить 500 пучеглазых монстров» , значение incrementAmount может быть количеством монстров, убитых игроком в одном бою.

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

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

Получить события

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

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

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

public void loadEvents() {
  Games.getEventsClient(this, GoogleSignIn.getLastSignedInAccount(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);
          }
        }
      });
}