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

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

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

تتوفّر الإصدار 2 من حزمة تطوير البرامج (SDK) الأصلية في "خدمات ألعاب 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.grale

في ملف 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.

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