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

Google Play গেম পরিষেবাগুলি C++ SDK Google Play গেম পরিষেবাগুলির সাথে ব্যবহারের জন্য একটি C++ API প্রদান করে এবং এটি এমন ডেভেলপারদের জন্য যাদের তাদের গেমের বিদ্যমান C++ বাস্তবায়ন রয়েছে।

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

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

ধারণা

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

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

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

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

আরও পড়া

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

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