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