Google Play Games Services C++ SDK یک API C++ را برای استفاده با سرویسهای بازی Google Play ارائه میکند و برای توسعهدهندگانی است که یک پیادهسازی C++ از بازی خود دارند.
در حال حاضر، SDK خدمات زیر را پیاده سازی می کند:
- مجوز
- دستاوردها
- تابلوهای امتیازات
- رویدادها
- بازی های ذخیره شده
- اتصالات نزدیک (فقط اندروید)
- آمار بازیکنان
مفاهیم
در سطح بالایی، با دنبال کردن مراحل زیر از SDK استفاده میکنید:
- یک پیکربندی پلتفرم برای Android تنظیم کنید.
- از
GameServices::Builder
برای پیکربندی و ساخت شیGameServices
استفاده کنید. شیGameServices
به طور خودکار سعی می کند وارد سیستم شود و نتیجه را از طریق یک پاسخ تماسOnAuthActionFinished()
برمی گرداند. به نتیجه ای که با تماس برگشت داده شده است توجه داشته باشید. اگر تلاش برای ورود خودکار به سیستم ناموفق بود، میتوانید دکمهای را نمایش دهید که به کاربران اجازه ورود به سیستم را میدهد. پس از دریافت نتیجه
OnAuthActionFinished()
، میتوانید از شیGameServices
و مدیران فرزند آن برای برقراری تماسهای خدمات بازیهای Play استفاده کنید، از جمله:- ورود به سیستم (بعد از ناموفق بودن مجوز):
StartAuthorizationUI()
- باز کردن قفل دستاوردها:
Achievements().Unlock()
- نمایش دستاوردها با استفاده از رابط کاربری داخلی:
Achievements().ShowAllUI()
- امتیاز بالا را ارسال کنید:
Leaderboards().SubmitScore()
- خروج از سیستم:
SignOut()
- ورود به سیستم (بعد از ناموفق بودن مجوز):
وقتی استفاده از شی
GameServices
تمام شد، آن را بازنشانی یا نابود کنید.
در سطح دقیق تر:
Initialize a platform configuration: این شیئی است که حاوی اطلاعات مقداردهی اولیه پلتفرم خاص است. در اندروید، پیکربندی پلتفرم شامل جاوا 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 شما باقی میماند، باقی میماند. هنگامی کهActivity
Android شما متوقف می شود و از سر گرفته می شود، نیازی به تنظیم مجدد آن ندارید.// 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);});
همه تماسهای کاربر بر روی یک رشته تماس اختصاصی فراخوانی میشوند. این رشته به طور بالقوه از هر مفهوم پلتفرمی از "رشته اصلی" یا "رشته UI" متمایز است. همچنین باید سعی کنید از اجرای سریع تماس های کاربر اطمینان حاصل کنید. یک رشته پاسخ تماس متوقف شده ممکن است باعث مشکلات قابل مشاهده توسط کاربر شود (به عنوان مثال، تکمیل درخواست خروج با تاخیر).
اطلاعات پلتفرم خاص
برای شروع استفاده از Play Games C++ SDK در Android، به راهنمای شروع سریع بروید.
در ادامه مطلب
برای جزئیات بیشتر، اسناد کلاس را که در Google Play Services C++ SDK ارائه میشود، بخوانید و نمونههایی را که نحوه استفاده از SDK را نشان میدهند، بررسی کنید.
اگر بازی شما از سرور پشتیبان استفاده میکند، به فعال کردن دسترسی سمت سرور به خدمات بازیهای Google Play مراجعه کنید.