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

במדריך הזה מוסבר איך להגדיר פרויקט משחק מקורי מסוג C או C++ לשימוש Native Games Services v2 Native SDK ושילוב שירות כניסה. כדי לבצע שילוב צריך להיכנס לחשבון כדי לשלב תכונות אחרות של Play Games Services במשחק שלכם ולשלב את Play Games Services שרת משחקים לקצה העורפי.

תכונות נתמכות

ה-SDK המקורי של Play Games Services v2 נמצא בגרסת בטא ותומך רק שירות הכניסה. התכונה עדיין לא תומכת בשירותים אחרים של Play Games Services תכונות.

מאמרי העזרה של ה-API

קובצי הכותרות של ה-SDK מכילים מסמכי עזר בנושא ממשקי ה-API. קובצי הכותרות נמצאים בתיקייה include בקובצי ה-SDK, אחרי שמסנכרנים את הפרויקט עם מאגר ה-SDK.

הדרישות

  • פרויקט משחק ששפת התכנות הראשית שלו היא C או C++.

  • פרויקט המשחק וסביבת הפיתוח צריכים לכלול Gradle הגדרת ה-build של מערכת ה-build.

לפני שמתחילים

צריך להגדיר את 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 ID. אפשר לעשות זאת על ידי הוספת השורות הבאות לקובץ:

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

הרשאה לשרת הגיימינג

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

מידע נוסף זמין במאמר server access guide