C++ এর জন্য প্লে গেম পরিষেবা

Google সাইন-ইন API বন্ধ করার পর, আমরা ২০২৬ সালে গেমস v1 SDK সরিয়ে ফেলছি। ২০২৫ সালের ফেব্রুয়ারির পর, আপনি Google Play তে গেমস v1 SDK-এর সাথে নতুনভাবে সংহত করা শিরোনাম প্রকাশ করতে পারবেন না। আমরা আপনাকে এর পরিবর্তে গেমস v2 SDK ব্যবহার করার পরামর্শ দিচ্ছি।
পূর্ববর্তী গেম v1 ইন্টিগ্রেশন সহ বিদ্যমান শিরোনামগুলি কয়েক বছর ধরে কাজ করলেও, আপনাকে জুন 2025 থেকে v2 তে স্থানান্তরিত হতে উৎসাহিত করা হচ্ছে।
এই নির্দেশিকাটি Play Games Services v1 SDK ব্যবহারের জন্য। Play Games Services v2 এর জন্য C++ SDK এখনও উপলব্ধ নয়।

গুগল প্লে গেমস সার্ভিসেস সি++ এসডিকে গুগল প্লে গেম সার্ভিসেসের সাথে ব্যবহারের জন্য একটি সি++ এপিআই প্রদান করে এবং এটি এমন ডেভেলপারদের জন্য যাদের গেমের একটি বিদ্যমান সি++ বাস্তবায়ন রয়েছে।

বর্তমানে, SDK নিম্নলিখিত পরিষেবাগুলি বাস্তবায়ন করে:

  • অনুমোদন
  • অর্জনসমূহ
  • লিডারবোর্ড
  • ইভেন্টগুলি
  • সংরক্ষিত গেমস
  • কাছাকাছি সংযোগ (শুধুমাত্র অ্যান্ড্রয়েড)
  • খেলোয়াড়ের পরিসংখ্যান

ধারণা

উচ্চ স্তরে, আপনি এই পদক্ষেপগুলি অনুসরণ করে SDK ব্যবহার করতে পারেন:

  1. অ্যান্ড্রয়েডের জন্য একটি প্ল্যাটফর্ম কনফিগারেশন সেট আপ করুন।
  2. একটি GameServices অবজেক্ট কনফিগার এবং তৈরি করতে GameServices::Builder ব্যবহার করুন। GameServices অবজেক্ট স্বয়ংক্রিয়ভাবে সাইন ইন করার চেষ্টা করে এবং OnAuthActionFinished() কলব্যাকের মাধ্যমে ফলাফল ফেরত পাঠায়। কলব্যাকের মাধ্যমে ফেরত আসা ফলাফলটি লক্ষ্য করুন। যদি স্বয়ংক্রিয় সাইন-ইন প্রচেষ্টা ব্যর্থ হয়, তাহলে ব্যবহারকারীদের সাইন ইন করতে দেওয়ার জন্য আপনি একটি বোতাম প্রদর্শন করতে পারেন।
  3. OnAuthActionFinished() ফলাফল পাওয়ার পর, আপনি Play Games পরিষেবা কল করার জন্য GameServices অবজেক্ট এবং এর চাইল্ড ম্যানেজার ব্যবহার করতে পারেন, যার মধ্যে রয়েছে:

    • সাইন ইন করুন (অনুমোদন ব্যর্থ হওয়ার পরে): StartAuthorizationUI()
    • অর্জনগুলি আনলক করুন: Achievements().Unlock()
    • বিল্ট-ইন UI ব্যবহার করে কৃতিত্ব দেখান: Achievements().ShowAllUI()
    • উচ্চ স্কোর জমা দিন: Leaderboards().SubmitScore()
    • সাইন আউট: SignOut()
  4. GameServices অবজেক্ট ব্যবহার করা শেষ হলে, এটি রিসেট করুন অথবা ধ্বংস করুন।

আরও বিস্তারিত স্তরে:

  1. একটি প্ল্যাটফর্ম কনফিগারেশন শুরু করুন: এটি এমন একটি অবজেক্ট যাতে প্ল্যাটফর্ম-নির্দিষ্ট প্রাথমিককরণ তথ্য থাকে। অ্যান্ড্রয়েডে, প্ল্যাটফর্ম কনফিগারেশনে জাভা ভিএম এবং বর্তমান 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 পরিবেশ থাকবে; আপনার Android 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);
    
  3. আপনার GameServices অবজেক্ট পরিচালনা করার জন্য ম্যানেজার ক্লাস ব্যবহার করুন। ম্যানেজারদের একটি GameServices ইনস্ট্যান্স এবং গ্রুপ সম্পর্কিত কার্যকারিতা একসাথে অ্যাক্সেস করা হয়। এর উদাহরণগুলির মধ্যে রয়েছে Achievement এবং Leaderboard Managers। এগুলিতে কোনও ব্যবহারকারী-দৃশ্যমান অবস্থা থাকে না। ম্যানেজারদের রেফারেন্স দ্বারা ফেরত পাঠানো হয় এবং ধারণকারী GameServices ইনস্ট্যান্স তাদের জীবনচক্র নিয়ন্ত্রণ করে। আপনার ক্লায়েন্টের কখনই ম্যানেজার রেফারেন্স ধরে রাখা উচিত নয়। পরিবর্তে, আপনার ক্লায়েন্টের GameServices ইনস্ট্যান্স ধরে রাখা উচিত।

    ম্যানেজাররা অপরিবর্তনীয় মান ধরণের বস্তুর মাধ্যমে ডেটা ফেরত দেয়। এই মানগুলি কোয়েরিটি তৈরির সময় অন্তর্নিহিত ডেটার একটি সামঞ্জস্যপূর্ণ দৃষ্টিভঙ্গি প্রতিফলিত করে।

    // Submit a high score
    game_services_->Leaderboards().SubmitScore(leaderboard_id, score);
    
    // Show the default Achievements UI
    game_services_->Achievements().ShowAllUI();
    
  4. GameServices অবজেক্ট ব্যবহার করা শেষ হলে, unique_ptr এর মালিকানাধীন unique_ptrreset() কল করে পরিষ্কার করুন, অথবা unique_ptr সুযোগের বাইরে চলে গেলে স্বয়ংক্রিয়ভাবে এটি ধ্বংস করতে দিন।

থ্রেডিং মডেল

অন্যথায় উল্লেখ না করা হলে, সমস্ত 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);});

সমস্ত ব্যবহারকারীর কলব্যাক একটি ডেডিকেটেড কলব্যাক থ্রেডে আহ্বান করা হয়। এই থ্রেডটি "প্রধান থ্রেড" বা "UI থ্রেড" এর যেকোনো প্ল্যাটফর্ম ধারণা থেকে সম্ভাব্যভাবে আলাদা। আপনার এটিও নিশ্চিত করার চেষ্টা করা উচিত যে ব্যবহারকারীর কলব্যাকগুলি দ্রুত কার্যকর হয়; একটি স্থগিত কলব্যাক থ্রেড ব্যবহারকারীর-দৃশ্যমান সমস্যার কারণ হতে পারে (উদাহরণস্বরূপ, সাইন-আউট অনুরোধ বিলম্বিতভাবে সম্পন্ন করা)।

প্ল্যাটফর্ম-নির্দিষ্ট তথ্য

অ্যান্ড্রয়েডে প্লে গেমস সি++ এসডিকে ব্যবহার শুরু করতে, কুইকস্টার্ট গাইডে যান।

আরও পড়া

আরও বিস্তারিত জানার জন্য Google Play Game services C++ SDK-তে আসা ক্লাস ডকুমেন্টেশনগুলি অবশ্যই পড়ুন এবং SDK কীভাবে ব্যবহার করতে হয় তা প্রদর্শনকারী নমুনাগুলি দেখুন।

যদি আপনার গেমটি ব্যাকএন্ড সার্ভার ব্যবহার করে, তাহলে গুগল প্লে গেমস পরিষেবাগুলিতে সার্ভার-সাইড অ্যাক্সেস সক্ষম করা দেখুন।