คู่มือนี้อธิบายวิธีตั้งค่าโปรเจ็กต์เกม C หรือ C++ แบบเนทีฟเพื่อใช้ Native SDK ของบริการเกมของ Play v2 และผสานรวมการตรวจสอบสิทธิ์แพลตฟอร์ม คุณต้องผสานรวมเพื่อ ผสานรวมฟีเจอร์อื่นๆ ของบริการเกมของ Play เข้ากับเกม และผสานรวมบริการเกมของ Play เข้ากับเซิร์ฟเวอร์เกมแบ็กเอนด์
ฟีเจอร์ที่รองรับ
Native SDK ของบริการเกมของ Play v2 อยู่ในเวอร์ชันเบต้าและรองรับเฉพาะ บริการลงชื่อเข้าใช้ แต่ยังไม่รองรับฟีเจอร์อื่นๆ ของบริการเกมของ 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 ของบริการเกมของ Play v2 โดยทำดังนี้
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
ในไฟล์
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>สร้างแหล่งข้อมูลสตริง สำหรับรหัสโปรเจ็กต์ ซึ่งจะช่วยให้เกมเข้าถึงรหัสได้ในเวลาที่สร้าง หากต้องการสร้างทรัพยากร ให้สร้างไฟล์
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>สร้างและทดสอบเกม หากสำเร็จ เมื่อคุณเปิดเกม ระบบจะ แสดงข้อความแจ้งให้ลงชื่อเข้าใช้หรือแบนเนอร์การลงชื่อเข้าใช้ที่สำเร็จ
รับรหัสผู้เล่น
เกมของคุณสามารถเข้าถึงข้อมูลผู้เล่นสำหรับผู้เล่นที่ได้รับการตรวจสอบสิทธิ์ได้โดยการเรียกข้อมูลรหัสผู้เล่น คุณสามารถดึงข้อมูลรหัสผู้เล่นได้โดยการเรียกใช้ฟังก์ชัน 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
ดูข้อมูลเพิ่มเติมได้ที่คู่มือการเข้าถึงเซิร์ฟเวอร์