ตั้งค่า C หรือ C++ ดั้งเดิมเวอร์ชัน 2

เอกสารนี้จะช่วยคุณตั้งค่าโปรเจ็กต์ C++ สำหรับ v2 Native C หรือ C++ และยืนยันบริการตรวจสอบสิทธิ์

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

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

ข้อกำหนดเบื้องต้นของแอป

ตรวจสอบว่าไฟล์บิลด์ของแอปใช้ค่าต่อไปนี้

  • minSdkVersion อย่างน้อย 19
  • compileSdkVersion อย่างน้อย 28

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

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

อัปเดต build.gradle

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

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

  • เพิ่มการอ้างอิงสำหรับ Native SDK v2 (เบต้า)

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

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

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

อัปเดต 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)

อัปเดต AndroidManifest.xml

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

    <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

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