Play Games PC SDK ব্যবহার করে আপনার গেমকে শক্তিশালী করুন

প্লে গেমস পিসি এসডিকে (Play Games PC SDK) ব্যবহার করে আপনি পিসিতে আপনার গেম তৈরি ও তা থেকে আয় করার জন্য গুগল প্লে পরিষেবা (Google Play services) অ্যাক্সেস করতে পারবেন। প্লে বিলিং (Play Billing) ব্যবহার করে ডিজিটাল কন্টেন্ট বিক্রি করুন, প্লে গেমস (Play Games) ব্যবহার করে নির্বিঘ্নে সাইন-ইন করুন এবং প্লে ইন্টিগ্রিটি (Play Integrity) দিয়ে যাচাই করুন যে আপনার অ্যাপ্লিকেশনে ব্যবহারকারীদের বৈধ অধিকার রয়েছে।

আসন্ন ফিচার, স্টেবল রিলিজ এবং ইন্টিগ্রেশন আর্কিটেকচার সম্পর্কে একটি সামগ্রিক ধারণা পেতে প্লে গেমস পিসি রোডম্যাপ দেখুন।

শুরু করতে প্রস্তুত?

পূর্বশর্ত

  • প্লে কনসোলের ভিতরে একটি অ্যাপ এন্ট্রি তৈরি করুন এবং একটি প্লে প্যাকেজ নেম দাবি করুন।

  • পিসির জন্য গুগল প্লে গেমস ডাউনলোড ও ইনস্টল করুন এবং আপনার গুগল অ্যাকাউন্ট দিয়ে সাইন ইন করুন।

ধাপ ১ : আপনার প্রজেক্টে SDK যোগ করুন

সি++

  • প্লে গেমস পিসি C++ এসডিকে ডাউনলোড করুন।

  • API হেডার ফোল্ডারটি includes/ -এ আপনার অ্যাপ্লিকেশনের কোডবেসে কপি করুন।

  • আপনার টার্গেট আর্কিটেকচারের উপর নির্ভর করে, imports/ ডিরেক্টরি থেকে পুনঃবন্টনযোগ্য ফাইলগুলো আপনার অ্যাপ্লিকেশনের প্রজেক্টে কপি করুন:

  • ৬৪-বিট (x64) এর জন্য: imports/x64/ থেকে ফাইলগুলো কপি করুন।

  • ৩২-বিট (x86)-এর জন্য: imports/x86/ থেকে ফাইলগুলো কপি করুন।

  • আপনার প্রজেক্টটিকে play_pc_sdk.lib এর সাথে লিঙ্ক করুন, যাতে play_pc_sdk.dll এর বিষয়বস্তুতে অ্যাক্সেস পাওয়া যায়।

সি#

ধাপ ২ : একটি ম্যানিফেস্ট ফাইল যোগ করুন

আপনার গেমের ভেতর থেকে SDK ব্যবহার করার আগে, আপনাকে আপনার গেম এক্সিকিউটেবলটিকে সেই প্লে প্যাকেজ নামের সাথে যুক্ত করতে হবে, যা আপনি প্লে কনসোলের ভেতরে দাবি করেছেন। এটি করার জন্য, আপনার গেমের এক্সিকিউটেবল ফাইলটি যে ডিরেক্টরিতে আছে, সেখানেই একটি manifest.xml ফাইল যোগ করতে হবে।

manifest.xml ফাইলের বিষয়বস্তুর উদাহরণ:

<?xml version="1.0" encoding="utf-8"?>
<Manifest version="1">
    <Application>
        <PackageName>com.example.package</PackageName>
    </Application>
</Manifest>

manifest.xml ফাইলের অবস্থানের উদাহরণ:

C:\Program Files
└───Example Game
    ├───Game.exe
    └───manifest.xml

ধাপ ৩ : আপনার গেমটি ডিজিটালভাবে স্বাক্ষর করুন

আপনার গেমটি SDK ব্যবহার করার আগে, গেমটির এক্সিকিউটেবল ফাইলকে অবশ্যই একটি Authenticode ডিজিটাল সিগনেচার ব্যবহার করে ডিজিটালভাবে স্বাক্ষরিত হতে হবে। কীভাবে একটি এক্সিকিউটেবল ফাইল স্বাক্ষর করতে হয় তার নির্দেশাবলীর জন্য SignTool-এর ডকুমেন্টেশন দেখুন।

আপনার গেমটি ডিজিটালভাবে স্বাক্ষর করার প্রক্রিয়াটি সম্পন্ন হলে, কনফিগারেশনের জন্য সার্টিফিকেটের তথ্য আপনার গুগল প্রতিনিধির কাছে পাঠিয়ে দিন।

ধাপ ৪ : SDK চালু করুন

আপনার গেম চালু হওয়ার সময় SDK-টি ইনিশিয়ালাইজ করুন। এটি ব্যবহারকারীর কোনো হস্তক্ষেপ ছাড়াই স্বয়ংক্রিয়ভাবে সম্পন্ন হওয়া উচিত এবং আপনার গেম উইন্ডো রেন্ডার করার আগে সফল ইনিশিয়ালাইজেশন যাচাই করে নেওয়ার পরামর্শ দেওয়া হয়। এটি যত দ্রুত সম্ভব ত্রুটিগুলো চিহ্নিত করে ও সমাধান করে সেরা ব্যবহারকারীর অভিজ্ঞতা প্রদান করে এবং এমন ক্ষেত্রে আপনার গেম প্রসেস বন্ধ করার প্রয়োজন হলে গেম উইন্ডোটি ক্ষণিকের জন্য প্রদর্শিত হওয়া এড়ায়।

API ইনিশিয়ালাইজ করার জন্য GooglePlayInitialize (C++) অথবা GooglePlayInitialization.InitializeAsync (C#) কল করে SDK ব্যবহার শুরু করুন। আমরা ইনিশিয়ালাইজেশনের সময় GooglePlayInitializeParams এ আপনার গেমের অ্যান্ড্রয়েড প্যাকেজ নেম পাস করার পরামর্শ দিই। এটি গ্লোবাল স্টেট সেট আপ করে, SDK রানটাইমের সাথে সংযোগ স্থাপন করে এবং অ্যাপ্লিকেশনটি সঠিকভাবে চালু হয়েছে কিনা তা যাচাই করে। অন্য কোনো API ব্যবহার করার আগে আপনাকে অবশ্যই এটি কল করতে হবে এবং কন্টিনিউয়েশন কলব্যাকটি InitializeResult::ok() (C++) অথবা Result.IsOk (C#) true এর সমান করে সম্পূর্ণ করতে হবে।

সি++

// Initialize the SDK as part of the startup sequence of your
// application.
auto promise = std::make_shared<std::promise<InitializeResult>>();
GooglePlayInitializeParams params;
// Replace with your game's package name.
params.package_name = "com.example.game";
GooglePlayInitialize(
  [promise] (InitializeResult result) {
    promise->set_value(std::move(result));
  }, params);

auto initialize_result = promise->get_future().get();
if (initialize_result.ok()) {
  // The SDK succeeded with initialization. Continue with the startup
  // sequence of the game.
  // ...

  // Retrieve the operating environment and device form factor.
  auto env = initialize_result.value().environment;
  auto form_factor = initialize_result.value().form_factor;
  // ...
} else if (
    initialize_result.code() ==
    InitializationError::kActionRequiredShutdownClientProcess) {
  // The SDK failed to initialize and has requested that your game
  // process exit as soon as possible.
  exit(1);
} else {
  // The SDK failed to initialize for an alternative reason. It is
  // still generally recommended that you exit the game process as
  // soon as possible, because it won't be possible to access any
  // APIs in the SDK. Critical operations such as verifying the user
  // owns a valid license to your game won't be possible.
  // ...
}

সি#

// SDK Clients
private BillingClient _billingClient;
private IntegrityClient _integrityClient;

// Stored product information
private string _offerToken;

private async void InitializeSDK()
{
    // The factory provides the necessary handler for initialization.
    var initializationHandler =
        PlayPcSdkFactory.InitializationHandler;
    var initializeParams = new GooglePlayInitializeParams {
        // Replace with your game's package name.
        PackageName = "com.example.game"
    };
    var result = await GooglePlayInitialization.InitializeAsync(
        initializationHandler, initializeParams);

    if (result.IsOk)
    {
        // Use the factory to get Unity-compatible instances of the
        // clients
        _billingClient = PlayPcSdkFactory.CreateBillingClient();
        _integrityClient = PlayPcSdkFactory.CreateIntegrityClient();

        // Retrieve the operating environment and device form factor.
        var env = result.Value.Environment;
        var form_factor = result.Value.FormFactor;

        // SDK is ready for use
    }
    else
    {
        // Handle specific, actionable errors
        if (result.Code ==
            InitializationError.ActionRequiredShutdownClientProcess)
        {
            Log("This game must be launched through the Google Play Games client. Exit all game processes immediately, GPG will relaunch the game safely.");
            Application.Quit();
        }
    }
}

যদি kActionRequiredShutdownClientProcess (C++) / InitializationError.ActionRequiredShutdownClientProcess (C#) কোড সহ ইনিশিয়ালাইজেশন ব্যর্থ হয়, তাহলে যত তাড়াতাড়ি সম্ভব গেম প্রসেসটি বন্ধ করে দিন । SDK-এর রানটাইম ব্যবহারকারীকে সাহায্য করার চেষ্টা করবে, তবে এর জন্য আপনার গেমের কোনো অতিরিক্ত পদক্ষেপের প্রয়োজন হবে না। উদাহরণস্বরূপ, যদি ব্যবহারকারীর কাছে গেমটির বৈধ লাইসেন্স না থাকে, তাহলে Google Play Games ব্যবহারকারীকে একটি কপি কেনার জন্য অনুরোধ করবে। অন্যান্য ত্রুটির ক্ষেত্রেও আপনার গেম প্রসেসটি বন্ধ করে দেওয়া উচিত, কারণ সেক্ষেত্রে আপনি SDK ব্যবহার করে গুরুত্বপূর্ণ কাজগুলো করতে পারবেন না, যেমন ব্যবহারকারীর কাছে আপনার গেমের বৈধ লাইসেন্স আছে কিনা তা যাচাই করা।

একটি অসফল প্রতিক্রিয়া নিম্নলিখিত অবস্থাগুলোর মধ্যে একটি নির্দেশ করতে পারে:

  • এসডিকে রানটাইম ইনস্টল করা নেই, ডিভাইসে চলছে না অথবা এটি একটি পুরোনো সংস্করণ যা আপনার গেমে সমন্বিত এসডিকে-র সাথে সামঞ্জস্যপূর্ণ নয়।

  • এসডিকে রানটাইম গেমটির অ্যাপ্লিকেশন পরিচয় যাচাই করতে পারেনি। এর কারণ হতে পারে একটি অবৈধ manifest.xml অথবা ডেভেলপ করার সময় ডেভেলপার মোড চালু না করে এসডিকে ব্যবহার করা। এটি ছাড়া আপনার গেমের এক্সিকিউটেবল ফাইলটিকে আপনার প্লে প্যাকেজ নামের সাথে নিবন্ধিত ডিজিটাল সার্টিফিকেট দিয়ে ডিজিটালভাবে স্বাক্ষর করা আবশ্যক।

  • গেম এক্সিকিউটেবলটি গুগল প্লে গেমস ক্লায়েন্টের মাধ্যমে চালু করা হয়নি।

  • গুগল প্লে গেমসের সক্রিয় ব্যবহারকারীর কাছে অ্যাপ্লিকেশনটির কোনো লাইসেন্স নেই।

ধাপ ৫ : (ঐচ্ছিক) একাধিক গেম-প্রক্রিয়া সমর্থন করা

যদি আপনার গেম একাধিক প্রসেস ব্যবহার করে এবং পিসিতে গুগল প্লে গেমস দ্বারা চালু হওয়া প্রসেসটি থেকে ভিন্ন কোনো প্রসেস প্লে গেমস পিসি এসডিকে ব্যবহার করে, তাহলে এই অতিরিক্ত ইন্টিগ্রেশন ধাপগুলো সম্পূর্ণ করুন। উদাহরণস্বরূপ, যদি পিসিতে গুগল প্লে গেমস আপনার গেমের লঞ্চারটি চালু করে, এবং তারপর আপনার লঞ্চারটি সেই গেম প্রসেসটি শুরু করে যা এসডিকে-এর সাথে ইন্টারঅ্যাক্ট করবে।

  1. গুগল প্লে গেমস ফর পিসি দ্বারা সরাসরি চালু করা প্রক্রিয়াটিকে অবশ্যই প্লে গেমস পিসি এসডিকে-এর সফল সূচনা যাচাই করতে হবে।

    এটি যত তাড়াতাড়ি সম্ভব ত্রুটিগুলো প্রকাশ করার মাধ্যমে সর্বোত্তম ব্যবহারকারী অভিজ্ঞতা প্রদান করে। উল্লেখ্য যে, সরাসরি চালু হওয়া প্রসেসের পাশাপাশি SDK ব্যবহারকারী চাইল্ড-প্রসেসকেও ইনিশিয়ালাইজেশন সম্পন্ন করতে হবে।

  2. চাইল্ড-প্রসেসে প্লে গেমস পিসি এসডিকে ব্যবহার করতে, কমান্ড লাইন প্যারামিটারগুলো তৈরি হওয়া চাইল্ড-প্রসেসটিতে ফরোয়ার্ড করুন।

    কমান্ড লাইন প্যারামিটার ফরওয়ার্ডিং-এর উদাহরণ:

    Processes hierarchy tree:
    
    GooglePlayGames.exe
    └───YourGameLauncher.exe --gpg_args=abc --your_args=123
        └───YourGame.exe --gpg_args=abc --your_args=123
    

    এই উদাহরণে আমরা একটি প্রসেস হায়ারার্কি দেখতে পাচ্ছি যেখানে Google Play Games for PC ( GooglePlayGames.exe ) কিছু উদাহরণ প্যারামিটার ( --gpg_args=abc --your_args=123 ) সহ গেমটি ( YourGameLauncher.exe ) চালু করে। এরপর গেমটি একটি চাইল্ড-প্রসেস ( YourGame.exe ) তৈরি করে যা Play Games PC SDK ব্যবহার করে। এটি সম্ভব করার জন্য, Google Play Games for PC দ্বারা চালু করা গেম প্রসেসটি তাকে দেওয়া কমান্ড লাইন প্যারামিটারগুলো চাইল্ড-প্রসেসের কাছে ফরোয়ার্ড করে দেয়।

  3. গেমটি চলা বন্ধ হলে সমস্ত প্রসেস বন্ধ করে দিন।

    যখন কোনো ব্যবহারকারী আপনার গেমটি বন্ধ করে দেয় অথবা kActionRequiredShutdownClientProcess মতো কোনো SDK ইনিশিয়ালাইজেশন ব্যর্থতার কারণে গেমটি বন্ধ হয়ে যায়, তখন আপনার গেম দ্বারা তৈরি করা সমস্ত প্রসেস বন্ধ করে দিন। এটি নিশ্চিত করে যে, পরবর্তী বার যখন Google Play Games for PC ক্লায়েন্টের মাধ্যমে আপনার গেমটি চালু করা হবে, তখন অন্য কোনো সক্রিয় অ্যাকাউন্টে স্যুইচ করার মতো নতুন পরিবর্তনগুলো কার্যকর হবে।

পরবর্তী পদক্ষেপ

আপনার IDE-তে ডেভেলপ করার সময় SDK ব্যবহার করুন:

আপনার অ্যাপে গুগল প্লে পিসি ফিচারগুলো যোগ করুন: