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

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

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

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

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

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

ข้อกำหนด

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

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

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

คุณต้องตั้งค่าบริการเกมของ 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 แล้ว

  • เพิ่มทรัพยากร Dependency สำหรับ SDK แบบเนทีฟสำหรับบริการเกมของ Play เวอร์ชัน 2 ดังนี้

    • 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. ระบุโปรเจ็กต์บริการเกมของ Play ในไฟล์ AndroidManifest.xml ID โดยคุณสามารถเพิ่มบรรทัดต่อไปนี้ลงในไฟล์

    <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

สำหรับข้อมูลเพิ่มเติม โปรดดู คู่มือการเข้าถึงเซิร์ฟเวอร์