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