با Play Games Services برای C++ شروع کنید

Google Play Games Services C++ SDK یک API C++ را برای استفاده با سرویس‌های بازی Google Play ارائه می‌کند و برای توسعه‌دهندگانی است که یک پیاده‌سازی C++ از بازی خود دارند.

در حال حاضر، SDK خدمات زیر را پیاده سازی می کند:

  • مجوز
  • دستاوردها
  • تابلوهای امتیازات
  • رویدادها
  • بازی های ذخیره شده
  • اتصالات نزدیک (فقط اندروید)
  • آمار بازیکنان

مفاهیم

در سطح بالایی، با دنبال کردن مراحل زیر از SDK استفاده می‌کنید:

  1. یک پیکربندی پلتفرم برای Android تنظیم کنید.
  2. از GameServices::Builder برای پیکربندی و ساخت شی GameServices استفاده کنید. شی GameServices به طور خودکار سعی می کند وارد سیستم شود و نتیجه را از طریق یک پاسخ تماس OnAuthActionFinished() برمی گرداند. به نتیجه ای که با تماس برگشت داده شده است توجه داشته باشید. اگر تلاش برای ورود خودکار به سیستم ناموفق بود، می‌توانید دکمه‌ای را نمایش دهید که به کاربران اجازه ورود به سیستم را می‌دهد.
  3. پس از دریافت نتیجه OnAuthActionFinished() ، می‌توانید از شی GameServices و مدیران فرزند آن برای برقراری تماس‌های خدمات بازی‌های Play استفاده کنید، از جمله:

    • ورود به سیستم (بعد از ناموفق بودن مجوز): StartAuthorizationUI()
    • باز کردن قفل دستاوردها: Achievements().Unlock()
    • نمایش دستاوردها با استفاده از رابط کاربری داخلی: Achievements().ShowAllUI()
    • امتیاز بالا را ارسال کنید: Leaderboards().SubmitScore()
    • خروج از سیستم: SignOut()
  4. وقتی استفاده از شی GameServices تمام شد، آن را بازنشانی یا نابود کنید.

در سطح دقیق تر:

  1. 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);
    
  2. یک شی 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);
    
  3. از کلاس های 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();
    
  4. هنگامی که استفاده از شی 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 مراجعه کنید.