توفر حزمة SDK لخدمات ألعاب Google Play C++ واجهة برمجة تطبيقات C++ للاستخدام مع ألعاب Google Play وهي مخصصة للمطورين الذين لديهم تنفيذ حالي لـ C++ من لعبتهم.
في الوقت الحالي، تنفِّذ حزمة تطوير البرامج (SDK) الخدمات التالية:
- التفويض
- الإنجازات
- أشكال ليدربورد
- فعاليات
- حفظ التقدم في الألعاب
- ميزة "الاتصالات عن قرب" (Android فقط)
- إحصاءات اللاعبين
المفاهيم
يمكنك استخدام حزمة تطوير البرامج (SDK) على مستوى عالٍ باتباع الخطوات التالية:
- إعداد ضبط النظام الأساسي لنظام التشغيل Android
- استخدام
GameServices::Builder
لضبطGameServices
وإنشائه الخاص بك. يحاول الكائنGameServices
تسجيل الدخول تلقائيًا ويعيد عرضه. النتيجة عن طريق معاودة الاتصالOnAuthActionFinished()
. دوِّن النتيجة التي يرجعها رد الاتصال. في حال تعذُّر محاولة تسجيل الدخول تلقائيًا، يمكنك عرض زر للسماح للمستخدمين بتسجيل الدخول. بعد تلقّي نتيجة
OnAuthActionFinished()
، يمكنك استخدام عنصرGameServices
والمدراء الفرعيين له لإجراء المكالمات على "خدمات ألعاب Play"، بما في ذلك:- تسجيل الدخول (بعد تعذُّر التفويض):
StartAuthorizationUI()
- فتح قفل الإنجازات:
Achievements().Unlock()
- عرض الإنجازات باستخدام واجهة المستخدم المدمجة:
Achievements().ShowAllUI()
- إرسال نتيجة عالية:
Leaderboards().SubmitScore()
- تسجيل الخروج:
SignOut()
- تسجيل الدخول (بعد تعذُّر التفويض):
عند الانتهاء من استخدام الكائن
GameServices
، عليك إعادة ضبطه أو إتلافه.
على مستوى أكثر تفصيلاً:
تهيئة تهيئة نظام أساسي: هذا كائن يحتوي على معلومات التهيئة الخاصة بالنظام الأساسي. في نظام Android، تحتوي تهيئة النظام الأساسي على جهاز Java افتراضي ومؤشر إلى
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);
استخدِم صفوف "الحساب الإداري" لإدارة عنصر
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
إلى تدميرها تلقائيًا عند الخروج من النطاق.
نموذج Threading
ما لم يُذكر خلاف ذلك، تتضمّن كل طرق GameServices
والحساب الإداري
عمليات تنفيذ غير متزامنة وآمنة بما يتوافق مع سلسلة المحادثات يمكن استدعاؤها في أي سلسلة محادثات بدون
القفل الخارجي وتنفيذه بترتيب يتوافق مع استدعائه
طلبك.
تأتي طرق الموجهات (التي تكون حالة القراءة) في صيغتين رئيسيتين. الأول
يوفر نوع الطريقة (بأسماء مثل 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، انتقِل إلى دليل البدء السريع
محتوى إضافي للقراءة
احرص على قراءة مستندات الصف الواردة في لعبة Google Play. خدمات C++ SDK لمزيد من التفاصيل، ومراجعة النماذج التي توضّح كيفية استخدام حزمة SDK.
إذا كانت لعبتك تستخدم خادم خلفية، يُرجى الاطّلاع على تفعيل الوصول من جهة الخادم إلى "خدمات ألعاب Google Play"