پس از منسوخ شدن رابط برنامهنویسی کاربردی ورود گوگل (Google Sign-In API)، ما در سال ۲۰۲۶ کیت توسعه نرمافزاری بازیها نسخه ۱ (games v1 SDK) را حذف خواهیم کرد. پس از فوریه ۲۰۲۵، شما قادر به انتشار عناوینی که به تازگی با کیت توسعه نرمافزاری بازیها نسخه ۱ (games v1 SDK) ادغام شدهاند، در گوگل پلی نخواهید بود. توصیه میکنیم به جای آن از کیت توسعه نرمافزاری بازیها نسخه ۲ (games v2 SDK) استفاده کنید.
در حالی که عناوین موجود با بازیهای قبلی نسخه ۱ ادغامشده تا چند سال دیگر به کار خود ادامه میدهند، توصیه میشود از ژوئن ۲۰۲۵ به نسخه ۲ مهاجرت کنید .
این راهنما برای استفاده از SDK نسخه ۱ سرویس بازیهای Play Games است. SDK مربوط به C++ برای سرویس بازیهای Play Games نسخه ۲ هنوز در دسترس نیست.
کیت توسعه نرمافزار C++ سرویسهای بازیهای گوگل پلی، یک رابط برنامهنویسی کاربردی (API) سیپلاسپلاس برای استفاده با سرویسهای بازی گوگل پلی ارائه میدهد و برای توسعهدهندگانی در نظر گرفته شده است که یک پیادهسازی سیپلاسپلاس از بازی خود دارند.
در حال حاضر، SDK سرویسهای زیر را پیادهسازی میکند:
- مجوز
- دستاوردها
- جدول امتیازات
- رویدادها
- بازیهای ذخیره شده
- اتصالات نزدیک (فقط اندروید)
- آمار بازیکن
مفاهیم
در سطح بالا، شما با دنبال کردن این مراحل از SDK استفاده میکنید:
- پیکربندی پلتفرم را برای اندروید تنظیم کنید.
- از یک
GameServices::Builderبرای پیکربندی و ساخت یک شیءGameServicesاستفاده کنید. شیءGameServicesبه طور خودکار سعی در ورود به سیستم میکند و نتیجه را از طریق فراخوانیOnAuthActionFinished()برمیگرداند. به نتیجهای که توسط فراخوانی برگردانده میشود توجه کنید. اگر تلاش برای ورود خودکار ناموفق بود، میتوانید دکمهای را نمایش دهید تا به کاربران اجازه ورود داده شود. پس از دریافت نتیجهی
OnAuthActionFinished()، میتوانید از شیءGameServicesو زیرمجموعهی Managers آن برای فراخوانی سرویسهای Play Games استفاده کنید، از جمله:- ورود (پس از ناموفق بودن احراز هویت):
StartAuthorizationUI() - باز کردن قفل دستاوردها:
Achievements().Unlock() - نمایش دستاوردها با استفاده از رابط کاربری داخلی:
Achievements().ShowAllUI() - ارسال بالاترین امتیاز:
Leaderboards().SubmitScore() - خروج از سیستم:
SignOut()
- ورود (پس از ناموفق بودن احراز هویت):
وقتی کارتان با شیء
GameServicesتمام شد، آن را ریست یا نابود کنید.
در سطح جزئیتر:
مقداردهی اولیه پیکربندی پلتفرم: این شیء حاوی اطلاعات مقداردهی اولیه مختص پلتفرم است. در اندروید، پیکربندی پلتفرم شامل ماشین مجازی جاوا و یک اشارهگر به
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اندروید شما متوقف و دوباره از سر گرفته میشود، آن را دوباره مقداردهی اولیه کنید.// 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موجود، چرخه حیات آنها را کنترل میکند. کلاینت شما هرگز نباید یک ارجاع Manager را نگه دارد. در عوض، کلاینت شما باید نمونه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 دارای پیادهسازیهای غیرهمزمان و thread-safe هستند. آنها را میتوان بدون قفل خارجی در هر thread فراخوانی کرد و به ترتیبی مطابق با ترتیب فراخوانیشان اجرا خواهند شد.
متدهای Accessor (آنهایی که وضعیت را میخوانند) در دو نوع اصلی وجود دارند. نوع اول متد (با نامهایی مانند FetchProperty() ) به صورت ناهمگام نتایج خود را به یک callback ارائه شده ارائه میدهد؛ نوع دوم (با نامهایی مانند FetchPropertyBlocking() ) به صورت همزمان نتایج خود را به thread فراخواننده برمیگرداند.
// 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);});
تمام فراخوانیهای کاربر در یک نخ فراخوانی اختصاصی فراخوانی میشوند. این نخ به طور بالقوه با هر مفهوم پلتفرمی از "نخ اصلی" یا "نخ رابط کاربری" متمایز است. همچنین باید سعی کنید مطمئن شوید که فراخوانیهای کاربر به سرعت اجرا میشوند. یک نخ فراخوانی متوقف شده ممکن است باعث مشکلات قابل مشاهده توسط کاربر شود (به عنوان مثال، تأخیر در تکمیل درخواست خروج).
اطلاعات مربوط به پلتفرم
برای شروع استفاده از کیت توسعه نرمافزاری Play Games C++ در اندروید، به راهنمای شروع سریع مراجعه کنید.
مطالعه بیشتر
برای جزئیات بیشتر، حتماً مستندات کلاس موجود در SDK مربوط به C++ سرویسهای بازی گوگل پلی را مطالعه کنید و نمونههایی را که نحوه استفاده از SDK را نشان میدهند، بررسی کنید.
اگر بازی شما از یک سرور پشتیبان استفاده میکند، به فعال کردن دسترسی سمت سرور به سرویسهای بازیهای گوگل پلی مراجعه کنید.