После прекращения поддержки Google Sign-In API в 2026 году мы удаляем SDK игр v1. После февраля 2025 года вы не сможете публиковать в Google Play игры, недавно интегрированные с SDK игр v1. Вместо этого мы рекомендуем использовать SDK games v2.
Хотя существующие игры с интеграцией предыдущих игр версии 1 продолжат функционировать в течение нескольких лет, вам рекомендуется перейти на версию 2, начиная с июня 2025 года.
Это руководство предназначено для использования SDK Play Games Services v1. Информацию о последней версии SDK смотрите в документации v2 .
В этом руководстве показано, как использовать API-интерфейсы достижений в приложении Android для разблокировки и отображения достижений в вашей игре. API-интерфейсы можно найти в пакетах com.google.android.gms.games
и com.google.android.gms.games.achievements
.
Прежде чем начать
Если вы еще этого не сделали, возможно, вам будет полезно просмотреть концепции игры с достижениями .
Прежде чем вы начнете писать код с использованием API достижений:
- Следуйте инструкциям по установке и настройке приложения для использования игровых сервисов Google Play в руководстве по настройке SDK сервисов Google Play .
- Определите достижения, которые вы хотите, чтобы ваша игра разблокировала или отображала, следуя инструкциям в руководстве по консоли Google Play .
- Загрузите и просмотрите примеры кода достижений на странице образцов Android .
- Ознакомьтесь с рекомендациями, описанными в Контрольном списке качества .
Получить клиент достижений
Чтобы начать использовать 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 автоматически разблокируют достижение, как только оно достигнет необходимого количества шагов.
Хорошей практикой является определение идентификаторов достижений в файле 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); } }); }
Пример пользовательского интерфейса достижений по умолчанию показан ниже.
![](https://developer.android.google.cn/static/images/games/pgs/achievements_android.png?authuser=3&hl=ru)