SDK สำหรับ C++ ของบริการเกม Google Play มี C++ API สำหรับใช้กับบริการเกม Google Play และเหมาะสำหรับนักพัฒนาแอปที่มีการใช้งาน C++ ในเกมอยู่แล้ว
ปัจจุบัน SDK ใช้บริการต่อไปนี้
- การให้สิทธิ์
- ความสำเร็จ
- ลีดเดอร์บอร์ด
- กิจกรรม
- เกมที่บันทึกไว้
- การเชื่อมต่อใกล้เคียง (Android เท่านั้น)
- สถิติผู้เล่น
แนวคิด
ขั้นตอนคร่าวๆ ในการใช้ SDK มีดังนี้
- ตั้งค่าการกำหนดค่าแพลตฟอร์มสำหรับ Android
- ใช้
GameServices::Builder
เพื่อกําหนดค่าและสร้างออบเจ็กต์GameServices
ออบเจ็กต์GameServices
จะพยายามลงชื่อเข้าใช้โดยอัตโนมัติและแสดงผลลัพธ์ผ่านOnAuthActionFinished()
callback จดผลลัพธ์ที่ได้จากระบบเรียกกลับ หากพยายามลงชื่อเข้าใช้อัตโนมัติไม่สำเร็จ คุณสามารถแสดงปุ่มเพื่อให้ผู้ใช้ลงชื่อเข้าใช้ได้ หลังจากได้รับผลลัพธ์
OnAuthActionFinished()
แล้ว คุณจะใช้ออบเจ็กต์GameServices
และผู้จัดการย่อยเพื่อเรียกใช้บริการ Play Games ได้ ดังนี้- ลงชื่อเข้าใช้ (หลังจากให้สิทธิ์ไม่สำเร็จ):
StartAuthorizationUI()
- ปลดล็อกรางวัลพิเศษ:
Achievements().Unlock()
- แสดงรางวัลพิเศษโดยใช้ UI ในตัว:
Achievements().ShowAllUI()
- ส่งคะแนนสูงสุด:
Leaderboards().SubmitScore()
- ออกจากระบบ:
SignOut()
- ลงชื่อเข้าใช้ (หลังจากให้สิทธิ์ไม่สำเร็จ):
เมื่อใช้ออบเจ็กต์
GameServices
เสร็จแล้ว ให้รีเซ็ตหรือทำลาย
ในระดับรายละเอียดมากขึ้น
เริ่มต้นการกำหนดค่าแพลตฟอร์ม: นี่คือออบเจ็กต์ที่มีข้อมูลการเริ่มต้นเฉพาะแพลตฟอร์ม ใน Android การกําหนดค่าแพลตฟอร์มประกอบด้วย VM ของ 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 PlayGameServices
อินสแตนซ์สร้างขึ้นด้วย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
เข้าถึงผู้จัดการได้จากอินสแตนซ์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 ทั้งหมดมีการใช้งานแบบไม่พร้อมกันที่ปลอดภัยสำหรับเธรด เรียกใช้บนเธรดใดก็ได้โดยไม่ต้องล็อกภายนอก และจะดำเนินการตามลำดับที่สอดคล้องกับลําดับการเรียกใช้
เมธอดการเข้าถึง (เมธอดที่อ่านสถานะ) มี 2 รูปแบบหลักๆ เมธอดประเภทแรก (ที่มีชื่ออย่างเช่น FetchProperty()
) จะส่งผลลัพธ์แบบไม่พร้อมกันไปยังการเรียกกลับที่ระบุไว้ ส่วนเมธอดประเภทที่ 2 (ที่มีชื่ออย่างเช่น 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" ของแพลตฟอร์ม นอกจากนี้ คุณควรตรวจสอบด้วยว่าระบบเรียกกลับของผู้ใช้ทำงานอย่างรวดเร็ว เนื่องจากเธรดการเรียกกลับที่หยุดชะงักอาจทำให้เกิดปัญหาที่ผู้ใช้มองเห็นได้ (เช่น คำขอออกจากระบบที่ดำเนินการเสร็จล่าช้า)
ข้อมูลเฉพาะแพลตฟอร์ม
หากต้องการเริ่มต้นใช้งาน Play Games C++ SDK บน Android ให้ไปที่คู่มือเริ่มต้นใช้งานฉบับย่อ
อ่านเพิ่มเติม
โปรดอ่านเอกสารประกอบของคลาสที่มาพร้อมกับ SDK สำหรับ C++ ของบริการเกมของ Google Play เพื่อดูรายละเอียดเพิ่มเติม และดูตัวอย่างที่สาธิตวิธีใช้ SDK
หากเกมใช้เซิร์ฟเวอร์แบ็กเอนด์ โปรดดูหัวข้อการเปิดใช้การเข้าถึงฝั่งเซิร์ฟเวอร์ไปยังบริการเกมของ Google Play