يوضّح هذا الدليل كيفية إعداد مشروع لعبة بلغة 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 على مستوى التطبيق، اتّبِع الخطوات التالية:
تأكَّد من تفعيل ميزة إنشاء العناصر الجاهزة.
أضِف تبعية الإصدار 2 من حزمة تطوير البرامج (SDK) الأصلية لـ "خدمات ألعاب 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
في ملف
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>أنشئ مورد سلسلة لمعرّف مشروعك. يسمح هذا الإجراء للعبتك بالوصول إلى المعرّف في وقت الإنشاء. لإنشاء المرجع، أنشئ الملف
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>إنشاء لعبتك واختبارها في حال نجاح عملية الربط، سيظهر لك عند تشغيل اللعبة إشعار يطلب منك تسجيل الدخول أو بانر يشير إلى نجاح عملية تسجيل الدخول.
الحصول على رقم تعريف اللاعب
يمكن للعبتك الوصول إلى معلومات اللاعبين الخاصة بلاعب تمت المصادقة عليه من خلال استرداد معرّف اللاعب. يمكنك استرداد معرّف اللاعب من خلال استدعاء الدالة 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.
لمزيد من المعلومات، يُرجى الاطّلاع على دليل الوصول إلى الخادم.