เริ่มต้นใช้งานบริการเกมของ Play สำหรับภาษา C++

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

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

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

แนวคิด

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

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

    • ลงชื่อเข้าใช้ (หลังจากให้สิทธิ์ไม่สำเร็จ): 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 ทำได้ คุณจะไม่ต้องเริ่มต้นใหม่เมื่อ 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. ใช้คลาส 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 ทั้งหมดมี การติดตั้งใช้งานแบบอะซิงโครนัสที่ปลอดภัยต่อชุดข้อความ สามารถเรียกใช้ในชุดข้อความใดก็ได้ที่ไม่มี การล็อกภายนอก และจะดำเนินการตามลำดับที่สอดคล้องกับการเรียกใช้ คำสั่งซื้อ

เมธอด Accessor (วิธีที่อ่านสถานะ) มีรูปแบบหลักๆ 2 รูปแบบ แท็ก ประเภทของเมธอด (ที่มีชื่ออย่างเช่น FetchProperty()) จะให้ผลลัพธ์แบบไม่พร้อมกัน กับ Callback ที่มีให้ ตัวที่สอง (ที่มีชื่อเช่น 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);});

ระบบจะเรียกใช้ Callback ของผู้ใช้ทั้งหมดในชุดข้อความ Callback เฉพาะ ชุดข้อความนี้ อาจแตกต่างจากแนวคิดแพลตฟอร์มของ "เทรดหลัก" หรือ "UI Thread" นอกจากนี้ คุณควรตรวจสอบว่าการเรียกกลับของผู้ใช้ทำงานได้อย่างรวดเร็ว ชุดข้อความ Callback ที่หยุดชะงัก อาจทำให้เกิดปัญหาที่ผู้ใช้มองเห็นได้ (เช่น การออกจากระบบล่าช้า คำขอ)

ข้อมูลจำเพาะของแพลตฟอร์ม

ในการเริ่มต้นใช้งาน Play Games C++ SDK บน Android ให้ไปที่ คู่มือเริ่มใช้งานฉบับย่อ

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

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

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