Google Play Games Services C++ SDK มี C++ API สําหรับใช้กับบริการเกมของ Google Play และมีไว้สําหรับนักพัฒนาซอฟต์แวร์ที่ใช้เกม C++ ที่มีอยู่แล้ว
ปัจจุบัน SDK ใช้บริการต่อไปนี้
- การให้สิทธิ์
- ความสำเร็จ
- ลีดเดอร์บอร์ด
- กิจกรรม
- เกมที่บันทึกไว้
- การเชื่อมต่อใกล้เคียง (Android เท่านั้น)
- สถิติผู้เล่น
แนวคิด
ที่ระดับสูง ให้ใช้ SDK โดยทําตามขั้นตอนต่อไปนี้
- กําหนดค่าแพลตฟอร์มสําหรับ Android
- ใช้
GameServices::Builder
เพื่อกําหนดค่าและสร้างออบเจ็กต์GameServices
ออบเจ็กต์GameServices
จะพยายามลงชื่อเข้าใช้โดยอัตโนมัติและแสดงผล ผ่านการเรียกกลับOnAuthActionFinished()
บันทึกผลลัพธ์ ที่โค้ดเรียกกลับ หากลงชื่อเข้าใช้อัตโนมัติไม่สําเร็จ คุณสามารถแสดงปุ่มเพื่อให้ผู้ใช้ลงชื่อเข้าใช้ได้ หลังจากได้รับผลการค้นหา
OnAuthActionFinished()
คุณสามารถใช้ออบเจ็กต์GameServices
และผู้จัดการย่อยของออบเจ็กต์นี้เพื่อเรียกใช้บริการเกมของ Play ได้ ซึ่งรวมถึง- ลงชื่อเข้าใช้ (หลังจากการให้สิทธิ์ไม่สําเร็จ):
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 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
ผู้จัดการจะเข้าถึงได้จากอินสแตนซ์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 Games เพื่อดูรายละเอียดเพิ่มเติม และดูตัวอย่างที่สาธิตวิธีการใช้ SDK
หากเกมใช้เซิร์ฟเวอร์แบ็กเอนด์ โปรดดูการเปิดใช้งานการเข้าถึงฝั่งเซิร์ฟเวอร์สําหรับบริการเกมของ Google Play