بدء استخدام "خدمات ألعاب Play" للغة C وC++

يصف هذا الدليل طريقة إعداد مشروع لعبة بلغة C أو C++ لاستخدام حزمة تطوير البرامج (SDK) الأصلية للإصدار الثاني من "خدمات ألعاب Play" ودمج خدمة تسجيل الدخول يجب تسجيل الدخول للتوافق مع المتطلبات لدمج ميزات "خدمات ألعاب Play" الأخرى إلى لعبتك ودمج "خدمات ألعاب Play" في خادم اللعبة في الخلفية

الميزات المتاحة

لا تزال حزمة تطوير البرامج (SDK) الأصلية للإصدار 2 من "خدمات ألعاب Play" في مرحلة تجريبية ولا تتوافق إلا خدمة تسجيل الدخول. لا يتوافق التطبيق مع "خدمات ألعاب Play" الأخرى بعد. الميزات.

المستندات المرجعية لواجهة برمجة التطبيقات

تحتوي ملفات رؤوس حزمة SDK على مستندات مرجعية لواجهات برمجة التطبيقات. تشير رسالة الأشكال البيانية تتوفّر ملفات العناوين في المجلد include ضمن ملفات حزمة تطوير البرامج (SDK)، وهي متاحة بعد مزامنة مشروعك مع مستودع SDK.

المتطلبات

  • يشير ذلك المصطلح إلى مشروع لعبة يستخدم لغة C أو C++ الأصلية كلغة برمجة أساسية.

  • يجب أن يتوفّر في مشروع لعبتك وبيئة التطوير أداة Gradle إعداد نظام التصميم.

قبل البدء

يجب إعداد "خدمات ألعاب Play" في 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 على مستوى التطبيق، نفِّذ ما يلي:

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

  • أضِف التبعية لحزمة تطوير البرامج (SDK) الأصلية للإصدار 2 من "خدمات ألعاب Play":

    • 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". رقم التعريف يمكنك إجراء ذلك من خلال إضافة الأسطر التالية إلى الملف:

    <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" يتم عرضه تلقائيًا عند إطلاق لعبتك، فقد يغيرون رأيهم خلال جلسة اللعبة. يمكنك إعادة تشغيل طلب تسجيل الدخول من خلال الاتصال PgsGamesSignInClient_signIn طالما أنّه لم يتم تسجيل دخول أي لاعب حاليًا.

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

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

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