Google Play games Services C++ SDK предоставляет 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; вам не нужно повторно инициализировать его, когда ваша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
управляет их жизненным циклом. Ваш клиент никогда не должен держать ссылку на менеджера. Вместо этого ваш клиент должен удерживать экземпляр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 .