В связи с прекращением поддержки API входа Google мы удалим SDK для игр v1 в 2026 году. После февраля 2025 года вы не сможете публиковать в Google Play игры, недавно интегрированные с SDK для игр v1. Вместо этого мы рекомендуем использовать SDK для игр v2.
Хотя существующие игры с интеграцией предыдущих игр v1 продолжат функционировать еще пару лет, вам рекомендуется перейти на v2, начиная с июня 2025 года.
Это руководство по использованию Play Games Services v1 SDK. C++ SDK для Play Games Services v2 пока недоступен.
Пакет SDK C++ для игровых сервисов Google Play предоставляет API C++ для использования с игровыми сервисами Google Play и предназначен для разработчиков, у которых уже есть реализация игры на C++.
В настоящее время SDK реализует следующие сервисы:
- Авторизация
- Достижения
- Таблицы лидеров
- События
- Сохраненные игры
- Подключения поблизости (только для Android)
- Статистика игрока
Концепции
На высоком уровне использование SDK осуществляется следующим образом:
- Настройте конфигурацию платформы для Android.
- Используйте
GameServices::Builder
для настройки и создания объектаGameServices
. ОбъектGameServices
автоматически пытается выполнить вход и возвращает результат через обратный вызовOnAuthActionFinished()
. Обратите внимание на результат, возвращаемый обратным вызовом. Если попытка автоматического входа не удалась, вы можете отобразить кнопку, позволяющую пользователям войти в систему. После получения результата
OnAuthActionFinished()
вы можете использовать объектGameServices
и его дочерние менеджеры для выполнения вызовов служб Play Games, включая:- Войти (после неудачной авторизации):
StartAuthorizationUI()
- Разблокировать достижения:
Achievements().Unlock()
- Показать достижения с помощью встроенного пользовательского интерфейса:
Achievements().ShowAllUI()
- Отправьте высокий результат:
Leaderboards().SubmitScore()
- Выйти:
SignOut()
- Войти (после неудачной авторизации):
После завершения использования объекта
GameServices
сбросьте или уничтожьте его.
На более детальном уровне:
Инициализация конфигурации платформы: это объект, содержащий информацию об инициализации, специфичную для платформы. В Android конфигурация платформы содержит виртуальную машину Java и указатель на текущую
Activity
:// In android_main(), create a platform configuration // and bind the object activity. // Alternately, attach the activity in JNI_Onload(). gpg::AndroidPlatformConfiguration platform_configuration; platform_configuration.SetActivity(state->activity->clazz);
Создайте объект
GameServices
: этот объект является основной точкой входа для функциональности игровых сервисов Google Play. ЭкземплярыGameServices
создаются с помощьюGameServices::Builder
.В большинстве реализаций заданный объект
GameServices
будет сохраняться до тех пор, пока существует ваша среда C; вам не нужно повторно инициализировать его, когда ваша AndroidActivity
приостанавливается и возобновляется.// Creates a GameServices object that has lambda callbacks. game_services_ = gpg::GameServices::Builder() .SetDefaultOnLog(gpg::LogLevel::VERBOSE) .SetOnAuthActionStarted([started_callback](gpg::AuthOperation op) { is_auth_in_progress_ = true; started_callback(op); }) .SetOnAuthActionFinished([finished_callback](gpg::AuthOperation op, gpg::AuthStatus status) { LOGI("Sign in finished with a result of %d", status); is_auth_in_progress_ = false; finished_callback(op, status); }) .Create(pc);
Используйте классы Manager для управления объектом
GameServices
. Доступ к менеджерам осуществляется из экземпляраGameServices
, и они группируют связанную функциональность. Примерами таких классов являются менеджеры достижений и рейтингов. Они сами по себе не содержат видимого пользователю состояния. Менеджеры возвращаются по ссылке, а содержащий их экземплярGameServices
управляет их жизненным циклом. Клиент никогда не должен хранить ссылку на Manager. Вместо этого клиент должен хранить экземплярGameServices
.Менеджеры возвращают данные через неизменяемые объекты типа значения. Эти значения отражают согласованное представление базовых данных на момент выполнения запроса.
// Submit a high score game_services_->Leaderboards().SubmitScore(leaderboard_id, score); // Show the default Achievements UI game_services_->Achievements().ShowAllUI();
После завершения использования объекта
GameServices
выполните очистку, вызвавreset()
дляunique_ptr
, которому он принадлежит, или позволивunique_ptr
автоматически уничтожить его при выходе из области действия.
Модель резьбы
Если не указано иное, все методы GameServices
и Manager имеют потокобезопасные асинхронные реализации. Их можно вызывать в любом потоке без внешней блокировки, и они будут выполняться в порядке, соответствующем порядку их вызова.
Методы доступа (те, которые считывают состояние) существуют в двух основных вариантах. Первый тип метода (с названиями вроде FetchProperty()
) асинхронно передает свои результаты предоставленному обратному вызову; второй (с названиями вроде FetchPropertyBlocking()
) синхронно возвращает свои результаты вызывающему потоку.
// Blocking callback
gpg::AchievementManager::FetchAllResponse fetchResponse =
game_services_->Achievements().FetchAllBlocking(std::chrono::milliseconds(1000));
// Non-blocking callback
game_services_->Achievements().FetchAll(gpg::DataSource::CACHE_OR_NETWORK,
[] (gpg::AchievementManager::FetchAllResponse response) {
LogI("Achievement response status: %d", response.status);});
Все пользовательские обратные вызовы вызываются в выделенном потоке обратного вызова. Этот поток потенциально отличается от любой концепции платформы «основного потока» или «потока пользовательского интерфейса». Также следует постараться обеспечить быстрое выполнение пользовательских обратных вызовов; остановившийся поток обратного вызова может привести к заметным для пользователя проблемам (например, к задержке выполнения запроса на выход).
Информация, специфичная для платформы
Чтобы приступить к использованию Play Games C++ SDK на Android, перейдите к краткому руководству .
Дальнейшее чтение
Обязательно прочтите документацию по классам, входящую в состав Google Play Game services C++ SDK, для получения более подробной информации, а также ознакомьтесь с примерами , демонстрирующими использование SDK.
Если ваша игра использует внутренний сервер, см. раздел Включение доступа к игровым сервисам Google Play со стороны сервера .