במדריך הזה מוסבר איך להגדיר פרויקט משחק מקורי ב-C או ב-C++ כך שישתמש ב-Play Games Services v2 Native SDK וישלב את שירות הכניסה. שילוב הכניסה נדרש כדי לשלב תכונות אחרות של Play Games Services במשחק, וכדי לשלב את Play Games Services בשרת המשחק בקצה העורפי.
תכונות נתמכות
ערכת ה-SDK המקורית של Play Games Services בגרסה 2 נמצאת בגרסת בטא ותומכת רק בשירות הכניסה. עדיין אין תמיכה בתכונות אחרות של Play Games Services.
מאמרי העזרה של ה-API
קובצי הכותרת של ה-SDK מכילים מסמכי עזרה לגבי ממשקי ה-API. קובצי הכותרת נמצאים בתיקייה include
בקובצי ה-SDK, שזמינים אחרי שמסנכרנים את הפרויקט עם מאגר ה-SDK.
הדרישות
פרויקט משחק שבו נעשה שימוש בשפת C או C++ ילידית כשפת התכנות הראשית.
אתם צריכים להגדיר את מערכת הפיתוח של Gradle בפרויקט של המשחק ובסביבת הפיתוח.
לפני שמתחילים
עליכם להגדיר את Play Games Services ב-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
ברמת האפליקציה מבצעים את הפעולות הבאות:
מוודאים שתכונה ה-build של prefab מופעלת.
מוסיפים את התלות ב-SDK המקורי של Play Games Services 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 Games Services. כדי לעשות את זה, צריך להוסיף את השורות הבאות לקובץ:<manifest> <application> <meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/game_services_project_id"/> </application> </manifest>
יוצרים משאב מחרוזת למזהה הפרויקט. כך המשחק יוכל לגשת למזהה בזמן ה-build. כדי ליצור את המשאב, יוצרים את הקובץ
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 Games Services שמוצגת באופן אוטומטי כשהמשחק שלכם מושק, הוא עשוי לשנות את דעתו במהלך סשן המשחק. אפשר להפעיל מחדש את ההודעה על כניסה על ידי קריאה ל-PgsGamesSignInClient_signIn
, כל עוד אין שחקנים שמחוברים כרגע.
הרשאה לשרת הגיימינג
לאחר ששחקן נכנס בהצלחה ל-Play Games Services, לקוח המשחק שלכם יכול לבקש קוד הרשאה לשרת, שבו שרת המשחקים בקצה העורפי יכול להשתמש כדי לתקשר באופן מאובטח עם Play Games Services. כך שרת המשחקים יוכל לאחזר, לעדכן ולאחסן נתונים של הנגן המחובר. אפשר לאחזר את קוד ההרשאה של השרת באמצעות קריאה לפונקציה PgsGamesSignInClient_requestServerSideAccess
.
מידע נוסף זמין במדריך לגישה לשרת.