SDK Google Play games Services C++ предоставляет C++ API для использования с игровыми сервисами 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; вам не нужно повторно инициализировать его, когда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);
Используйте классы 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, перейдите к краткому руководству .
Дальнейшее чтение
Обязательно прочтите документацию по классу, которая входит в состав SDK C++ для игровых сервисов Google Play, для получения более подробной информации, а также ознакомьтесь с примерами , демонстрирующими, как использовать SDK.
Если ваша игра использует внутренний сервер, см. раздел «Включение серверного доступа к игровым сервисам Google Play» .