Достижения в играх для Android

В связи с прекращением поддержки API Google Sign-In , мы удаляем SDK для игр версии 1 в 2026 году. После февраля 2025 года вы не сможете публиковать в Google Play игры, которые были интегрированы с SDK для игр версии 1. Мы рекомендуем использовать вместо него SDK для игр версии 2.
Хотя существующие игры с интеграцией предыдущих версий v1 будут продолжать работать еще пару лет, мы рекомендуем перейти на версию v2, начиная с июня 2025 года.
Данное руководство предназначено для использования SDK Play Games Services v1. Информацию о последней версии SDK см. в документации v2 .

В этом руководстве показано, как использовать API достижений в Android-приложении для разблокировки и отображения достижений в вашей игре. API можно найти в пакетах com.google.android.gms.games и com.google.android.gms.games.achievements .

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

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

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

Получите клиент достижений

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

Разблокировать достижения

Чтобы разблокировать достижение, вызовите метод AchievementsClient.unlock() и передайте ему идентификатор достижения.

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

Games.getAchievementsClient(this, GoogleSignIn.getLastSignedInAccount(this))
    .unlock(getString(R.string.my_achievement_id));

Если достижение относится к инкрементальному типу (то есть для его разблокировки требуется несколько шагов), вызовите вместо этого метод AchievementsClient.increment() .

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

Games.getAchievementsClient(this, GoogleSignIn.getLastSignedInAccount(this))
    .increment(getString(R.string.my_achievement_id), 1);

Для разблокировки достижения не требуется писать дополнительный код; Google Play Games Services автоматически разблокирует достижение после выполнения необходимого количества шагов.

Рекомендуется определять идентификаторы достижений в файле strings.xml , чтобы ваша игра могла ссылаться на достижения по идентификатору ресурса. При выполнении запросов на обновление и загрузку достижений также обязательно следуйте этим рекомендациям , чтобы избежать превышения квоты API.

Отобразить достижения

Чтобы отобразить достижения игрока, вызовите AchievementsClient.getAchievementsIntent() , чтобы получить Intent для создания стандартного пользовательского интерфейса достижений. Затем ваша игра может отобразить этот интерфейс, вызвав startActivityForResult .

Приведённый ниже фрагмент кода показывает, как ваше приложение может отображать стандартный пользовательский интерфейс достижений. В этом фрагменте RC_ACHIEVEMENT_UI — это произвольное целое число, которое игра использует в качестве кода запроса.

private static final int RC_ACHIEVEMENT_UI = 9003;

private void showAchievements() {
  Games.getAchievementsClient(this, GoogleSignIn.getLastSignedInAccount(this))
      .getAchievementsIntent()
      .addOnSuccessListener(new OnSuccessListener<Intent>() {
        @Override
        public void onSuccess(Intent intent) {
          startActivityForResult(intent, RC_ACHIEVEMENT_UI);
        }
      });
}

Пример стандартного интерфейса достижений показан ниже.