إعداد الإصدار 2 من Native C أو C++

يساعدك هذا المستند في إعداد مشروع C++ لاستخدام الإصدار 2 من Native C أو C++ والتحقّق من خدمة المصادقة.

قبل البدء

يجب إعداد "خدمات ألعاب Play" في Google Play Console.

المتطلبات الأساسية للتطبيق

تأكَّد من أنّ ملف الإصدار في تطبيقك يستخدم القيم التالية:

  • minSdkVersion من 19 أو أعلى
  • compileSdkVersion من 28 أو أعلى

إعداد مشروع لعبتك

أكمِل الخطوات التالية لإعداد مشروع لعبتك.

تعديل ملف build.gradle

في ملف build.gradle على مستوى التطبيق، اتّبِع الخطوات التالية:

  • تأكَّد من تفعيل ميزة إنشاء العناصر الجاهزة.

  • أضِف التبعية لحزمة تطوير البرامج (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" في ملف 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);
}

إعادة تشغيل طلب تسجيل الدخول

إذا رفض أحد اللاعبين طلب تسجيل الدخول الأوّلي إلى &quot;خدمات ألعاب Play&quot; الذي يظهر تلقائيًا عند تشغيل لعبتك، قد يغيّر رأيه أثناء جلسة اللعب. يمكنك إعادة عرض طلب تسجيل الدخول من خلال استدعاء PgsGamesSignInClient_signIn طالما لم تتم مصادقة أي لاعبين.

تفويض خادم اللعبة

بعد أن ينجح أحد اللاعبين في إثبات ملكية حسابه على &quot;خدمات ألعاب Play&quot;، يمكن لبرنامج تشغيل اللعبة طلب رمز تفويض الخادم الذي يمكن لخادم الخلفية للعبة استخدامه للتواصل بشكل آمن مع &quot;خدمات ألعاب Play&quot;. يتيح ذلك لخادم لعبتك استرداد بيانات اللاعب الذي تم التحقّق من هويته وتعديلها وتخزينها. يمكنك استرداد رمز التفويض الخاص بالخادم من خلال استدعاء الدالة PgsGamesSignInClient_requestServerSideAccess.

لمزيد من المعلومات، يُرجى الاطّلاع على دليل الوصول إلى الخادم.