গুগল প্লে বিলিং প্লাগইনটি আপনার গেমকে গুগল প্লে বিলিং লাইব্রেরির সমস্ত নতুন ফিচার দেওয়ার জন্য, ইউনিটির বিল্ট-ইন ইন-অ্যাপ পারচেজ (যাকে ইউনিটি আইএপি বলা হয়) সার্ভিস ও অ্যাসেটগুলোকে আরও উন্নত করে। এই গাইডটিতে প্লাগইনটি ব্যবহার করার জন্য আপনার প্রজেক্ট কীভাবে সেট আপ করবেন তা ব্যাখ্যা করা হয়েছে। এছাড়াও, ইউনিটিতে আপনার গেমে গুগল প্লে বিলিং লাইব্রেরির ফিচারগুলো কীভাবে প্রয়োগ করবেন, তাও এই গাইডে বর্ণনা করা হয়েছে।
গুগল প্লে বিলিং প্লাগইন সেট আপ করুন
প্লাগইনটি সেট আপ করতে, এই লিঙ্ক করা প্রতিটি বিভাগের ধাপগুলো সম্পূর্ণ করুন:
- ইউনিটি আইএপি অ্যাবস্ট্রাকশন লেয়ারটি সক্রিয় করুন ।
- প্লাগইনটি ডাউনলোড ও ইম্পোর্ট করুন ।
- প্লাগইনটির বিল্ড সেটিংস কনফিগার করুন ।
- প্লাগইনটি সক্রিয় করুন ।
ইউনিটি আইএপি অ্যাবস্ট্রাকশন লেয়ার সক্রিয় করুন
Google Play Billing প্লাগইনটি Unity IAP-এর অন্তর্ভুক্ত একটি অ্যাবস্ট্রাকশন লেয়ারের উপর ভিত্তি করে তৈরি, তাই প্লাগইনটি ডাউনলোড ও ইম্পোর্ট করার আগে আপনাকে এই অ্যাবস্ট্রাকশন লেয়ারটি সক্রিয় করতে হবে। Unity IAP অ্যাবস্ট্রাকশন লেয়ারটি সক্রিয় করতে, নিম্নলিখিত পদক্ষেপগুলো অনুসরণ করুন:
- নিম্নলিখিত ইউনিটি টিউটোরিয়ালের সমস্ত ধাপ সম্পূর্ণ করুন: ইউনিটি সার্ভিসের জন্য আপনার প্রোজেক্ট সেট আপ করুন ।
- নিম্নলিখিত ইউনিটি টিউটোরিয়ালের সমস্ত ধাপ সম্পূর্ণ করুন: ইউনিটি IAP পরিষেবা সক্রিয় করুন ।
প্লাগইনটি ডাউনলোড এবং ইম্পোর্ট করুন
প্লাগইনটি .unitypackage ফরম্যাটে একটি ইউনিটি প্যাকেজ হিসেবে সরবরাহ করা হয়। প্লাগইনটি ডাউনলোড ও ইম্পোর্ট করতে, এই ধাপগুলো অনুসরণ করুন:
- GitHub-এ রিপোজিটরিটির রিলিজ পেজ থেকে Google Play Plugins for Unity-এর সর্বশেষ রিলিজটি ডাউনলোড করুন।
ইউনিটি মেনু বার থেকে, Assets > Import Package > Custom Package-এ ক্লিক করুন।

আপনি
.unitypackageফাইলটি যেখানে ডাউনলোড করেছেন সেটি খুঁজে বের করুন এবং নির্বাচন করুন।ইমপোর্ট ইউনিটি প্যাকেজ ডায়ালগে, সমস্ত অ্যাসেট নির্বাচিত রেখে ইমপোর্ট-এ ক্লিক করুন।

প্যাকেজটি ইম্পোর্ট হওয়ার পর, আপনার প্রোজেক্টের অ্যাসেটসে 'Assets' ফোল্ডারের রুটে ' GooglePlayPlugins ' নামে একটি নতুন ফোল্ডার যুক্ত হয়। এই ফোল্ডারটিতে প্লাগইনটির জন্য প্রয়োজনীয় গুগল প্লে বিলিং লাইব্রেরির সমস্ত অ্যাসেট থাকে।
বিল্ড সেটিংস কনফিগার করুন
যেহেতু প্লাগইনটি ইউনিটি আইএপি (Unity IAP) প্রসারিত করে, তাই বিল্ড থেকে ইউনিটি আইএপি-তে থাকা কিছু পুরোনো ও ওভারল্যাপিং ডিপেন্ডেন্সি অপসারণ না করা হলে ইউনিটি দ্বন্দ্বের সম্মুখীন হবে এবং একটি অ্যান্ড্রয়েড এপিকে (Android APK) তৈরি করতে ব্যর্থ হবে। প্লাগইনটি আপনার প্রজেক্ট থেকে দ্বন্দ্ব সৃষ্টিকারী লাইব্রেরিগুলো স্বয়ংক্রিয়ভাবে অপসারণ করার একটি উপায় প্রদান করে। এই দ্বন্দ্বগুলো সমাধান করতে, নিম্নলিখিত ধাপগুলো অনুসরণ করুন:
ইউনিটি মেনু বার থেকে Google > Play Billing > Build Settings নির্বাচন করুন।

প্লে বিলিং বিল্ড সেটিংস উইন্ডোতে, 'ফিক্স' (Fix ) বোতামে ক্লিক করুন। এটি দ্বন্দ্বের সমাধান করে এবং দ্বন্দ্ব সৃষ্টিকারী ইউনিটি আইএপি (Unity IAP) ফাইলগুলিকে একটি ব্যাকআপ ডিরেক্টরিতে সরিয়ে দেয়। 'ফিক্স' বোতামে ক্লিক করার পর, বাটনটি 'রিস্টোর' (Restore) এ পরিবর্তিত হয়, যেটিতে ক্লিক করে আপনি মূল, দ্বন্দ্ব সৃষ্টিকারী ফাইলগুলি পুনরুদ্ধার করতে পারেন।

প্লাগইনটি সক্রিয় করুন
প্লাগইনটি সক্রিয় করতে, Unity IAP-এর Google Play ইমপ্লিমেন্টেশনটি Google Play Billing প্লাগইন দিয়ে প্রতিস্থাপন করুন। উদাহরণস্বরূপ, Unity IAP Purchaser Script ব্যবহার করার সময়, আপনাকে IAP বিল্ডারে পাস করা StandardPurchaseModule টি পরিবর্তন করে Google.Play.Billing.GooglePlayStoreModule ব্যবহার করতে হবে:
// Create a builder using the GooglePlayStoreModule.
var configurationBuilder =
ConfigurationBuilder.Instance(Google.Play.Billing.GooglePlayStoreModule.Instance());
যদি আপনার গেম একাধিক প্ল্যাটফর্মের জন্য একই পারচেজার স্ক্রিপ্ট ব্যবহার করে, তাহলে একটি প্ল্যাটফর্ম চেক যোগ করা উচিত যাতে ইউনিটি অন্যান্য প্ল্যাটফর্মের জন্যও তার নিজস্ব আইএপি সলিউশন ব্যবহার করা চালিয়ে যায়।
ConfigurationBuilder builder;
if (Application.platform == RuntimePlatform.Android)
{
builder = ConfigurationBuilder.Instance(
Google.Play.Billing.GooglePlayStoreModule.Instance());
}
else
{
builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
}
যদি আপনি গুগল প্লে স্টোর ছাড়াও অন্য কোনো অ্যান্ড্রয়েড অ্যাপ স্টোরে আপনার গেমটি প্রকাশ করেন, তাহলে শুধুমাত্র গুগল প্লে স্টোর নির্বাচন করার সময়ই আপনার ডিফল্ট ইউনিটি আইএপি (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());
}
আপনার গেমে গুগল প্লে বিলিং লাইব্রেরির ফিচারগুলো প্রয়োগ করুন।
গুগল প্লে বিলিং প্লাগইনটি ইউনিটি IAP পরিষেবাগুলোকে প্রসারিত করে, ফলে আপনি সাধারণ ক্রয় প্রক্রিয়া পরিচালনা করার জন্য একই ইউনিটি API ব্যবহার করতে পারেন। উল্লেখ্য যে, গুগল প্লে বিলিং লাইব্রেরি এবং অন্যান্য অ্যাপ স্টোরের জন্য ইউনিটির স্ট্যান্ডার্ড IAP বাস্তবায়নের মধ্যে পার্থক্যের কারণে API-এর আচরণে কিছু সামান্য পরিবর্তন রয়েছে। আপনি যদি ইউনিটি IAP API-গুলোতে নতুন হন, তবে সাধারণ ক্রয় প্রক্রিয়া কীভাবে বাস্তবায়ন করতে হয় তার একটি উদাহরণের জন্য ইউনিটি IAP টিউটোরিয়ালের "ক্রয় স্ক্রিপ্ট তৈরি করা" অংশটি দেখুন।
গুগল প্লে বিলিং লাইব্রেরিতে এমন কিছু বৈশিষ্ট্যও রয়েছে যা শুধুমাত্র গুগল প্লে স্টোরেই পাওয়া যায়। আপনি একটি বর্ধিত ইন্টারফেসের মাধ্যমে এই বৈশিষ্ট্যগুলো ব্যবহার করতে পারবেন। এই বিভাগের বাকি অংশে বর্ণনা করা হয়েছে কীভাবে আপনার গেমে গুগল প্লে বিলিং লাইব্রেরির এই অনন্য বৈশিষ্ট্যগুলো প্রয়োগ করবেন।
বিলম্বিত ক্রয় সক্ষম করুন
গুগল প্লে ডেফার্ড পারচেজ বা বিলম্বিত ক্রয় সমর্থন করে, যা পেন্ডিং ট্রানজ্যাকশন বা পেন্ডিং পারচেজ নামেও পরিচিত। এর মাধ্যমে ব্যবহারকারীরা একটি ক্রয় তৈরি করে পরে স্টোর থেকে নগদ অর্থ ব্যবহার করে তা সম্পন্ন করতে পারেন।
বিলম্বিত ক্রয় সক্রিয় করতে, আপনার 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-তে অস্পষ্ট প্রোফাইল আইডি পাঠান।
জালিয়াতি শনাক্তকরণ সহজ করার জন্য, যেমন অল্প সময়ের মধ্যে একই অ্যাকাউন্ট থেকে একাধিক ডিভাইস কেনাকাটা করছে কিনা তা শনাক্ত করতে, আপনি গুগল প্লে-তে একটি অস্পষ্ট প্রোফাইল আইডি পাঠাতে পারেন। এটি একটি অস্পষ্ট ইউজার অ্যাকাউন্ট আইডি পাঠানোর মতোই। উভয় ক্ষেত্রেই আইডিটি একজন ব্যবহারকারীকে প্রতিনিধিত্ব করে, কিন্তু প্রোফাইল আইডি আপনাকে একটি অ্যাপের মধ্যে থাকা একাধিক প্রোফাইলের মধ্যে থেকে একজন ব্যবহারকারীকে স্বতন্ত্রভাবে শনাক্ত করতে সাহায্য করে। গুগল প্লে-তে একটি অস্পষ্ট প্রোফাইল আইডি পাঠানোর পর, আপনি পরবর্তীতে কেনাকাটার রসিদ থেকে সেই আইডিটি পুনরুদ্ধার করতে পারবেন।
একটি অবফাসকেটেড প্রোফাইল আইডি পাস করতে, আপনার 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.
});
ইউনিটি এপিআই আচরণে পরিবর্তন
যখন আপনি গুগল প্লে বিলিং প্লাগইন ব্যবহার করেন, তখন বেশিরভাগ এপিআই অন্যান্য অ্যাপ স্টোরের জন্য ইউনিটির স্ট্যান্ডার্ড আইএপি ইমপ্লিমেন্টেশনের মতোই আচরণ করে। তবে, কিছু ক্ষেত্রে এপিআইগুলো ভিন্নভাবে আচরণ করবে। এই বিভাগে এই আচরণের পার্থক্যগুলো বর্ণনা করা হয়েছে।
ডেভেলপার পেলোড সমর্থিত নয়
গুগল প্লে ডেভেলপার পেলোড বাতিল করেছে এবং এর পরিবর্তে আরও অর্থপূর্ণ ও প্রাসঙ্গিক বিকল্প নিয়ে আসছে। এই কারণে, ডেভেলপার পেলোড এখন আর সমর্থিত নয়। বিকল্পগুলো সম্পর্কে আরও তথ্যের জন্য, ডেভেলপার পেলোড সম্পর্কিত পৃষ্ঠাটি দেখুন।
আপনি অন্যান্য অ্যাপ স্টোরের জন্য ইউনিটির স্ট্যান্ডার্ড IAP ইমপ্লিমেন্টেশন দ্বারা সংজ্ঞায়িত একই ইন্টারফেসগুলো ব্যবহার করা চালিয়ে যেতে পারেন, যার মধ্যে IStoreController অন্তর্ভুক্ত। যখন আপনি একটি কেনাকাটা শুরু করবেন, তখনও আপনি IStoreController ব্যবহার করতে এবং InitiatePurchase() মেথডটি কল করতে পারবেন:
public void InitiatePurchase(Purchasing.Product product, string payload);
তবে, আপনার পাঠানো কোনো পেলোডই কার্যকর হবে না (চূড়ান্ত রসিদে তা দেখা যাবে না)।
সাবস্ক্রিপশনম্যানেজার সমর্থিত নয়
ইউনিটি আইএপি (Unity IAP) সাবস্ক্রিপশন পরিচালনার জন্য SubscriptionManager ক্লাসটি প্রদান করে। যেহেতু এই ক্লাসের ইউনিটির স্ট্যান্ডার্ড আইএপি ইমপ্লিমেন্টেশন ডেভেলপার পেলোড ব্যবহার করে, তাই এই ক্লাসটি সমর্থিত নয়। আপনি চাইলে এই ক্লাসটি তৈরি করতে পারেন, কিন্তু এর যেকোনো গেটার মেথড ব্যবহার করার সময় আপনি অনির্ভরযোগ্য ডেটা পেতে পারেন।
UpdateSubscription-এ API-তে ছোটখাটো পরিবর্তন আনা হয়েছে।
গুগল প্লে বিলিং প্লাগইন আপনার সাবস্ক্রিপশন আপগ্রেড এবং ডাউনগ্রেড করার জন্য SubscriptionManager.UpdateSubscription() এবং SubscriptionManager.UpdateSubscriptionInGooglePlayStore() মেথডগুলোর ব্যবহার সমর্থন করে না। যদি আপনার গেম এই মেথডগুলো কল করে, তাহলে একটি GooglePlayStoreUnsupportedException থ্রো করা হয়।
গুগল প্লে বিলিং লাইব্রেরি এই পদ্ধতিগুলোর পরিবর্তে ব্যবহারের জন্য একটি বিকল্প এপিআই প্রদান করে। একটি সাবস্ক্রিপশন আপগ্রেড বা ডাউনগ্রেড করতে, প্রোরেশন মোড ব্যবহার করে UpdateSubscription() পদ্ধতিটি কল করুন:
void UpdateSubscription(Product oldProduct, Product newProduct,
GooglePlayStoreProrationMode prorationMode = GooglePlayStoreProrationMode.Unknown);
আপনি এই মেথড কলটিকে একটি প্ল্যাটফর্ম চেকের মধ্যে অথবা GooglePlayStoreUnsupportedException ধরা পড়লে একটি ক্যাচ ব্লকের মধ্যে রাখতে পারেন।
প্রোরেশন মোড কীভাবে ব্যবহার করতে হয় সে সম্পর্কে আরও তথ্য ও উদাহরণের জন্য, ‘প্রোরেশন মোড সেট করুন’ দেখুন।