Unity-এর সাথে Google Play Billing Library ব্যবহার করা

Google Play Billing প্লাগ-ইন, Unity-র বিল্ট-ইন পরিষেবা এবং অ্যাপ-মধ্যস্থ কেনাকাটার জন্য অ্যাসেটকে আরও উন্নত করে, যাকে Unity IAP বলা হয়, যাতে আপনার গেম Google Play Billing Library-র সব লেটেস্ট ফিচার প্রদান করতে পারে। এই গাইড থেকে জানতে পারবেন যে প্লাগ-ইন ব্যবহার করার জন্য কীভাবে আপনার প্রোজেক্ট সেট-আপ করবেন। এছাড়াও, এই গাইড থেকে আপনি জানতে পারবেন যে Unity-তে আপনার গেমে কীভাবে Google Play Billing Library ফিচার প্রয়োগ করবেন।

Google Play Billing প্লাগ-ইন সেট-আপ করা

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

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

Unity IAP অ্যাবস্ট্রাকশন লেয়ার চালু করুন

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

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

প্লাগ-ইন ডাউনলোড ও ইমপোর্ট করুন

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

  1. রিপোজিটরির GitHub-এ রিলিজ পৃষ্ঠা থেকে Unity-র জন্য Google Play প্লাগ-ইনের লেটেস্ট রিলিজ ডাউনলোড করুন।
  2. Unity মেনু বার থেকে, অ্যাসেট > প্যাকেজ ইমপোর্ট করুন > কাস্টম প্যাকেজ বিকল্পে ক্লিক করুন।

  3. আপনি যেখানে .unitypackage ফাইল ডাউনলোড করেছেন সেটি খুঁজে বের করে বেছে নিন।

  4. Unity প্যাকেজ ইমপোর্ট করুন ডায়ালগে, সব অ্যাসেট বেছে নিয়ে ইমপোর্ট করুন বিকল্পে ক্লিক করুন।

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

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

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

  1. Unity মেনু বার থেকে, Google > Play Billing > Build সেটিংস বিকল্প বেছে নিন।

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

প্লাগ-ইন চালু করুন

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

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

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

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

আপনি যদি Google Play Store ছাড়াও অন্য Android অ্যাপ স্টোরে আপনার গেম প্রকাশ করেন, তাহলে শুধুমাত্র Google Play Store বেছে নেওয়ার সময় আপনার ডিফল্ট Unity IAP বাস্তবায়ন প্রতিস্থাপন করা উচিত:

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 Billing Library ফিচার প্রয়োগ করুন

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

Google Play Billing Library-তে এমন কিছু ফিচারও রয়েছে যা Google Play Store-এর জন্য অনন্য। আপনি একটি এক্সটেন্ডেড ইন্টারফেসের মাধ্যমে এইসব ফিচার অ্যাক্সেস করতে পারবেন। এই বিভাগের বাকি অংশে আপনার গেমে এইসব অনন্য Google Play Billing Library ফিচার কীভাবে প্রয়োগ করবেন তা বর্ণনা করা হয়েছে।

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

Google Play-তে ডিফার্ড কেনাকাটার সুবিধা আছে—এটিকে বাকি ট্রানজ্যাকশন বা বাকি কেনাকাটাও বলা হয়—যেখানে ব্যবহারকারী কেনাকাটা শুরু করে পরে স্টোরে ক্যাশ দিয়ে তা সম্পূর্ণ করতে পারেন।

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

// 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();

এরপর, Play Store এক্সটেনশন ব্যবহার করে ডেফার্ড কেনাকাটার কলব্যাক প্রয়োগ করুন:

// 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);

সাবস্ক্রিপশনের জন্য দামের পরিবর্তন কনফার্ম করুন

Google Play আপনাকে অ্যাক্টিভ সাবস্ক্রিপশনের দাম পরিবর্তন করতে দেয়। আপনার গেমের ব্যবহারকারীদের অবশ্যই দামের যেকোনও পরিবর্তন কার্যকর হওয়ার আগে তা কনফার্ম করতে হবে। ব্যবহারকারীদের তাদের সাবস্ক্রিপশনের জন্য মূল্য পরিবর্তন নিশ্চিত করতে অনুরোধ করতে, 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.
    });

Unity API-এর আচরণে পরিবর্তন

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

ডেভেলপার পেলোড কাজ করে না

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

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

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

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

SubscriptionManager কাজ করে না

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

UpdateSubscription-এ API-তে ছোটখাটো পরিবর্তন করা হয়েছে

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

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

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

আপনি এই মেথড কলকে প্ল্যাটফর্ম চেক দিয়ে বা ক্যাচ ব্লকে র‍্যাপ করতে পারেন যখন GooglePlayStoreUnsupportedException ক্যাচ করা হয়।

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