بعد إيقاف Google Sign-In API نهائيًا، سنزيل الإصدار v1 من حزمة تطوير البرامج (SDK) الخاصة بـ "خدمات ألعاب Play". في عام 2026. بعد فبراير 2025، لن يكون بإمكانك نشر الألعاب التي تتكامل مع الإصدار v2 من حزمة SDK الخاصة بـ "خدمات ألعاب Play". ننصحك باستخدام الإصدار v2 حزمة SDK الخاصة بـ "خدمات ألعاب Play". بدلاً من ذلك.
مع أنّ التطبيقات الحالية التي تتكامل مع الإصدار v1 من حزمة SDK الخاصة بـ "خدمات ألعاب Play" ستستمر في العمل لعدّة سنوات، ننصحك
بالانتقال إلى الإصدار v2
بدءًا من يونيو 2025.
هذا الدليل مخصّص لاستخدام الإصدار v1 من حزمة SDK الخاصة بـ "خدمات ألعاب Play". حزمة SDK الخاصة بالإصدار 2 من "خدمات ألعاب Play" للتطبيقات بلغة ++C غير متاحة بعد.
توفّر حزمة تطوير البرامج (SDK) الخاصة بلغة C++ في "خدمات ألعاب Google Play" واجهة برمجة تطبيقات بلغة C++ لاستخدامها مع "خدمات ألعاب Google Play"، وهي مخصّصة للمطوّرين الذين لديهم تنفيذ حالي للعبة بلغة C++.
تنفّذ حزمة تطوير البرامج (SDK) حاليًا الخدمات التالية:
- التفويض
- الإنجازات
- لوحات الصدارة
- الفعاليات
- حفظ التقدم في الألعاب
- Nearby Connections (على أجهزة Android فقط)
- إحصاءات اللاعب
المفاهيم
بشكل عام، يمكنك استخدام حزمة تطوير البرامج (SDK) باتّباع الخطوات التالية:
- إعداد ضبط النظام الأساسي لنظام التشغيل Android
- استخدِم
GameServices::Builderلإعداد وإنشاء عنصرGameServices. يحاول العنصرGameServicesتلقائيًا تسجيل الدخول، ويعرض النتيجة من خلال معاودة الاتصالOnAuthActionFinished(). دوِّن النتيجة التي تعرضها دالة معاودة الاتصال. إذا تعذّرت محاولة تسجيل الدخول التلقائي، يمكنك عرض زر للسماح للمستخدمين بتسجيل الدخول. بعد تلقّي النتيجة
OnAuthActionFinished()، يمكنك استخدام العنصرGameServicesوعناصر الإدارة الفرعية الخاصة به لإجراء طلبات إلى "خدمات ألعاب Play"، بما في ذلك:- تسجيل الدخول (بعد تعذُّر التفويض):
StartAuthorizationUI() - فتح قفل الإنجازات:
Achievements().Unlock() - عرض الإنجازات باستخدام واجهة المستخدم المضمّنة:
Achievements().ShowAllUI() - إرسال نتيجة عالية:
Leaderboards().SubmitScore() - تسجيل الخروج:
SignOut()
- تسجيل الدخول (بعد تعذُّر التفويض):
عند الانتهاء من استخدام الكائن
GameServices، أعِد ضبطه أو أتلِفه.
على مستوى أكثر تفصيلاً:
تهيئة إعدادات النظام الأساسي: هذا عنصر يحتوي على معلومات تهيئة خاصة بالنظام الأساسي. على نظام التشغيل Android، يحتوي إعداد النظام الأساسي على Java VM ومؤشر إلى
Activityالحالي:// In android_main(), create a platform configuration // and bind the object activity. // Alternately, attach the activity in JNI_Onload(). gpg::AndroidPlatformConfiguration platform_configuration; platform_configuration.SetActivity(state->activity->clazz);إنشاء عنصر
GameServices: هذا العنصر هو نقطة الدخول الرئيسية لوظائف "خدمات ألعاب Google Play". يتم إنشاء مثيلاتGameServicesباستخدامGameServices::Builder.في معظم عمليات التنفيذ، سيظل عنصر
GameServicesمعيّن ثابتًا ما دام بيئة C الخاصة بك كذلك، ولن تحتاج إلى إعادة تهيئته عند إيقاف تطبيق AndroidActivityمؤقتًا ثم استئنافه.// Creates a GameServices object that has lambda callbacks. game_services_ = gpg::GameServices::Builder() .SetDefaultOnLog(gpg::LogLevel::VERBOSE) .SetOnAuthActionStarted([started_callback](gpg::AuthOperation op) { is_auth_in_progress_ = true; started_callback(op); }) .SetOnAuthActionFinished([finished_callback](gpg::AuthOperation op, gpg::AuthStatus status) { LOGI("Sign in finished with a result of %d", status); is_auth_in_progress_ = false; finished_callback(op, status); }) .Create(pc);استخدِم فئات Manager لإدارة عنصر
GameServices. يمكن الوصول إلى المدراء من مثيلGameServices، كما يتم تجميع الوظائف ذات الصلة بالمجموعة معًا. وتتضمّن الأمثلة على ذلك أدوات إدارة الإنجازات وقوائم الصدارة. ولا تحتوي على أي حالة مرئية للمستخدم. يتم عرض المدراء حسب المرجع، ويتحكّم مثيلGameServicesالذي يحتوي على المدراء في دورة حياتهم. يجب ألا يحتفظ عميلك بأي مرجع خاص بالحساب الإداري. بدلاً من ذلك، يجب أن يحتفظ عميلك بنسخة منGameServices.تعرض أدوات الإدارة البيانات من خلال عناصر من نوع القيمة غير القابلة للتغيير. تعكس هذه القيم عرضًا متسقًا للبيانات الأساسية في الوقت الذي تم فيه تقديم طلب البحث.
// Submit a high score game_services_->Leaderboards().SubmitScore(leaderboard_id, score); // Show the default Achievements UI game_services_->Achievements().ShowAllUI();عند الانتهاء من استخدام العنصر
GameServices، يمكنك تنظيفه من خلال استدعاءreset()علىunique_ptrالذي يملكه، أو من خلال السماح لـunique_ptrبتدميره تلقائيًا عند الخروج من النطاق.
نموذج سلاسل المحادثات
ما لم يُذكر خلاف ذلك، تتضمّن جميع طرق GameServices وManager عمليات تنفيذ غير متزامنة وآمنة للاستخدام المتزامن. ويمكن استدعاؤها في أي سلسلة محادثات بدون قفل خارجي، وسيتم تنفيذها بترتيب يتوافق مع ترتيب استدعائها.
تتوفّر طريقتان رئيسيتان لطُرق الوصول (التي تقرأ الحالة). يقدّم النوع الأول من الطرق (التي تحمل أسماء مثل FetchProperty()) النتائج بشكل غير متزامن إلى دالة ردّ تم توفيرها، بينما يعرض النوع الثاني (الذي يحمل أسماء مثل FetchPropertyBlocking()) النتائج بشكل متزامن إلى سلسلة التعليمات البرمجية التي تم استدعاؤها.
// Blocking callback
gpg::AchievementManager::FetchAllResponse fetchResponse =
game_services_->Achievements().FetchAllBlocking(std::chrono::milliseconds(1000));
// Non-blocking callback
game_services_->Achievements().FetchAll(gpg::DataSource::CACHE_OR_NETWORK,
[] (gpg::AchievementManager::FetchAllResponse response) {
LogI("Achievement response status: %d", response.status);});
يتم استدعاء جميع عمليات رد الاتصال الخاصة بالمستخدمين في سلسلة رد اتصال مخصّصة. قد تختلف سلسلة التعليمات هذه عن أي مفهوم "سلسلة تعليمات رئيسية" أو "سلسلة تعليمات واجهة المستخدم" في أي منصة. عليك أيضًا محاولة ضمان تنفيذ عمليات معاودة الاتصال الخاصة بالمستخدمين بسرعة، لأنّ تعليق سلسلة عمليات معاودة الاتصال قد يتسبّب في حدوث مشاكل يلاحظها المستخدمون (مثل تأخُّر إكمال طلب تسجيل الخروج).
المعلومات الخاصة بالمنصّة
لبدء استخدام حزمة تطوير البرامج (SDK) الخاصة بـ "خدمات ألعاب Play" للتطبيقات بلغة C++ على Android، انتقِل إلى دليل البدء السريع.
محتوى إضافي للقراءة
احرص على قراءة مستندات الفئة المضمّنة في حزمة تطوير البرامج (SDK) الخاصة بلغة ++C في "خدمات ألعاب Google Play" للحصول على مزيد من التفاصيل، واطّلِع على الأمثلة التي توضّح كيفية استخدام حزمة تطوير البرامج (SDK).
إذا كانت لعبتك تستخدم خادمًا خلفيًا، اطّلِع على مقالة تفعيل إمكانية الوصول إلى "خدمات ألعاب Google Play" من جهة الخادم.