תחילת העבודה עם Play Games Services עבור C ו-C++

במדריך הזה מוסבר איך להגדיר פרויקט משחק מקורי ב-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++‎ ילידית כשפת התכנות הראשית.

  • מערכת ה-build של 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

  1. בקובץ 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>
    
  2. יוצרים משאב מחרוזת למזהה הפרויקט. כך המשחק יוכל לגשת למזהה בזמן ה-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>
    
  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 Games שמופיעה באופן אוטומטי כשהמשחק מופעל, יכול להיות שהוא ישנה את דעתו במהלך סשן המשחק. אפשר להפעיל מחדש את ההודעה על כניסה על ידי קריאה ל-PgsGamesSignInClient_signIn, כל עוד אין שחקנים שמחוברים כרגע.

הרשאה לשרת המשחק

אחרי שהשחקן נכנס ל-Play Games Services, לקוח המשחק יכול לבקש קוד הרשאה לשרת, ששרת המשחק לקצה העורפי יכול להשתמש בו כדי לתקשר בצורה מאובטחת עם Play Games Services. כך שרת המשחקים יוכל לאחזר, לעדכן ולאחסן נתונים של השחקן שמחובר לחשבון. אפשר לאחזר את קוד ההרשאה של השרת באמצעות קריאה לפונקציה PgsGamesSignInClient_requestServerSideAccess.

מידע נוסף זמין במדריך לגישה לשרת.