একতার সাথে Google Play বিলিং লাইব্রেরি ব্যবহার করুন৷

গুগল প্লে বিলিং প্লাগইনটি ইউনিটির অন্তর্নির্মিত পরিষেবা এবং অ্যাপ-মধ্যস্থ কেনাকাটার জন্য সম্পদ, যাকে ইউনিটি আইএপি বলা হয়, প্রসারিত করে, যাতে আপনার গেমটিকে গুগল প্লে বিলিং লাইব্রেরির সমস্ত সর্বশেষ বৈশিষ্ট্য সরবরাহ করা যায়। এই নির্দেশিকাটি প্লাগইনটি ব্যবহারের জন্য আপনার প্রকল্পটি কীভাবে সেট আপ করবেন তা ব্যাখ্যা করে। এই নির্দেশিকাটি ইউনিটিতে আপনার গেমে গুগল প্লে বিলিং লাইব্রেরির বৈশিষ্ট্যগুলি কীভাবে বাস্তবায়ন করবেন তাও বর্ণনা করে।

গুগল প্লে বিলিং প্লাগইন সেট আপ করুন

প্লাগইন সেট আপ করতে, এই লিঙ্ক করা প্রতিটি বিভাগের ধাপগুলি সম্পূর্ণ করুন:

  1. ইউনিটি IAP অ্যাবস্ট্রাকশন লেয়ারটি সক্রিয় করুন
  2. প্লাগইনটি ডাউনলোড করে আমদানি করুন
  3. প্লাগইনের বিল্ড সেটিংস কনফিগার করুন
  4. প্লাগইনটি সক্রিয় করুন

ইউনিটি IAP অ্যাবস্ট্রাকশন লেয়ার সক্রিয় করুন

গুগল প্লে বিলিং প্লাগইনটি ইউনিটি আইএপি-র সাথে অন্তর্ভুক্ত একটি অ্যাবস্ট্রাকশন লেয়ারের উপর তৈরি, তাই প্লাগইনটি ডাউনলোড এবং আমদানি করার আগে আপনাকে এই অ্যাবস্ট্রাকশন লেয়ারটি সক্ষম করতে হবে। ইউনিটি আইএপি অ্যাবস্ট্রাকশন লেয়ারটি সক্ষম করতে, নিম্নলিখিতগুলি করুন:

  1. নিম্নলিখিত ইউনিটি টিউটোরিয়ালে সমস্ত ধাপ সম্পূর্ণ করুন: ইউনিটি সার্ভিসেসের জন্য আপনার প্রকল্প সেট আপ করুন
  2. নিম্নলিখিত ইউনিটি টিউটোরিয়ালে সমস্ত ধাপ সম্পূর্ণ করুন: ইউনিটি IAP পরিষেবা সক্ষম করুন

প্লাগইনটি ডাউনলোড এবং আমদানি করুন

প্লাগইনটি .unitypackage ফর্ম্যাটে ইউনিটি প্যাকেজ হিসেবে পাঠানো হয়। প্লাগইনটি ডাউনলোড এবং আমদানি করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. GitHub-এর রিপোজিটরির রিলিজ পৃষ্ঠা থেকে Google Play Plugins for Unity-এর সর্বশেষ সংস্করণটি ডাউনলোড করুন।
  2. ইউনিটি মেনু বার থেকে, Assets > Import Package > Custom Package এ ক্লিক করুন।

  3. আপনি .unitypackage ফাইলটি কোথায় ডাউনলোড করেছেন তা চিহ্নিত করুন এবং এটি নির্বাচন করুন।

  4. ইমপোর্ট ইউনিটি প্যাকেজ ডায়ালগে, সমস্ত সম্পদ নির্বাচিত রেখে আমদানি করুন ক্লিক করুন।

প্যাকেজ আমদানির পর, আপনার প্রকল্পের সম্পদে GooglePlayPlugins (Assets ফোল্ডারের মূলে) নামে একটি নতুন ফোল্ডার যোগ করা হয়। এই ফোল্ডারে প্লাগইনের জন্য সমস্ত Google Play Billing Library সম্পদ রয়েছে।

বিল্ড সেটিংস কনফিগার করুন

যেহেতু প্লাগইনটি ইউনিটি IAP প্রসারিত করে, তাই ইউনিটি দ্বন্দ্বের সম্মুখীন হবে এবং একটি Android APK তৈরি করতে ব্যর্থ হবে যদি না ইউনিটি IAP-তে কিছু পুরানো, ওভারল্যাপিং নির্ভরতা বিল্ড থেকে সরিয়ে ফেলা হয়। প্লাগইনটি আপনার প্রকল্প থেকে দ্বন্দ্বপূর্ণ লাইব্রেরিগুলি সরানোর একটি স্বয়ংক্রিয় উপায় প্রদান করে। এই দ্বন্দ্বগুলি সমাধান করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. ইউনিটি মেনু বার থেকে, গুগল > প্লে বিলিং > বিল্ড সেটিংস নির্বাচন করুন।

  2. Play Billing Build Settings উইন্ডোতে, Fix এ ক্লিক করুন। এটি দ্বন্দ্ব সমাধান করে এবং দ্বন্দ্বপূর্ণ Unity IAP ফাইলগুলিকে একটি ব্যাকআপ ডিরেক্টরিতে স্থানান্তর করে। Fix এ ক্লিক করার পরে, বোতামটি Restore এ পরিবর্তিত হয়, যেখানে আপনি মূল, দ্বন্দ্বপূর্ণ ফাইলগুলি পুনরুদ্ধার করতে ক্লিক করতে পারেন।

প্লাগইনটি সক্রিয় করুন

প্লাগইনটি সক্রিয় করতে, ইউনিটি IAP এর Google Play এর বাস্তবায়নকে Google Play Billing প্লাগইন দিয়ে প্রতিস্থাপন করুন। উদাহরণস্বরূপ, ইউনিটি IAP Purchaser Script ব্যবহার করার সময়, আপনাকে StandardPurchaseModule পরিবর্তন করতে হবে যা IAP বিল্ডারে পাস করা হয়েছে Google.Play.Billing.GooglePlayStoreModule ব্যবহার করার জন্য:

// Create a builder using the GooglePlayStoreModule.
var configurationBuilder =
    ConfigurationBuilder.Instance(Google.Play.Billing.GooglePlayStoreModule.Instance());

যদি আপনার গেমটি একাধিক প্ল্যাটফর্মের জন্য একই পারচেসার স্ক্রিপ্ট ব্যবহার করে, তাহলে ইউনিটি অন্যান্য প্ল্যাটফর্মের জন্য নিজস্ব IAP সমাধান ব্যবহার করা চালিয়ে যাবে কিনা তা নিশ্চিত করার জন্য আপনার একটি প্ল্যাটফর্ম চেক যোগ করা উচিত:

ConfigurationBuilder builder;
if (Application.platform == RuntimePlatform.Android)
{
  builder = ConfigurationBuilder.Instance(
      Google.Play.Billing.GooglePlayStoreModule.Instance());
}
else
{
  builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
}

যদি আপনি গুগল প্লে স্টোর ছাড়াও অন্যান্য অ্যান্ড্রয়েড অ্যাপ স্টোরে আপনার গেমটি প্রকাশ করেন, তাহলে গুগল প্লে স্টোর নির্বাচন করার সময়ই আপনার ডিফল্ট ইউনিটি আইএপি বাস্তবায়ন প্রতিস্থাপন করা উচিত:

ConfigurationBuilder builder;
if (Application.platform == RuntimePlatform.Android
       && SelectedAndoidAppStore == AppStore.GooglePlay)
{
  builder = ConfigurationBuilder.Instance(
      Google.Play.Billing.GooglePlayStoreModule.Instance());
}
else
{
  builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
}

আপনার গেমে Google Play বিলিং লাইব্রেরি বৈশিষ্ট্যগুলি প্রয়োগ করুন

গুগল প্লে বিলিং প্লাগইন ইউনিটি আইএপি পরিষেবাগুলিকে প্রসারিত করে, তাই আপনি সাধারণ ক্রয় কর্মপ্রবাহ পরিচালনা করতে একই ইউনিটি এপিআই ব্যবহার করতে পারেন। মনে রাখবেন যে গুগল প্লে বিলিং লাইব্রেরি এবং অন্যান্য অ্যাপ স্টোরের জন্য ইউনিটির স্ট্যান্ডার্ড আইএপি বাস্তবায়নের মধ্যে পার্থক্যের কারণে এপিআই আচরণে কিছু ছোটখাটো পরিবর্তন হয়েছে। আপনি যদি ইউনিটি আইএপি এপিআইতে নতুন হন, তাহলে মৌলিক ক্রয় প্রবাহ কীভাবে বাস্তবায়ন করবেন তার উদাহরণের জন্য ইউনিটি আইএপি টিউটোরিয়ালে "একটি ক্রয় স্ক্রিপ্ট তৈরি করা" বিভাগটি দেখুন।

গুগল প্লে বিলিং লাইব্রেরিতে এমন কিছু বৈশিষ্ট্যও রয়েছে যা গুগল প্লে স্টোরের জন্য অনন্য। আপনি একটি বর্ধিত ইন্টারফেসের মাধ্যমে এই বৈশিষ্ট্যগুলি অ্যাক্সেস করতে পারেন। এই বিভাগের বাকি অংশটি আপনার গেমে এই অনন্য গুগল প্লে বিলিং লাইব্রেরি বৈশিষ্ট্যগুলি কীভাবে প্রয়োগ করবেন তা বর্ণনা করে।

বিলম্বিত কেনাকাটা সক্ষম করুন

গুগল প্লে বিলম্বিত ক্রয় সমর্থন করে—যাকে পেন্ডিং ট্র্যাস্যাকেশন বা পেন্ডিং ক্রয়ও বলা হয়—যেখানে ব্যবহারকারীরা একটি ক্রয় তৈরি করতে পারেন এবং পরে নগদ ইন স্টোর ব্যবহার করে এটি সম্পূর্ণ করতে পারেন।

বিলম্বিত ক্রয় সক্ষম করতে, আপনার IAP বিল্ডার ব্যবহার করে EnableDeferredPurchase() পদ্ধতিতে কল করে আপনার মডিউলের কনফিগারেশন পরিবর্তন করুন:

// Create a builder using a GooglePlayStoreModule.
var configurationBuilder =
    ConfigurationBuilder.Instance(Google.Play.Billing.GooglePlayStoreModule.Instance());
// Enable deferred purchases
configurationBuilder.Configure<Google.Play.Billing.IGooglePlayConfiguration>()
    .EnableDeferredPurchase();

এরপর, প্লে স্টোর এক্সটেনশন ব্যবহার করে একটি বিলম্বিত ক্রয় কলব্যাক বাস্তবায়ন করুন:

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Set the deferred purchases callback.
_playStoreExtensions.SetDeferredPurchaseListener(
    delegate(Product product)
    {
        // Do not grant the item here. Instead, record the purchase and remind
        // the user to complete the transaction in the Play Store.
    });

অস্পষ্ট অ্যাকাউন্ট আইডিগুলি Google Play-তে পাস করুন

অপব্যবহার সনাক্তকরণ সহজতর করার জন্য, যেমন অল্প সময়ের মধ্যে একই অ্যাকাউন্টে অনেক ডিভাইস কেনাকাটা করছে কিনা তা সনাক্ত করার জন্য আপনি অস্পষ্ট ব্যবহারকারী অ্যাকাউন্ট আইডিগুলি Google Play-তে পাঠাতে পারেন।

একটি অস্পষ্ট অ্যাকাউন্ট আইডি পাস করতে, এক্সটেনশন API থেকে SetObfuscatedAccountId() পদ্ধতিটি কল করুন:

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Pass an obfuscated account ID.
_playStoreExtensions.SetObfuscatedAccountId(obfuscatedAccountId);

অস্পষ্ট প্রোফাইল আইডিগুলি Google Play তে পাস করুন

জালিয়াতি সনাক্তকরণের সুবিধার্থে আপনি একটি অস্পষ্ট প্রোফাইল আইডি Google Play তে পাস করতে পারেন, যেমন অল্প সময়ের মধ্যে একই অ্যাকাউন্টে অনেক ডিভাইস কেনাকাটা করছে কিনা তা সনাক্ত করা। এটি একটি অস্পষ্ট ব্যবহারকারী অ্যাকাউন্ট আইডি পাস করার মতো। উভয় ক্ষেত্রেই আইডিটি একজন একক ব্যবহারকারীকে প্রতিনিধিত্ব করে, তবে প্রোফাইল আইডি আপনাকে একক অ্যাপের মধ্যে থাকা একাধিক প্রোফাইল জুড়ে একক ব্যবহারকারীকে অনন্যভাবে সনাক্ত করতে দেয়। আপনি Google Play তে একটি অস্পষ্ট প্রোফাইল আইডি পাঠানোর পরে, আপনি পরে ক্রয়ের রসিদে সেই আইডিটি পুনরুদ্ধার করতে পারেন।

একটি অস্পষ্ট প্রোফাইল আইডি পাস করতে, আপনার IAP বিল্ডার ব্যবহার করে SetObfuscatedProfileId() পদ্ধতিটি কল করে আপনার মডিউলের কনফিগারেশন পরিবর্তন করুন:

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Pass an obfuscated profile ID.
_playStoreExtensions.SetObfuscatedProfileId(obfuscatedProfileId);

সাবস্ক্রিপশনের জন্য মূল্য পরিবর্তন নিশ্চিত করুন

গুগল প্লে আপনাকে একটি সক্রিয় সাবস্ক্রিপশনের মূল্য পরিবর্তন করার অনুমতি দেয়। পরিবর্তন কার্যকর হওয়ার আগে আপনার গেমের ব্যবহারকারীদের অবশ্যই যেকোনো মূল্য পরিবর্তন নিশ্চিত করতে হবে। ব্যবহারকারীদের তাদের সাবস্ক্রিপশনের মূল্য পরিবর্তন নিশ্চিত করতে অনুরোধ করতে, ConfirmSubscriptionPriceChange() পদ্ধতিতে কল করুন:

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

_playStoreExtensions.ConfirmSubscriptionPriceChange(productId,
    delegate (bool success)
    {
        // Returns whether the user has accepted the new price or not.
    });

ইউনিটি এপিআই আচরণে পরিবর্তন

যখন আপনি Google Play Billing প্লাগইন ব্যবহার করেন, তখন বেশিরভাগ API গুলি অন্যান্য অ্যাপ স্টোরের জন্য Unity-এর স্ট্যান্ডার্ড IAP বাস্তবায়নের মতোই আচরণ করে। তবে, কিছু ক্ষেত্রে API গুলি ভিন্নভাবে আচরণ করবে। এই বিভাগটি এই আচরণগত পার্থক্যগুলি বর্ণনা করে।

ডেভেলপার পেলোড সমর্থিত নয়

গুগল প্লে ডেভেলপার পেলোড বন্ধ করে দিয়েছে এবং এটিকে আরও অর্থবহ এবং প্রাসঙ্গিক বিকল্প দিয়ে প্রতিস্থাপন করছে। এই কারণে, ডেভেলপার পেলোড সমর্থিত নয়। বিকল্প সম্পর্কে আরও তথ্যের জন্য, ডেভেলপার পেলোড সম্পর্কে পৃষ্ঠাটি দেখুন।

আপনি IStoreController সহ অন্যান্য অ্যাপ স্টোরের জন্য Unity-এর স্ট্যান্ডার্ড IAP বাস্তবায়ন দ্বারা সংজ্ঞায়িত একই ইন্টারফেস ব্যবহার চালিয়ে যেতে পারেন। যখন আপনি কোনও ক্রয় শুরু করেন, তখনও আপনি IStoreController ব্যবহার করতে পারেন এবং InitiatePurchase() পদ্ধতিটি কল করতে পারেন:

public void InitiatePurchase(Purchasing.Product product, string payload);

তবে, আপনার পাস করা কোনও পেলোড কার্যকর হবে না (চূড়ান্ত রসিদে প্রদর্শিত হবে না)।

সাবস্ক্রিপশন ম্যানেজার সমর্থিত নয়

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

UpdateSubscription-এ API-তে ছোট ছোট পরিবর্তন রয়েছে।

Google Play Billing প্লাগইন আপনার সাবস্ক্রিপশন আপগ্রেড এবং ডাউনগ্রেড করার জন্য SubscriptionManager.UpdateSubscription() এবং SubscriptionManager.UpdateSubscriptionInGooglePlayStore() পদ্ধতি ব্যবহার সমর্থন করে না। যদি আপনার গেম এই পদ্ধতিগুলিকে কল করে, তাহলে একটি GooglePlayStoreUnsupportedException নিক্ষেপ করা হবে।

গুগল প্লে বিলিং লাইব্রেরি এই পদ্ধতিগুলির পরিবর্তে একটি বিকল্প API ব্যবহার করে। সাবস্ক্রিপশন আপগ্রেড বা ডাউনগ্রেড করতে, প্রোরেশন মোড ব্যবহার করে UpdateSubscription() পদ্ধতিতে কল করুন:

void UpdateSubscription(Product oldProduct, Product newProduct,
           GooglePlayStoreProrationMode prorationMode = GooglePlayStoreProrationMode.Unknown);

GooglePlayStoreUnsupportedException ধরা পড়লে আপনি এই পদ্ধতির কলটি প্ল্যাটফর্ম চেকের সাথে অথবা ক্যাচ ব্লকে মোড়ানো করতে পারেন।

প্রোরেশন মোড কীভাবে ব্যবহার করবেন সে সম্পর্কে আরও তথ্য এবং উদাহরণের জন্য, প্রোরেশন মোড সেট করুন দেখুন।