В связи с прекращением поддержки API Google Sign-In , мы удаляем SDK для игр версии 1 в 2026 году. После февраля 2025 года вы не сможете публиковать в Google Play игры, которые были интегрированы с SDK для игр версии 1. Мы рекомендуем использовать вместо него SDK для игр версии 2.
Хотя существующие игры с интеграцией предыдущих версий v1 будут продолжать работать еще пару лет, мы рекомендуем перейти на версию v2, начиная с июня 2025 года.
Данное руководство предназначено для использования SDK Play Games Services v1. SDK C++ для Play Games Services v2 пока недоступен.
SDK Google Play Games Services C++ предоставляет API на C++ для использования с сервисами Google Play Games и предназначен для разработчиков, у которых уже есть реализация игры на C++.
В настоящее время SDK реализует следующие сервисы:
- Авторизация
- Достижения
- Таблицы лидеров
- События
- Сохраненные игры
- Ближайшие соединения (только для Android)
- Статистика игрока
Концепции
В общих чертах, использование SDK осуществляется следующим образом:
- Настройте конфигурацию платформы для Android.
- Используйте
GameServices::Builderдля настройки и создания объектаGameServices. ОбъектGameServicesавтоматически пытается войти в систему и возвращает результат через коллбэкOnAuthActionFinished(). Запишите результат, возвращаемый коллбэком. Если автоматическая попытка входа в систему не удалась, вы можете отобразить кнопку, позволяющую пользователям войти в систему. После получения результата
OnAuthActionFinished()вы можете использовать объектGameServicesи его дочерние объекты Manager для выполнения вызовов сервисов 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 Games. ЭкземплярыGameServicesсоздаются с помощьюGameServices::Builder.В большинстве реализаций объект
GameServicesбудет существовать до тех пор, пока существует ваша среда выполнения C; вам не нужно повторно инициализировать его при приостановке и возобновленииActivityвашего Android-приложения.// 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);Для управления объектом
GameServicesиспользуйте классы Manager. Доступ к менеджерам осуществляется через экземпляр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, перейдите к краткому руководству .
Дополнительная информация
Обязательно ознакомьтесь с документацией по классам, входящим в состав C++ SDK сервисов Google Play, для получения более подробной информации, а также изучите примеры , демонстрирующие использование SDK.
Если ваша игра использует серверную часть, см. раздел «Включение доступа к сервисам Google Play Games на стороне сервера» .