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

คู่มือนี้อธิบายวิธีตั้งค่าโปรเจ็กต์เกม C หรือ C++ แบบเนทีฟเพื่อใช้ Play Games Services v2 Native SDK และผสานรวม การตรวจสอบสิทธิ์แพลตฟอร์ม คุณต้องผสานรวมเพื่อ ผสานรวมฟีเจอร์อื่นๆ ของบริการเกมของ Play เข้ากับเกม และผสานรวมบริการเกมของ Play เข้ากับเซิร์ฟเวอร์เกมแบ็กเอนด์

ฟีเจอร์ที่รองรับ

Native SDK v2 ของบริการเกมของ Google Play อยู่ในเวอร์ชันเบต้าและรองรับเฉพาะ บริการลงชื่อเข้าใช้ แต่ยังไม่รองรับฟีเจอร์อื่นๆ ของบริการเกมของ Play

เอกสารอ้างอิง API

ไฟล์ส่วนหัวของ SDK มีเอกสารอ้างอิงสำหรับ API ไฟล์ส่วนหัวอยู่ในโฟลเดอร์ include ในไฟล์ SDK ซึ่งจะ พร้อมใช้งานหลังจากซิงค์โปรเจ็กต์กับที่เก็บ SDK

ข้อกำหนด

  • โปรเจ็กต์เกมที่ใช้ C หรือ C++ แบบเนทีฟเป็นภาษาโปรแกรมหลัก

  • โปรเจ็กต์เกมและสภาพแวดล้อมในการพัฒนาต้องตั้งค่าระบบบิลด์ Gradle

ก่อนจะเริ่มต้น

คุณต้องตั้งค่าบริการเกมของ Play ใน Google Play Console

สร้างโปรเจ็กต์เกม

ทำตามขั้นตอนต่อไปนี้เพื่อตั้งค่าโปรเจ็กต์เกม

อัปเดต CMakeLists.txt

เพิ่มโค้ดต่อไปนี้ในไฟล์ CMakeLists.txt

  find_package(com.google.android.gms.games.v2.c REQUIRED CONFIG)

  // link games_static for -DANDROID_STL=c++_static or default
  // link games_shared for -DANDROID_STL=c++_shared
  target_link_libraries(
    app PUBLIC com.google.android.gms.games.v2.c::games_static)

อัปเดต build.gradle

ในไฟล์ build.gradle ระดับแอป ให้ทำดังนี้

  • ตรวจสอบว่าได้เปิดใช้ฟีเจอร์บิลด์ Prefab แล้ว

  • เพิ่มการอ้างอิงสำหรับ Native SDK v2 ของบริการเกมของ Play โดยทำดังนี้

    • com.google.android.gms:play-services-games-v2-native-c:17.0.0-beta1

ตัวอย่างเช่น

  android {
    ...
    buildFeatures {
      prefab true
    }
    ...
  }
  dependencies {
    ...
    implementation "com.google.android.gms:play-services-games-v2-native-c:17.0.0-beta1"
  }

อัปเดต AndroidManifest.xml

  1. ในไฟล์ AndroidManifest.xml ให้กำหนดรหัสโปรเจ็กต์บริการเกมของ Play โดยการเพิ่มบรรทัดต่อไปนี้ลงในไฟล์

    <manifest>
      <application>
        <meta-data android:name="com.google.android.gms.games.APP_ID"
                   android:value="@string/game_services_project_id"/>
      </application>
    </manifest>
    
  2. สร้างแหล่งข้อมูลสตริง สำหรับรหัสโปรเจ็กต์ ซึ่งจะช่วยให้เกมเข้าถึงรหัสได้ในเวลาที่สร้าง หากต้องการสร้างทรัพยากร ให้สร้างไฟล์ project_root/app/src/main/res/values/games-ids.xml แล้วเพิ่มข้อมูลต่อไปนี้

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="game_services_project_id"
                translatable="false">add your Project ID here</string>
    </resources>
    
  3. สร้างและทดสอบเกม หากสำเร็จ เมื่อคุณเปิดเกม ระบบจะแสดงข้อความแจ้งให้ลงชื่อเข้าใช้หรือแบนเนอร์การลงชื่อเข้าใช้สำเร็จ

รับรหัสผู้เล่น

เกมของคุณสามารถเข้าถึงข้อมูลผู้เล่นสำหรับผู้เล่นที่ได้รับการตรวจสอบสิทธิ์ได้โดยการดึง รหัสผู้เล่น คุณเรียกข้อมูลรหัสผู้เล่นได้โดยเรียกใช้GetPlayerID ฟังก์ชัน ซึ่งแสดงให้เห็นในตัวอย่างต่อไปนี้

#include <assert.h>
#include "gni/gni.h"
#include "gni/gni_task.h"
#include "pgs/pgs_play_games.h"
#include "pgs/pgs_players_client.h"

// A callback for a GniTask returned from PgsPlayersClient_getCurrentPlayerId.
void OnGetCurrentPlayerIdCompleteCallback(GniTask *task, void *user_data) {

   if (!GniTask_isSuccessful(task)) {
      const char *error_message = nullptr;
      GniTask_getErrorMessage(task, &error_message);

      // Log error message here.

      GniString_destroy(error_message);
      GniTask_destroy(task);
      return;
   }

   const char *result = nullptr;
   PgsPlayersClient_getCurrentPlayerId_getResult(task, &result);

   // Log player id here.

   GniString_destroy(result);
   GniTask_destroy(task);
}

// Gets the player ID.
void GetPlayerId(jobject main_activity) {
   static const PgsPlayersClient *players_client =
           PgsPlayGames_getPlayersClient(main_activity);

   GniTask *get_current_player_id_task =
           PgsPlayersClient_getCurrentPlayerId(players_client);
   assert(get_current_player_id_task != nullptr);
   GniTask_addOnCompleteCallback(get_current_player_id_task,
                                 OnGetCurrentPlayerIdCompleteCallback,
                                 nullptr);
}

// Entry point for our test app
void TestPGSNative(JNIEnv *env, jobject main_activity) {
   JavaVM *java_vm;
   env->GetJavaVM(&java_vm);

   GniCore_init(java_vm, main_activity);

   GetPlayerId(main_activity);
}

เปิดข้อความแจ้งให้ลงชื่อเข้าใช้อีกครั้ง

หากผู้เล่นปฏิเสธข้อความแจ้งให้ลงชื่อเข้าใช้บริการเกมของ Play ครั้งแรกซึ่งจะแสดงโดยอัตโนมัติเมื่อเกมเปิดตัว ผู้เล่นอาจเปลี่ยนใจในระหว่างเซสชันเกม คุณสามารถเปิดใช้ข้อความแจ้งให้ลงชื่อเข้าใช้อีกครั้งได้โดยเรียกใช้ PgsGamesSignInClient_signIn ตราบใดที่ไม่มีผู้เล่นที่ได้รับการตรวจสอบสิทธิ์อยู่ในขณะนั้น

การให้สิทธิ์เซิร์ฟเวอร์เกม

เมื่อผู้เล่นตรวจสอบสิทธิ์เข้าสู่บริการเกมของ Play สำเร็จแล้ว ไคลเอ็นต์เกมจะขอรหัสการให้สิทธิ์เซิร์ฟเวอร์ที่เซิร์ฟเวอร์เกมแบ็กเอนด์ใช้เพื่อสื่อสารกับบริการเกมของ Play ได้อย่างปลอดภัย ซึ่งจะช่วยให้เซิร์ฟเวอร์เกมของคุณ ดึง อัปเดต และจัดเก็บข้อมูลสำหรับผู้เล่นที่ได้รับการตรวจสอบสิทธิ์ได้ คุณเรียกข้อมูลรหัสการให้สิทธิ์เซิร์ฟเวอร์ได้โดยเรียกใช้ฟังก์ชัน PgsGamesSignInClient_requestServerSideAccess

ดูข้อมูลเพิ่มเติมได้ที่คู่มือการเข้าถึงเซิร์ฟเวอร์