Google Play 게임 서비스 C++ SDK는 Google Play 게임 서비스와 함께 사용할 수 있는 C++ API를 제공합니다. 이는 C++로 구현된 기존 게임을 보유한 개발자를 위한 것입니다.
현재 SDK로 다음 서비스를 구현할 수 있습니다.
- 인증
- 업적
- 리더보드
- 턴 방식 멀티플레이어
- 실시간 멀티플레이어
- 이벤트 및 퀘스트
- 저장된 게임
- Nearby Connections(Android에만 해당)
- 플레이어 통계
개념
고급 단계에서 다음 절차에 따라 SDK를 사용합니다.
- Android의 플랫폼 구성을 설정합니다.
GameServices::Builder
를 사용하여GameServices
객체를 설정하고 구성합니다.GameServices
객체가 자동으로 로그인을 시도하고OnAuthActionFinished()
콜백을 통해 결과를 반환합니다. 이때 콜백이 반환한 결과를 기록해 둡니다. 자동 로그인 시도가 실패한 경우 사용자가 로그인하도록 버튼을 표시할 수 있습니다.OnAuthActionFinished()
결과를 수신한 후,GameServices
객체와 하위 Manager를 사용하여 다음을 포함한 Play 게임 서비스를 호출할 수 있습니다.- 로그인(인증 실패 후):
StartAuthorizationUI()
- 업적 달성:
Achievements().Unlock()
- 기본 제공 UI를 사용하여 업적 표시:
Achievements().ShowAllUI()
- 최고점수 제출:
Leaderboards().SubmitScore()
- 로그아웃:
SignOut()
- 로그인(인증 실패 후):
GameServices
객체 사용을 마치면 재설정하거나 삭제합니다.
더욱 구체적인 절차는 다음과 같습니다.
플랫폼 설정 초기화: 플랫폼별 초기화 정보가 포함된 객체입니다. Android의 경우 플랫폼 설정에 자바 VM과 현재
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
객체를 관리합니다. Manager는GameServices
인스턴스에서 액세스하고 관련 기능을 함께 그룹화합니다. 이러한 예에는 Achievement와 Leaderboard Manager가 포함됩니다. 여기에는 사용자가 볼 수 있는 상태가 없습니다. Manager는 참조로 반환되고 포함된GameServices
인스턴스가 수명 주기를 제어합니다. 클라이언트가 Manager 참조를 보유해서는 안 됩니다. 대신GameServices
인스턴스를 보유해야 합니다.Manager는 변경할 수 없는 값 유형 객체를 통해 데이터를 반환합니다. 이러한 값은 쿼리가 실행된 시점에서 기본 데이터의 일관된 뷰를 반영합니다.
// Submit a high score game_services_->Leaderboards().SubmitScore(leaderboard_id, score); // Show the default Achievements UI game_services_->Achievements().ShowAllUI();
GameServices
객체 사용을 마치면 객체를 소유하고 있는unique_ptr
에서reset()
을 호출하거나 범위를 벗어날 때unique_ptr
이 자동으로 객체를 제거하도록 하여 정리합니다.
스레딩 모델
별도의 언급이 없는 경우 모든 GameServices
와 Manager 메서드는 스레드로부터 안전한 비동기 구현을 이용합니다. 외부 잠금 없이 모든 스레드에서 호출될 수 있으며 호출 순서와 일치하는 순서대로 실행됩니다.
상태를 읽는 메서드인 Accessor 메서드에는 두 가지 주요한 변형이 있습니다. 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);});
모든 사용자 콜백은 전용 콜백 스레드에서 호출됩니다. 이 스레드는 '기본 스레드' 또는 'UI 스레드'의 플랫폼 개념과 다를 수 있습니다. 아울러 사용자 콜백이 빨리 실행되도록 해야 합니다. 콜백 스레드가 지연되면 로그아웃 요청 완료 지연같이 사용자에게 보이는 문제가 발생할 수 있습니다.
플랫폼별 정보
Android에서 Play 게임 C++ SDK를 시작하려면 빠른 시작 가이드로 계속 진행하세요.
추가 자료
Google Play 게임 서비스 C++ SDK에 포함된 클래스 설명서에서 자세한 내용을 알아보고, SDK 사용 방법을 시연하는 샘플도 확인해 보세요.