Google Play এর বিলিং সিস্টেম হল একটি পরিষেবা যা আপনাকে আপনার Android অ্যাপে ডিজিটাল পণ্য এবং সামগ্রী বিক্রি করতে দেয়৷ মে 2022-এর রিলিজের সাথে, আমরা সাবস্ক্রিপশন পণ্যগুলিকে কীভাবে সংজ্ঞায়িত করা হয় তা পরিবর্তন করেছি এবং এটি কীভাবে অ্যাপ-মধ্যস্থ বিক্রি এবং আপনার ব্যাকএন্ডে পরিচালনা করা হয় তা প্রভাবিত করে। আপনি যদি প্রথমবার Google Play বিলিং-এর সাথে একীভূত হয়ে থাকেন, তাহলে আপনি Getting ready পড়ে আপনার ইন্টিগ্রেশন শুরু করতে পারেন।
আপনি যদি মে 2022-এর আগে Google Play বিলিং-এর মাধ্যমে সাবস্ক্রিপশন বিক্রি করে থাকেন, তাহলে আপনার বিদ্যমান সাবস্ক্রিপশন বজায় রেখে নতুন বৈশিষ্ট্যগুলি কীভাবে গ্রহণ করবেন তা বোঝা গুরুত্বপূর্ণ।
প্রথম যে জিনিসটি জানতে হবে তা হল আপনার সমস্ত বিদ্যমান সাবস্ক্রিপশন, অ্যাপ এবং ব্যাকএন্ড ইন্টিগ্রেশন মে 2022-এর রিলিজের আগে যেমন কাজ করে। আপনাকে কোনো তাৎক্ষণিক পরিবর্তন করতে হবে না, এবং আপনি সময়ের সাথে সাথে এই নতুন বৈশিষ্ট্যগুলি গ্রহণ করতে পারেন। Google Play বিলিং লাইব্রেরির প্রতিটি বড় রিলিজ রিলিজের পর দুই বছরের জন্য সমর্থিত। Google Play Developer API- এর সাথে বিদ্যমান ইন্টিগ্রেশনগুলি আগের মতোই কাজ করে চলেছে৷
এখানে মে 2022 আপডেটগুলির একটি ওভারভিউ রয়েছে:
- নতুন Google Play Console আপনাকে সদস্যতা, বেস প্ল্যান এবং অফার তৈরি এবং পরিচালনা করতে দেয়। এর মধ্যে নতুন এবং স্থানান্তরিত সাবস্ক্রিপশন উভয়ই অন্তর্ভুক্ত রয়েছে।
- Play Developer API- এ API ফর্মে নতুন Google Play Console UI কার্যকারিতা সমর্থন করার জন্য আপডেট রয়েছে। উল্লেখযোগ্যভাবে, সাবস্ক্রিপশন ক্রয় API- এর একটি নতুন সংস্করণ রয়েছে। সদস্যতা স্থিতি পরীক্ষা করতে এবং সদস্যতা কেনাকাটা পরিচালনা করতে এই API ব্যবহার করুন।
- নতুন প্লে বিলিং লাইব্রেরি সংস্করণ 5 আপনার অ্যাপটিকে সমস্ত নতুন সদস্যতা বৈশিষ্ট্য থেকে উপকৃত হতে দেয়৷ আপনি যখন 5 সংস্করণে আপগ্রেড করতে প্রস্তুত হন, তখন মাইগ্রেশন গাইডের নির্দেশিকা অনুসরণ করুন৷
সদস্যতা কনফিগারেশন
Google Play Console-এর মাধ্যমে সদস্যতা পরিচালনা করা
2022 সালের মে পর্যন্ত, আপনি Google Play Console-এ কিছু পার্থক্য লক্ষ্য করবেন।
একটি সাবস্ক্রিপশনে এখন একাধিক বেস প্ল্যান এবং অফার থাকতে পারে। পূর্বে তৈরি করা সাবস্ক্রিপশন SKUগুলি এখন এই নতুন সাবস্ক্রিপশন, বেস প্ল্যান এবং অফার অবজেক্ট হিসাবে প্লে কনসোলে উপস্থিত হয়। যদি আপনি ইতিমধ্যেই না করে থাকেন, তাহলে নতুন অবজেক্টের কার্যকারিতা এবং কনফিগারেশন সহ বর্ণনার জন্য প্লে কনসোলে সাবস্ক্রিপশনের সাম্প্রতিক পরিবর্তনগুলি দেখুন৷ এই নতুন ফর্ম্যাটে Google Play Console-এ আপনার আগে থেকে থাকা সমস্ত সদস্যতা পণ্য প্রদর্শিত হবে। প্রতিটি SKU এখন একটি সাবস্ক্রিপশন অবজেক্ট দ্বারা প্রতিনিধিত্ব করা হয় যাতে প্রযোজ্য হলে একটি একক বেস প্ল্যান এবং ব্যাকওয়ার্ড-সামঞ্জস্যপূর্ণ অফার থাকে।
যেহেতু পুরোনো ইন্টিগ্রেশন আশা করে যে প্রতিটি সাবস্ক্রিপশন একটি একক অফার অন্তর্ভুক্ত করবে, একটি SkuDetails
অবজেক্ট দ্বারা উপস্থাপিত হবে, তাই প্রতিটি সাবস্ক্রিপশনে একটি একক পশ্চাদপদ-সামঞ্জস্যপূর্ণ বেস প্ল্যান বা অফার থাকতে পারে। ব্যাকওয়ার্ড-সামঞ্জস্যপূর্ণ বেস প্ল্যান বা অফারটি এমন অ্যাপগুলির জন্য একটি SKU-এর অংশ হিসাবে ফেরত দেওয়া হয় যেগুলি এখন-অপ্রচলিত querySkuDetailsAsync()
পদ্ধতি ব্যবহার করছে৷ ব্যাকওয়ার্ড-সামঞ্জস্যপূর্ণ অফারগুলি কনফিগার এবং পরিচালনার বিষয়ে আরও তথ্যের জন্য, সাবস্ক্রিপশন বুঝতে দেখুন একবার আপনার অ্যাপটি শুধুমাত্র queryProductDetailsAsync()
ব্যবহার করে এবং একবার আপনার অ্যাপের কোনও পুরানো সংস্করণ এখনও কেনাকাটা না করলে, আপনাকে আর একটি ব্যাকওয়ার্ড-সামঞ্জস্যপূর্ণ অফার ব্যবহার করতে হবে না .
সাবস্ক্রিপশন পাবলিশিং API এর মাধ্যমে সদস্যতা পরিচালনা করা
প্লে ডেভেলপার API-এ সদস্যতা কেনার জন্য নতুন কার্যকারিতা রয়েছে। SKU ম্যানেজমেন্টের জন্য inappproducts
API আগের মতই কাজ করে চলেছে, যার মধ্যে এককালীন ক্রয় পণ্য এবং সদস্যতাগুলি পরিচালনা করা সহ, তাই আপনার ইন্টিগ্রেশন বজায় রাখার জন্য আপনাকে কোনো তাৎক্ষণিক পরিবর্তন করতে হবে না।
যাইহোক, এটা মনে রাখা গুরুত্বপূর্ণ যে Google Play Console শুধুমাত্র নতুন সাবস্ক্রিপশন সত্তা ব্যবহার করে। একবার আপনি কনসোলে আপনার সদস্যতা সম্পাদনা করা শুরু করলে, সাবস্ক্রিপশনের জন্য inappproducts
API আর ব্যবহার করা যাবে না।
আপনি যদি মে 2022-এর আগে Publishing API ব্যবহার করে থাকেন, তাহলে যেকোনও সমস্যা এড়াতে, যেকোনও বিদ্যমান সাবস্ক্রিপশন এখন Google Play Console-এ শুধুমাত্র পঠনযোগ্য হিসেবে দেখা যাবে। আপনি পরিবর্তন করার চেষ্টা করলে, আপনি এই সীমাবদ্ধতা ব্যাখ্যা করে একটি সতর্কতা পেতে পারেন। কনসোলে আরও সাবস্ক্রিপশন সম্পাদনা করার আগে, নতুন সাবস্ক্রিপশন পাবলিশিং এন্ডপয়েন্ট ব্যবহার করতে আপনার ব্যাকএন্ড ইন্টিগ্রেশন আপডেট করা উচিত। নতুন monetization.subscriptions
, monetization.subscriptions.baseplans
, এবং monetization.subscriptions.offers
এন্ডপয়েন্টগুলি আপনাকে সমস্ত উপলব্ধ বেস প্ল্যান এবং অফারগুলি পরিচালনা করতে দেয়৷ আপনি নিম্নলিখিত সারণীতে monetization.subscriptions
অধীনে InAppProduct
সত্তা থেকে নতুন অবজেক্টে কীভাবে বিভিন্ন ক্ষেত্র ম্যাপ করে তা দেখতে পারেন:
InAppProduct | সাবস্ক্রিপশন |
---|---|
packageName | packageName |
sku | productId |
status | basePlans[0].state |
prices | basePlans[0].regionalConfigs.price |
listings | তালিকা |
defaultPrice | সমতা নেই |
subscriptionPeriod | basePlans[0].autoRenewingBasePlanType.billingPeriodDuration |
trialPeriod | basePlans[0].offers[0].phases[0].Regional Configs[0].free |
gracePeriod | basePlans[0].autoRenewingBasePlanType.gracePeriodDuration |
subscriptionTaxesAndComplianceSettings | ট্যাক্স এবং কমপ্লায়েন্স সেটিংস |
এই প্রয়োজনীয় API আপডেট শুধুমাত্র পাবলিশিং API (SKU ম্যানেজমেন্ট) এ প্রযোজ্য।
প্লে বিলিং লাইব্রেরি পরিবর্তন
ধীরে ধীরে স্থানান্তরকে সমর্থন করার জন্য, প্লে বিলিং লাইব্রেরিতে পূর্ববর্তী সংস্করণগুলিতে উপলব্ধ সমস্ত পদ্ধতি এবং বস্তু অন্তর্ভুক্ত রয়েছে৷ SkuDetails
অবজেক্ট এবং querySkuDetailsAsync()
এর মতো ফাংশন এখনও বিদ্যমান তাই আপনি অবিলম্বে বিদ্যমান সদস্যতা কোড আপডেট না করে নতুন কার্যকারিতা ব্যবহার করতে আপগ্রেড করতে পারেন। এছাড়াও আপনি পশ্চাদপদ-সামঞ্জস্যপূর্ণ হিসাবে চিহ্নিত করে এই পদ্ধতিগুলির মাধ্যমে কোন অফারগুলি উপলব্ধ তা নিয়ন্ত্রণ করতে পারেন৷
লিগ্যাসি পদ্ধতিগুলি রাখার পাশাপাশি, প্লে বিলিং লাইব্রেরি 5-এ এখন একটি নতুন ProductDetails
অবজেক্ট এবং একটি সংশ্লিষ্ট queryProductDetailsAsync()
পদ্ধতি রয়েছে যাতে নতুন সত্তা এবং কার্যকারিতা পরিচালনা করা যায়। বিদ্যমান অ্যাপ-মধ্যস্থ পণ্য (এককালীন কেনাকাটা এবং ভোগ্য সামগ্রী) এখন ProductDetails
দ্বারা সমর্থিত।
সাবস্ক্রিপশনের জন্য, ProductDetails.getSubscriptionOfferDetails()
সমস্ত বেস প্ল্যানের একটি তালিকা প্রদান করে এবং অফার করে যে ব্যবহারকারী কেনার যোগ্য। এর মানে হল যে আপনি ব্যবহারকারীর জন্য যোগ্য সমস্ত বেস প্ল্যান এবং অফারগুলি অ্যাক্সেস করতে পারবেন, পশ্চাদপদ-সামঞ্জস্যতা নির্বিশেষে। getSubscriptionOfferDetails()
নন-সাবস্ক্রিপশন পণ্যের জন্য null
প্রদান করে। এককালীন কেনাকাটার জন্য, আপনি getOneTimePurchaseOfferDetails()
ব্যবহার করতে পারেন।
প্লে বিলিং লাইব্রেরি 5-এ ক্রয় প্রবাহ চালু করার জন্য নতুন এবং উত্তরাধিকার উভয় পদ্ধতিও অন্তর্ভুক্ত রয়েছে। BillingFlowParams
অবজেক্টটি BillingClient.launchBillingFlow()
এ পাস করা হলে একটি SkuDetails
অবজেক্ট ব্যবহার করে কনফিগার করা হলে, সিস্টেম ব্যাকওয়ার্ড-সামঞ্জস্যপূর্ণ বেস প্ল্যান বা অফার থেকে বিক্রি করার জন্য অফার তথ্য বের করে যা SKU-এর সাথে মিলে যায়। BillingClient.launchBillingFlow()
এ পাস করা BillingFlowParams
অবজেক্টটি যদি ProductDetailsParams
অবজেক্ট ব্যবহার করে কনফিগার করা হয়, যার মধ্যে ProductDetails
এবং একটি String
রয়েছে যা অফার কেনার জন্য নির্দিষ্ট অফার টোকেনের প্রতিনিধিত্ব করে, তাহলে সিস্টেম ব্যবহারকারীর দ্বারা অর্জিত পণ্য সনাক্ত করতে সেই তথ্য ব্যবহার করে।
queryPurchasesAsync()
ব্যবহারকারীর মালিকানাধীন সমস্ত কেনাকাটা ফেরত দেয়। অনুরোধ করা পণ্যের ধরন নির্দেশ করতে, আপনি একটি BillingClient.SkuType
মান পাস করতে পারেন, পুরানো সংস্করণগুলির মতো, অথবা একটি QueryPurchasesParams
অবজেক্ট যাতে একটি BillingClient.ProductType
মান রয়েছে যা নতুন সদস্যতা সত্তার প্রতিনিধিত্ব করে৷
আমরা আপনার অ্যাপগুলিকে লাইব্রেরির 5 সংস্করণে শীঘ্রই আপডেট করার সুপারিশ করছি যাতে আপনি এই নতুন সদস্যতা বৈশিষ্ট্যগুলির সুবিধা নেওয়া শুরু করতে পারেন৷
সাবস্ক্রিপশন স্ট্যাটাস পরিচালনা
এই বিভাগটি Google Play বিলিং সিস্টেম ইন্টিগ্রেশনের ব্যাকএন্ড উপাদানগুলির প্রাথমিক পরিবর্তনগুলি বর্ণনা করে যা 5 সংস্করণে স্থানান্তরের জন্য প্রয়োগ করা প্রয়োজন৷
রিয়েল টাইম ডেভেলপার বিজ্ঞপ্তি
শীঘ্রই SubscriptionNotification
অবজেক্টে আর subscriptionId থাকবে না। আপনি যদি সাবস্ক্রিপশন পণ্য শনাক্ত করার জন্য এই ক্ষেত্রের উপর নির্ভর করে থাকেন, তাহলে আপনাকে সাবস্ক্রিপশন স্ট্যাটাস থেকে এই তথ্যটি প্রাপ্ত করার জন্য আপডেট করা উচিত purchases.subscriptionv2:get
ব্যবহার করে নোটিফিকেশন পাওয়ার পর। লাইন আইটেম সংগ্রহের প্রতিটি SubscriptionPurchaseLineItem
উপাদান যা ক্রয়ের স্থিতির অংশ হিসাবে ফেরত দেওয়া হয় তাতে সংশ্লিষ্ট পণ্য আইডি অন্তর্ভুক্ত থাকবে।
সাবস্ক্রিপশন পারচেস এপিআই: সাবস্ক্রিপশন স্ট্যাটাস পাওয়া
সাবস্ক্রিপশন ক্রয় API এর পূর্ববর্তী সংস্করণগুলিতে, আপনি purchases.subscriptions:get
ব্যবহার করে সদস্যতার স্থিতি জিজ্ঞাসা করতে পারেন। এই এন্ডপয়েন্ট অপরিবর্তিত এবং পশ্চাদপদ-সামঞ্জস্যপূর্ণ সাবস্ক্রিপশন ক্রয়ের জন্য কাজ করে চলেছে। এই এন্ডপয়েন্ট 2022 সালের মে মাসে প্রকাশিত কোনো নতুন কার্যকারিতা সমর্থন করে না ।
Subscriptions Purchases API-এর নতুন সংস্করণে, purchases.subscriptionsv2:get
। এই API স্থানান্তরিত সাবস্ক্রিপশন, নতুন সাবস্ক্রিপশন (প্রিপেইড এবং স্বয়ংক্রিয়-পুনর্নবীকরণ উভয়ই) এবং সব ধরনের কেনাকাটার সাথে সামঞ্জস্যপূর্ণ। বিজ্ঞপ্তিগুলি পাওয়ার সময় আপনি সদস্যতার স্থিতি পরীক্ষা করতে এই শেষ পয়েন্টটি ব্যবহার করতে পারেন৷ প্রত্যাবর্তিত বস্তু, SubscriptionPurchaseV2
, নতুন ক্ষেত্র ধারণ করে, কিন্তু এটি এখনও লিগ্যাসি ডেটা অন্তর্ভুক্ত করে যা বিদ্যমান সাবস্ক্রিপশনগুলিকে সমর্থন করা চালিয়ে যাওয়ার জন্য প্রয়োজন৷
প্রিপেইড প্ল্যানের জন্য সাবস্ক্রিপশনPurchaseV2 ক্ষেত্র
প্রিপেইড প্ল্যানগুলিকে সমর্থন করার জন্য নতুন ক্ষেত্রগুলি যুক্ত করা হয়েছে, যা স্বয়ংক্রিয়ভাবে পুনর্নবীকরণের পরিবর্তে ব্যবহারকারী দ্বারা প্রসারিত হয়। সমস্ত ক্ষেত্র প্রিপেইড প্ল্যানগুলিতে প্রযোজ্য যেমন তারা স্বয়ংক্রিয় পুনর্নবীকরণ সাবস্ক্রিপশনের জন্য করে, নিম্নলিখিত ব্যতিক্রমগুলি সহ:
- [নতুন ক্ষেত্র] লাইনআইটেম[0].prepaid_plan.allowExtendAfterTime : বোঝায় যখন একজন ব্যবহারকারীকে তাদের প্রিপেইড প্ল্যান প্রসারিত করার জন্য আরেকটি টপ-আপ কেনার অনুমতি দেওয়া হবে, কারণ একজন ব্যবহারকারীকে একবারে শুধুমাত্র একটি অব্যবহৃত টপ-আপ রাখার অনুমতি দেওয়া হয়।
- [নতুন ক্ষেত্র] SubscriptionState : সাবস্ক্রিপশন অবজেক্টের অবস্থা নির্দিষ্ট করে। প্রিপেইড প্ল্যানের জন্য, এই মান সর্বদা হয়
ACTIVE
,PENDING
বাCANCELED
। - lineItems[0].expiryTime : এই ক্ষেত্রটি সর্বদা প্রিপেইড প্ল্যানের জন্য উপস্থিত থাকে।
- paused_state_context : এই ক্ষেত্রটি কখনই উপস্থিত থাকে না, কারণ প্রিপেইড প্ল্যানগুলি বিরতি দিতে পারে না।
- lineItems[0].auto_renewing_plan : প্রিপেইড প্ল্যানের জন্য উপস্থিত নয়।
- canceled_state_context : প্রিপেইড প্ল্যানের জন্য উপস্থিত নয়, কারণ এই ক্ষেত্রটি শুধুমাত্র সেই ব্যবহারকারীদের জন্য প্রযোজ্য যারা সক্রিয়ভাবে একটি সদস্যতা বাতিল করে।
- lineItems[0].productId : এই ক্ষেত্রটি আগের সংস্করণ থেকে
subscriptionId
প্রতিস্থাপন করে।
পুনরাবৃত্ত সাবস্ক্রিপশনের জন্য SubscriptionPurchaseV2 ক্ষেত্র
purchases.subscriptionv2
নতুন ক্ষেত্র রয়েছে যা নতুন সাবস্ক্রিপশন অবজেক্ট সম্পর্কে আরও বিশদ প্রদান করে। নিম্নলিখিত সারণীটি দেখায় কিভাবে লিগ্যাসি সাবস্ক্রিপশন এন্ডপয়েন্ট ম্যাপ থেকে ক্ষেত্রগুলি purchases.subscriptionv2
এর সংশ্লিষ্ট ক্ষেত্রগুলিতে যায়৷
সাবস্ক্রিপশন ক্রয় | সদস্যতা ক্রয়V2 |
---|---|
countryCode | regionCode |
orderId | latestOrderId |
(কোন সমতুল্য ক্ষেত্র নেই) | lineItems ( সাবস্ক্রিপশনPurchaseLineItem এর তালিকা) যা ক্রয়ের সাথে অর্জিত পণ্যগুলিকে প্রতিনিধিত্ব করে |
(কোন সমতুল্য ক্ষেত্র নেই) | lineItems.offerDetails.basePlanId |
(কোন সমতুল্য ক্ষেত্র নেই) | lineItems.offerDetails.offerId |
(কোন সমতুল্য ক্ষেত্র নেই) | lineItems.offerDetails.offerTags |
startTimeMillis | startTime |
expiryTimeMillis | lineItems.expiryTime (ক্রয়ে অর্জিত প্রতিটি সাবস্ক্রিপশনের নিজস্ব expiryTime আছে) |
(কোন সমতুল্য ক্ষেত্র নেই) | subscriptionState ( সাবস্ক্রিপশনের অবস্থা নির্দেশ করে) |
(কোন সমতুল্য ক্ষেত্র নেই) | pausedStateContext (যদি সাবস্ক্রিপশন স্থিতি SUBSCRIPTION_STATE_PAUSED হয় তবেই উপস্থিত) |
autoResumeTimeMillis | pausedStateContext.autoResumeTime |
(কোন সমতুল্য ক্ষেত্র নেই) | canceledStateContext (সাবস্ক্রিপশন স্ট্যাটাস SUBSCRIPTION_STATE_CANCELED হলেই কেবল উপস্থিত) |
(কোন সমতুল্য ক্ষেত্র নেই) | testPurchase (শুধুমাত্র লাইসেন্সপ্রাপ্ত পরীক্ষকের কেনাকাটায় উপস্থিত) |
autoRenewing | lineItems.autoRenewingPlan.autoRenewEnabled |
priceCurrenceCode , priceAmountMicros , introductoryPriceInfo | (কোন সমতুল্য ক্ষেত্র নেই) কেনা প্রতিটি সাবস্ক্রিপশনের জন্য basePlan / offer এই তথ্য পাওয়া যাবে। |
বিকাশকারী পেলোড | (কোন সমতুল্য ক্ষেত্র নেই) ডেভেলপার পেলোড অবমুক্ত করা হয়েছে |
পেমেন্ট স্টেট | (কোন সমতুল্য ক্ষেত্র নেই) আপনি subscriptionState থেকে অর্থপ্রদানের অবস্থা অনুমান করতে পারেন:
|
cancelReason , userCancellationTimeMillis , cancelSurveyResult | canceledStateContext |
linkedPurchaseToken | linkedPurchaseToken (কোন পরিবর্তন নেই) |
purchaseType | পরীক্ষা: testPurchase মাধ্যমেপ্রচার: (কোন সমতুল্য ক্ষেত্র নেই); শীঘ্রই আসছে |
priceChange | lineItems.autoRenewingPlan.priceChangeDetails |
profileName , emailAddress , givenName , familyName , profileId | subscribeWithGoogleInfo |
acknowledgementState | acknowledgementState (no change) |
promotionType , promotionCode | (কোন সমতুল্য ক্ষেত্র নেই); শীঘ্রই আসছে |
externalAccountId , obfuscatedExternalAccountId , obfuscatedExteranlProfileId | externalAccountIdentifiers |
অন্যান্য সদস্যতা ব্যবস্থাপনা ফাংশন
যদিও purchases.subscriptions:get
purchases.subscriptionsv2:get
এ আপগ্রেড করা হয়েছে, বাকি ডেভেলপার সাবস্ক্রিপশন ম্যানেজমেন্ট ফাংশনগুলি এখন পর্যন্ত purchases.subscriptions
এন্ডপয়েন্টে অপরিবর্তিত রয়েছে, যাতে আপনি purchases.subscriptions:acknowledge
, purchases.subscriptions:cancel
, purchases.subscriptions:defer
, purchases.subscriptions:refund
, and purchases.subscriptions:revoke
।
মূল্য নির্ধারণ API
আপনি প্লে কনসোলের মাধ্যমে আঞ্চলিক মূল্য গণনা করতে monetization.convertRegionPrices
এন্ডপয়েন্ট ব্যবহার করুন। এই পদ্ধতিটি যেকোনও প্লে-সমর্থিত মুদ্রায় একক মূল্য গ্রহণ করে এবং Google Play কেনাকাটা সমর্থন করে এমন সমস্ত অঞ্চলের জন্য রূপান্তরিত মূল্য (যেখানে প্রযোজ্য করের ডিফল্ট হার সহ) ফেরত দেয়।