注意:要下載最新版Google Play游戲服務C++SDK,請參閱SDK下載頁面。
Google Play游戲服務C++SDK提供了可與Google Play游戲服務配合使用的C++API,專為已有C++游戲?qū)崿F(xiàn)的開發(fā)者而設計。
該SDK目前實現(xiàn)了以下服務:
·授權(quán)
·成就
·排行榜
·回合制多人游戲
·實時多人游戲
·活動和任務
·游戲存檔
·附近連接(僅限Android)
·玩家統(tǒng)計信息
概念
大體上講,您需要執(zhí)行以下步驟來使用SDK:
1.為Android設置平臺配置。
2.使用GameServices::Builder配置和構(gòu)建一個GameServices對象。GameServices對象會自動嘗試登錄,并通過OnAuthActionFinished()回調(diào)返回結(jié)果。記下回調(diào)所返回的結(jié)果。如果自動登錄嘗試失敗,您可以顯示一個按鈕供用戶手動登錄。
3.收到OnAuthActionFinished()結(jié)果后,您可以使用GameServices對象及其子對象管理器來進行Play游戲服務調(diào)用,包括:
·登錄(授權(quán)失敗后):StartAuthorizationUI()
·解鎖成就:Achievements().Unlock()
·使用內(nèi)置界面顯示成就:Achievements().ShowAllUI()
·提交最高得分:Leaderboards().SubmitScore()
·退出:SignOut()
4.當您使用完GameServices對象時,請將其重置或銷毀。
詳細來說,您需要執(zhí)行以下步驟:
1.初始化平臺配置:這是一個包含平臺特定初始化信息的對象。在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);
2.構(gòu)建一個GameServices對象:該對象是Google Play游戲服務功能的主要入口點。使用GameServices::Builder創(chuàng)建GameServices實例。
在大多數(shù)實現(xiàn)中,只要您的C環(huán)境持續(xù)存在,給定GameServices對象就會持續(xù)存在;在Android Activity暫停和恢復時,您無需重新初始化該對象。
//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);
3.使用管理器類來管理GameServices對象。管理器可通過GameServices實例訪問,用于將相關功能集合在一起,例如成就管理器和排行榜管理器。它們本身不含用戶可見狀態(tài)。管理器由引用返回,所含的GameServices實例可控制其生命周期。您的客戶端絕不應保留管理器引用,而應保留GameServices實例。
管理器通過常量值類型的對象返回數(shù)據(jù)。這些值可一致地反映執(zhí)行查詢所對應時刻的基礎數(shù)據(jù)情況。
//Submit a high score
game_services_->Leaderboards().SubmitScore(leaderboard_id,score);
//Show the default Achievements UI
game_services_->Achievements().ShowAllUI();
4.當您使用完GameServices對象后,通過以下方式進行清理:在擁有該對象的unique_ptr上調(diào)用reset(),或者在超出使用期限后讓unique_ptr自動銷毀它。
線程模型
除非另有說明,否則所有GameServices和管理器方法都擁有線程安全異步實現(xiàn)。它們可在任何線程上調(diào)用,無需外部鎖定,并且執(zhí)行順序與其調(diào)用順序一致。
訪問器方法(讀取狀態(tài)的方法)具有兩種主要變體。第一種方法(名稱類似FetchProperty())以異步方式將其結(jié)果提供給所提供的回調(diào);第二種方法(名稱類似FetchPropertyBlocking())以同步方式將其結(jié)果返回給調(diào)用線程。
//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);});
所有用戶回調(diào)均在一個專用回調(diào)線程上調(diào)用。該線程可能不同于“主線程”或“界面線程”的任何平臺概念。您還應盡力確保用戶回調(diào)能快速執(zhí)行;回調(diào)線程停止可能會引起用戶可見問題(例如,注銷請求延遲完成)。
平臺特定信息
要開始在Android上使用Play游戲C++SDK,請繼續(xù)閱讀快速入門指南。
深入閱讀
務必閱讀Google Play游戲服務C++SDK自帶的類文檔以了解更多詳情,并查看演示SDK使用方法的示例。