บริการเกมของ Play สำหรับ C++

หลังจากเลิกใช้งาน API ของ Google Sign-In แล้ว เราจะนำ SDK v1 ของเกมออกในปี 2026 หลังจากเดือนกุมภาพันธ์ 2025 คุณจะเผยแพร่ เกมที่เพิ่งผสานรวมกับ SDK v1 ของ Games ใน Google Play ไม่ได้ เราขอแนะนำให้ใช้ SDK v2 ของ Games แทน
แม้ว่าเกมที่มีอยู่ซึ่งผสานรวมกับเกมเวอร์ชัน 1 ก่อนหน้าจะยังคงทำงานได้อีก 2-3 ปี แต่เราขอแนะนำให้คุณย้ายข้อมูลไปยัง v2 ตั้งแต่เดือนมิถุนายน 2025 เป็นต้นไป
คู่มือนี้มีไว้สำหรับการใช้ SDK บริการเกมของ Play เวอร์ชัน 1 SDK สำหรับ C++ สำหรับ บริการเกมของ Play v2 ยังไม่พร้อมใช้งาน

SDK สำหรับ C++ ของบริการเกมของ Google Play มี API สำหรับ C++ เพื่อใช้กับบริการเกมของ Google Play และมีไว้สำหรับนักพัฒนาแอปที่มีการติดตั้งใช้งานเกมด้วย C++ อยู่แล้ว

ปัจจุบัน SDK ใช้บริการต่อไปนี้

  • การให้สิทธิ์
  • ความสำเร็จ
  • ลีดเดอร์บอร์ด
  • กิจกรรม
  • เกมที่บันทึกไว้
  • การเชื่อมต่อ Nearby (Android เท่านั้น)
  • สถิติผู้เล่น

แนวคิด

ในระดับสูง คุณใช้ SDK ได้โดยทำตามขั้นตอนต่อไปนี้

  1. ตั้งค่าการกำหนดค่าแพลตฟอร์มสำหรับ Android
  2. ใช้ GameServices::Builder เพื่อกำหนดค่าและสร้างออบเจ็กต์ GameServices ออบเจ็กต์ GameServices จะพยายามลงชื่อเข้าใช้โดยอัตโนมัติ และแสดงผลลัพธ์ผ่านการเรียกกลับ OnAuthActionFinished() จดบันทึกผลลัพธ์ ที่ส่งคืนโดยการเรียกกลับ หากการพยายามลงชื่อเข้าใช้อัตโนมัติไม่สำเร็จ คุณจะ แสดงปุ่มเพื่อให้ผู้ใช้ลงชื่อเข้าใช้ได้
  3. หลังจากได้รับOnAuthActionFinished()ผลลัพธ์แล้ว คุณสามารถใช้ออบเจ็กต์ GameServices และผู้จัดการย่อยเพื่อทำการเรียกใช้บริการ Play Games ได้ ซึ่งรวมถึง

    • ลงชื่อเข้าใช้ (หลังจากให้สิทธิ์ไม่สำเร็จ): StartAuthorizationUI()
    • ปลดล็อกรางวัลพิเศษ: Achievements().Unlock()
    • แสดงรางวัลพิเศษโดยใช้ UI ในตัว: Achievements().ShowAllUI()
    • ส่งคะแนนสูงสุด: Leaderboards().SubmitScore()
    • ออกจากระบบ: SignOut()
  4. เมื่อใช้ออบเจ็กต์ GameServices เสร็จแล้ว ให้รีเซ็ตหรือทำลายออบเจ็กต์

ในระดับที่ละเอียดยิ่งขึ้น

  1. เริ่มต้นการกำหนดค่าแพลตฟอร์ม: นี่คือออบเจ็กต์ที่มีข้อมูลการเริ่มต้นเฉพาะแพลตฟอร์ม ใน Android การกำหนดค่าแพลตฟอร์มจะมี Java 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);
    
  2. สร้างออบเจ็กต์ 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);
    
  3. ใช้คลาส 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();
    
  4. เมื่อใช้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 ให้ไปที่คู่มือเริ่มใช้งานฉบับย่อ

อ่านเพิ่มเติม

โปรดอ่านเอกสารประกอบของคลาสที่มาพร้อมกับ C++ SDK ของบริการเกมของ Google Play เพื่อดูรายละเอียดเพิ่มเติม และดูตัวอย่างที่แสดงวิธีใช้ SDK

หากเกมใช้เซิร์ฟเวอร์แบ็กเอนด์ โปรดดูการเปิดใช้การเข้าถึงฝั่งเซิร์ฟเวอร์สำหรับบริการเกมของ Google Play