הגדרת גרסה 2 של Native C או C++‎

במסמך הזה נסביר איך להגדיר את פרויקט C++‎ ל-v2 Native C או C++‎ ולאמת את שירות האימות.

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

צריך להגדיר את Play Games Services ב-Google Play Console.

דרישות מוקדמות לאפליקציה

מוודאים שקובץ ה-build של האפליקציה כולל את הערכים הבאים:

  • minSdkVersion מתוך 19 ומעלה
  • compileSdkVersion מתוך 28 ומעלה

הגדרת פרויקט המשחק

כדי להגדיר את פרויקט המשחק, צריך לבצע את השלבים הבאים.

עדכון הקובץ build.gradle

בקובץ build.gradle ברמת האפליקציה, מבצעים את הפעולות הבאות:

  • מוודאים שתכונת ה-build של prefab מופעלת.

  • מוסיפים את יחסי התלות של Native SDK גרסה 2 (בטא):

    • com.google.android.gms:play-services-games-v2-native-c:21.0.0-beta1

הנה דוגמה:

  android {
    ...
    buildFeatures {
      prefab true
    }
    ...
  }
  dependencies {
    ...
    implementation "com.google.android.gms:play-services-games-v2-native-c:21.0.0-beta1"
  }

עדכון הקובץ 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)

עדכון הקובץ AndroidManifest.xml

  1. כדי להגדיר את מזהה הפרויקט של Play Games Services בקובץ AndroidManifest.xml, מוסיפים את השורות הבאות:

    <manifest>
      <application>
        <meta-data android:name="com.google.android.gms.games.APP_ID"
                   android:value="@string/game_services_project_id"/>
      </application>
    </manifest>
    
  2. יוצרים משאב מחרוזת למזהה הפרויקט. כך המשחק יוכל לגשת למזהה בזמן הבנייה. כדי ליצור את המשאב, יוצרים את הקובץ 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.

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