এই বিষয়ে Google Play Billing Library 4 বা 5 থেকে Google Play Billing Library 6-এ কীভাবে মাইগ্রেট করবেন এবং নতুন সাবস্ক্রিপশন ক্ষমতা কীভাবে ব্যবহার করবেন তা বর্ণনা করা হয়েছে।
6.0.0 ভার্সনে হওয়া পরিবর্তনের সম্পূর্ণ তালিকা দেখতে, রিলিজ নোট দেখুন।
এক নজরে
Google Play Billing Library 6, ভার্সন 5-এ চালু করা নতুন সাবস্ক্রিপশন ফিচারের উপর ভিত্তি করে তৈরি করা হয়েছে এবং এতে আরও কিছু উন্নতি যোগ করা হয়েছে। এইসব ফিচার আপনাকে আরও বেশি উপায়ে সাবস্ক্রিপশন বিক্রি করার সুবিধা দেয়, যার ফলে ক্রমাগত বাড়তে থাকা SKU তৈরি ও ম্যানেজ করার প্রয়োজনীয়তা দূর হয় এবং অপারেশনাল খরচ কমে।
Play Billing Library 5-এর সাথে নিয়ে আসা নতুন ফিচার সম্পর্কে আরও জানতে, Play Console-এ সাবস্ক্রিপশনে সাম্প্রতিক পরিবর্তন দেখুন।
ব্যাকওয়ার্ড কম্প্যাটিবল Play Billing Library আপগ্রেড
Play Billing Library 5 এবং নতুন সাবস্ক্রিপশন প্ল্যাটফর্মের মে ২০২২ রিলিজের অংশ হিসেবে, আগে থেকে থাকা সব সাবস্ক্রিপশন প্রোডাক্ট অটোমেটিক এই নতুন প্যারাডাইমে কনভার্ট করা হয়েছে। এর অর্থ হল, Play Billing Library-র নতুন ভার্সনের সাথে মানানসই ক্যাটালগ পেতে, আপনাকে সাবস্ক্রিপশন প্রোডাক্ট কনফিগারেশনে কোনও পরিবর্তন করতে হবে না। সাবস্ক্রিপশন SKU কীভাবে ব্যাকওয়ার্ড কম্প্যাটিবল সাবস্ক্রিপশনে পরিবর্তন করা হয়েছে সেই সম্পর্কে আরও জানতে, Play Console সহায়তা নিবন্ধের পুরনো সাবস্ক্রিপশন নিয়ে কাজ করা বিভাগটি দেখুন।
আপনার অ্যাপের পুরনো ভার্সন এখনও কাজ করে
আপনার কাছে ব্যাকওয়ার্ড কম্প্যাটিবল সাবস্ক্রিপশন ক্যাটালগ থাকলে, আপনার অ্যাপের আগে থেকে থাকা সব ভার্সন এখনও সেইসব প্রোডাক্টের জন্য প্রত্যাশা অনুযায়ী কাজ করা উচিত। এককালীন প্রোডাক্ট কেনাকাটার সুবিধা পুরনো ভার্সনেও কোনও সমস্যা ছাড়াই কাজ করা চালিয়ে যেতে হবে।
আপনার অ্যাপের যেসব ভার্সন বাতিল করা পদ্ধতি (যেমন,
querySkuDetailsAsync())
ব্যবহার করে, সেগুলি ব্যাকওয়ার্ড কম্প্যাটিবল নয় এমন কোনও বেস প্ল্যান বা অফার বিক্রি করতে পারবে না। আপনি ব্যাকওয়ার্ড কম্প্যাটিবল অফার সম্পর্কে প্রাসঙ্গিক Play
Console সহায়তা কেন্দ্র
নিবন্ধ থেকে পড়তে পারবেন।
Play Billing Library 5 বা 6-এ আপগ্রেড করা
Play Billing Library 5 ও 6-এ বন্ধ হয়ে যাওয়া পদ্ধতি
querySkuDetailsAsync ও BillingFlowParams.Builder.setSkuDetails অন্তর্ভুক্ত আছে যা
বিলিং ফ্লো প্যারামিটার হিসেবে SkuDetails
নেয়। এর অর্থ হল, আপনি মাইগ্রেশনের বিভিন্ন ধাপের পরিকল্পনা করে
ধীরে ধীরে Play Billing Library 6-এ মাইগ্রেট করতে পারবেন।
মাইগ্রেশনের প্রথম ধাপ হিসেবে, আপনি শুধু লাইব্রেরি ভার্সন
আপডেট করতে, আপনার ক্যাটালগ ও ব্যাকএন্ড যেমন আছে তেমন রেখে দিতে এবং
আপনার অ্যাপ এখনও বন্ধ হয়ে যাওয়া পদ্ধতি ব্যবহার করার সময় তা পরীক্ষা করতে পারবেন। আপনি queryPurchases, launchPriceChangeFlow বা setVrPurchaseFlow ব্যবহার না করলেও,
এটি আগের মতোই
কাজ করবে। এরপর, মে ২০২২-এ রিলিজ হওয়া নতুন সাবস্ক্রিপশন ফিচার সম্পূর্ণভাবে গ্রহণ করার জন্য আপনি ইটারেট করতে পারবেন।
আপনি যদি আগে Google Play Billing Library 5 মাইগ্রেশনের মাধ্যমে এইসব ফিচার গ্রহণ করে থাকেন, তাহলে আপনি সরাসরি Google Play Billing Library আপডেট করুন এবং ব্যবহারকারীর সাবস্ক্রিপশন কেনাকাটা পরিবর্তন করুন লেবেলযুক্ত বিভাগে যেতে পারেন। আপনি যদি আগের কোনও ভার্সন থেকে শুরু করেন অথবা নতুন ফিচার এখনও পুরোপুরি গ্রহণ না করে থাকেন, তাহলে সেগুলি কীভাবে গ্রহণ করবেন তা জানতে নিচে দেওয়া মাইগ্রেশনের সম্পূর্ণ ধাপ পড়তে পারেন।
মাইগ্রেশনের সম্পূর্ণ ধাপ
আপনার ব্যাকএন্ড প্রোডাক্ট ক্যাটালগে নতুন সাবস্ক্রিপশন তৈরি করুন
Play Developer Console বা Play Developer API ব্যবহার করে, আপনি এখন একাধিক বেস প্ল্যান সহ একটি সাবস্ক্রিপশন কনফিগার করতে পারবেন, যার প্রতিটিতে একাধিক অফার থাকবে। সাবস্ক্রিপশন অফারে ফ্লেক্সিবল দামের মডেল ও উপযুক্ততার বিকল্প থাকে। আপনি বিভিন্ন অটোমেটিক রিনিউয়াল ও প্রিপেড প্ল্যান ব্যবহার করে সাবস্ক্রিপশন লাইফসাইকেল জুড়ে অফার তৈরি করতে পারবেন।
আপনার অ্যাপ মাইগ্রেট করার আগে, Play Billing Library 6 ইন্টিগ্রেশনের জন্য নতুন সাবস্ক্রিপশন প্ল্যাটফর্মে এন্টিটি স্ট্রাকচার অনুসরণ করে নতুন প্রোডাক্ট তৈরি করার জন্য আমরা সাজেস্ট করি। আপনি নিজের পুরনো ক্যাটালগে একই এনটাইটেলমেন্ট সুবিধা সহ ডুপ্লিকেট প্রোডাক্টগুলিকে একটি সাবস্ক্রিপশনের অধীনে একত্রিত করতে পারেন এবং আপনি যে সমস্ত বিকল্প অফার করতে চান তা দেখানোর জন্য বেস প্ল্যান এবং অফার কনফিগারেশন ব্যবহার করতে পারেন। এই সাজেশন সম্পর্কে আরও তথ্যের জন্য, Play Console সহায়তা নিবন্ধের পুরনো সাবস্ক্রিপশন নিয়ে কাজ করা বিভাগটি দেখুন।
আমরা সাজেস্ট করি যে মে ২০২২-এর রিলিজের পরে কনভার্ট করা সাবস্ক্রিপশন প্রোডাক্টে কোনও পরিবর্তন করবেন না;
আপনার অ্যাপের যে ভার্সনগুলি বন্ধ হয়ে যাওয়া পদ্ধতি (যেমন, querySkuDetailsAsync()) ব্যবহার করে, সেগুলির সাথে বিক্রি করার জন্য
কনভার্ট করা সাবস্ক্রিপশন প্রোডাক্টগুলি যেমন আছে তেমনই রেখে দিন। এর ফলে, এই পুরনো বিল্ডগুলি প্রভাবিত হতে পারে এমন কোনও পরিবর্তন হবে না।
কনভার্সন প্রসেস, মে ২০২২-এর আগে আপনার ক্যাটালগে থাকা সাবস্ক্রিপশন প্রোডাক্টগুলিকে শুধুমাত্র পাঠযোগ্য করে তুলেছে যাতে আকস্মিক পরিবর্তনগুলি এড়ানো যায় যার ফলে আপনার বিদ্যমান ইন্টিগ্রেশনে সমস্যা হতে পারে। এইসব সাবস্ক্রিপশনে পরিবর্তন করা সম্ভব, তবে এর ফলে আপনার ফ্রন্টএন্ড ও ব্যাকএন্ড ইন্টিগ্রেশন প্রভাবিত হতে পারে:
ফ্রন্টএন্ডে, সাবস্ক্রিপশন প্রোডাক্টের বিবরণ পেতে
querySkuDetailsAsync()ব্যবহার করা অ্যাপ ভার্সন শুধুমাত্র ব্যাকওয়ার্ড কম্প্যাটিবল বেস প্ল্যান ও অফার বিক্রি করতে পারে এবং শুধুমাত্র একটি ব্যাকওয়ার্ড কম্প্যাটিবল বেস প্ল্যান ও অফার কম্বিনেশন থাকতে পারে, তাই আপনি কনভার্ট করা সাবস্ক্রিপশনে নতুন প্ল্যান বা অফার যোগ করলে, নতুন অতিরিক্ত বেস প্ল্যান বা অফার আপনার অ্যাপের এইসব পুরনো ভার্সনে বিক্রি করা যাবে না।ব্যাকএন্ডে, আপনি যদি Play Console UI-তে আপনার কনভার্ট করা সাবস্ক্রিপশন এডিট করেন, তাহলে আপনি এই উদ্দেশ্যে এন্ডপয়েন্ট কল করলে,
inappproductsএন্ডপয়েন্টের মাধ্যমে সেগুলি ম্যানেজ করতে পারবেন না। এছাড়াও, এইসব সাবস্ক্রিপশনের জন্য কেনাকাটা ম্যানেজ করতে আপনাকে নতুন সাবস্ক্রিপশন কেনাকাটার স্ট্যাটাস এন্ডপয়েন্টে (purchases.subscriptionsv2.get) মাইগ্রেট করতে হবে, কারণ পুরনো কেনাকাটার স্ট্যাটাস এন্ডপয়েন্ট (purchases.subscriptions.get) শুধুমাত্র ব্যাকওয়ার্ড কম্প্যাটিবল বেস প্ল্যান এবং অফার কেনাকাটা ম্যানেজ করার জন্য প্রয়োজনীয় ডেটা ফেরত দেয়। আরও তথ্যের জন্য সাবস্ক্রিপশন কেনার স্ট্যাটাস ম্যানেজ করুন বিভাগ পড়ুন।
নতুন API-এর মাধ্যমে আপনার ব্যাকএন্ড সাবস্ক্রিপশন ক্যাটালগ ম্যানেজ করুন
আপনি যদি Google Play Developer API-এর মাধ্যমে আপনার সাবস্ক্রিপশন প্রোডাক্ট ক্যাটালগ অটোমেটিক ম্যানেজ করেন, তাহলে সাবস্ক্রিপশন, বেস প্ল্যান এবং অফার তৈরি ও ম্যানেজ করতে আপনাকে নতুন সাবস্ক্রিপশন প্রোডাক্ট ডেফিনিশন এন্ডপয়েন্ট ব্যবহার করতে হবে। এই রিলিজের জন্য প্রোডাক্ট ক্যাটালগ API-তে হওয়া পরিবর্তন সম্পর্কে আরও জানতে মে ২০২২ সাবস্ক্রিপশন ফিচার গাইড পড়ুন।
Google Play Billing সাবস্ক্রিপশনের জন্য অটোমেটিক প্রোডাক্ট ক্যাটালগ ম্যানেজমেন্ট মডিউল মাইগ্রেট করতে, আপনার সাবস্ক্রিপশন ক্যাটালগ ম্যানেজ ও প্রকাশ করতে
inappproducts
API-এর পরিবর্তে নতুন Subscription Publishing API ব্যবহার করুন। তিনটি নতুন এন্ডপয়েন্ট আছে:
- সাবস্ক্রিপশন প্রোডাক্ট ম্যানেজ করতে
Monetization.subscriptions। - সাবস্ক্রিপশনের জন্য বেস প্ল্যান ম্যানেজ করতে
Monetization.basePlans। Monetization.offersবেস প্ল্যানের জন্য অফার ম্যানেজ করতে।
এই নতুন এন্ডপয়েন্টে আপনার ক্যাটালগের সব নতুন ক্ষমতা কাজে লাগানোর জন্য প্রয়োজনীয় সব কার্যকারিতা আছে: বেস প্ল্যান ও অফার ট্যাগ, আঞ্চলিক টার্গেটিং, প্রিপেড প্ল্যান এবং আরও অনেক কিছু।
একবার কেনা যায় এমন প্রোডাক্টের জন্য অ্যাপ-মধ্যস্থ প্রোডাক্ট ক্যাটালগ ম্যানেজ করতে আপনাকে এখনও
inappproducts
API ব্যবহার করতে হবে।
আপনার অ্যাপের যেসব ভার্সন বাতিল করা পদ্ধতি (যেমন, querySkuDetailsAsync()) ব্যবহার করে, সেগুলি ব্যাকওয়ার্ড কম্প্যাটিবল নয় এমন কোনও বেস প্ল্যান বা অফার বিক্রি করতে পারবে না। আপনি এখান থেকে ব্যাকওয়ার্ড কম্প্যাটিবল অফার সম্পর্কে আরও জানতে পারবেন।
Google Play Billing Library আপডেট করুন
আপনার নতুন সাবস্ক্রিপশন প্রোডাক্ট ক্যাটালগ তৈরি করা হয়ে গেলে,
আপনি নিজের অ্যাপ Google Billing Library 5-এ মাইগ্রেট করতে পারবেন। আপনার অ্যাপের build.gradle ফাইলে
আগে থেকে থাকা Play Billing Library ডিপেন্ডেন্সি
আপডেট করা ভার্সন দিয়ে প্রতিস্থাপন করুন।
dependencies {
def billingVersion = "6.0.0"
implementation "com.android.billingclient:billing:$billingVersion"
}
আপনি মেথডে কোনও কল পরিবর্তন না করলেও, আপনার প্রোজেক্ট এখনই তৈরি করা উচিত—Play Billing Library 6 ব্যাকওয়ার্ড কম্প্যাটিবল। SKU-এর ধারণাটি বাতিল করা হয়েছে বলে মনে করা হয়, তবে অ্যাপ পোর্ট করার প্রক্রিয়াটিকে আরও সহজ এবং আরও ইনক্রিমেন্টাল করার জন্য এখনও এটি ব্যবহার করা হয়।
বিলিং ক্লায়েন্ট শুরু করুন এবং Google Play-এর সাথে কানেকশন স্থাপন করুন
Android অ্যাপ থেকে কেনাকাটা শুরু করার প্রথম ধাপগুলি একই থাকে:
কেনার জন্য উপলভ্য প্রোডাক্ট দেখুন
কোনও ব্যবহারকারী কেনার জন্য উপযুক্ত এমন সব অফার পেতে:
SkuDetailsParams-এর জায়গায়QueryProductDetailsParamsনামটি ব্যবহার করুনBillingClient.queryProductDetailsAsync()ব্যবহার করতেBillingClient.querySkuDetailsAsync()কল পাল্টান
মনে রাখবেন, কোয়েরির ফলাফল এখন SkuDetails-এর পরিবর্তে ProductDetails।
প্রতিটি ProductDetails আইটেমে প্রোডাক্ট সম্পর্কে তথ্য থাকে
(আইডি, শীর্ষক, ধরন ইত্যাদি)। সাবস্ক্রিপশন প্রোডাক্টের জন্য, ProductDetails-এ
List<ProductDetails.SubscriptionOfferDetails> থাকে, যা হল
সাবস্ক্রিপশন অফারের বিবরণের তালিকা। একবার কেনা যায় এমন প্রোডাক্টের ক্ষেত্রে,
ProductDetails-এ ProductDetails.OneTimePurchaseOfferDetails থাকে। ব্যবহারকারীদের
কোন অফার দেখানো হবে তা নির্ধারণ করতে এগুলি ব্যবহার করা যেতে পারে।
এই পরিবর্তন করার আগে ও পরে আপনার অ্যাপ কেমন দেখতে হতে পারে তা নিম্নলিখিত উদাহরণ থেকে দেখুন:
আগে
Kotlin
val skuList = ArrayList<String>() skuList.add("up_basic_sub") val params = SkuDetailsParams.newBuilder() params.setSkusList(skuList).setType(BillingClient.SkuType.SUBS).build() billingClient.querySkuDetailsAsync(params) { billingResult, skuDetailsList -> // Process the result }
জাভা
List<String> skuList = new ArrayList<>(); skuList.add("up_basic_sub"); SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder(); params.setSkusList(skuList).setType(SkuType.SUBS).build(); billingClient.querySkuDetailsAsync(params, new SkuDetailsResponseListener() { @Override public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) { // Process the result. } } );
পরে
Kotlin
val productList = listOf( QueryProductDetailsParams.Product.newBuilder() .setProductId("up_basic_sub") .setProductType(BillingClient.ProductType.SUBS) .build() ) val params = QueryProductDetailsParams.newBuilder().setProductList(productList).build() billingClient.queryProductDetailsAsync(params) { billingResult, productDetailsList -> // Process the result }
জাভা
ImmutableList<Product> productList = ImmutableList.of(Product.newBuilder() .setProductId("up_basic_sub") .setProductType(ProductType.SUBS) .build()); QueryProductDetailsParams params = QueryProductDetailsParams.newBuilder() .setProductList(productList) .build(); billingClient.queryProductDetailsAsync( params, new ProductDetailsResponseListener() { public void onProductDetailsResponse(BillingResult billingResult, List<ProductDetails> productDetailsList) { // Process the result } } );
queryProductDetailsAsync-এর জন্য কলব্যাক List<ProductDetails> রিটার্ন করে।
প্রতিটি ProductDetails আইটেমে প্রোডাক্ট সম্পর্কে তথ্য থাকে
(আইডি, শীর্ষক, ধরন ইত্যাদি)। প্রধান পার্থক্য হল, সাবস্ক্রিপশন প্রোডাক্টে এখন List<ProductDetails.SubscriptionOfferDetails>-ও থাকে,
যেখানে ব্যবহারকারীর জন্য উপলভ্য সব অফার থাকে।
Play Billing Library-র আগের ভার্সনে নতুন অবজেক্ট (সাবস্ক্রিপশন, বেস প্ল্যান, অফার ইত্যাদি) কাজ করে না, তাই নতুন সিস্টেম প্রতিটি সাবস্ক্রিপশন SKU-কে একটি ব্যাকওয়ার্ড কম্প্যাটিবল বেস প্ল্যান ও অফারে অনুবাদ করে। এক-বার ক্রয় করা যায় এমন উপলভ্য প্রোডাক্টও
ProductDetails অবজেক্টে পোর্ট করা হয়। getOneTimePurchaseOfferDetails() পদ্ধতি ব্যবহার করে এক-বার ক্রয়
প্রোডাক্টের অফার সংক্রান্ত বিবরণ অ্যাক্সেস করা
যেতে পারে।
খুব কম ক্ষেত্রে, কিছু ডিভাইসে ProductDetails এবং queryProductDetailsAsync() কাজ করে না,
সাধারণত Google Play পরিষেবার
পুরনো ভার্সন ব্যবহার করার কারণে এটি হয়। এই পরিস্থিতিতে
যথাযথ সহায়তা নিশ্চিত করতে, queryProductDetailsAsync-এ কল করার আগে
PRODUCT_DETAILS
ফিচারের জন্য
isFeatureSupported()-এ কল করুন। উত্তর যদি
OK হয়,
তাহলে ডিভাইসে ফিচারটি কাজ করে এবং আপনি queryProductDetailsAsync() কল করতে পারবেন।
উত্তর FEATURE_NOT_SUPPORTED হলে,
আপনি এর পরিবর্তে querySkuDetailsAsync()-এর মাধ্যমে
উপলভ্য ব্যাকওয়ার্ড কম্প্যাটিবল প্রোডাক্টের তালিকা পাওয়ার অনুরোধ করতে পারেন।
ব্যাকওয়ার্ড কম্প্যাটিবিলিটি ফিচার কীভাবে ব্যবহার করতে হয় সেই সম্পর্কে আরও জানতে, মে ২০২২ সাবস্ক্রিপশন ফিচার গাইড দেখুন।
অফার কেনার ফ্লো লঞ্চ করুন
কোনও অফারের জন্য পারচেজ ফ্লো লঞ্চ করা, SKU-এর জন্য ফ্লো লঞ্চ করার মতোই। ভার্সন ৬ ব্যবহার করে কেনাকাটার অনুরোধ শুরু করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
BillingFlowParams-এর জন্যSkuDetailsব্যবহার করার পরিবর্তে,ProductDetailsParamsব্যবহার করুন।- অফার আইডি, বেস প্ল্যান আইডি এবং আরও অনেক কিছুর মতো অফারের বিবরণ
SubscriptionOfferDetailsঅবজেক্ট ব্যবহার করে পাওয়া যেতে পারে।
ব্যবহারকারীর বেছে নেওয়া অফার সহ প্রোডাক্ট কিনতে, বেছে নেওয়া অফারের offerToken
পান এবং এটি ProductDetailsParams অবজেক্টে পাস করুন।
আপনি BillingFlowParams অবজেক্ট তৈরি করার পরে, BillingClient-এর সাথে বিলিং ফ্লো
লঞ্চ করার পদ্ধতি একই থাকে।
এই পরিবর্তন করার আগে ও পরে আপনার অ্যাপ কেমন দেখতে হতে পারে তা নিম্নলিখিত উদাহরণ থেকে দেখুন:
আগে
Kotlin
// An activity reference from which the billing flow will be launched. val activity : Activity = ... // Retrieve a value for "skuDetails" by calling querySkuDetailsAsync(). val billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(skuDetails) .build() val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)
জাভা
// An activity reference from which the billing flow will be launched. Activity activity = ...; // Retrieve a value for "skuDetails" by calling querySkuDetailsAsync(). BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(skuDetails) .build(); BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)
পরে
Kotlin
// An activity reference from which the billing flow will be launched. val activity : Activity = ...; val productDetailsParamsList = listOf( BillingFlowParams.ProductDetailsParams.newBuilder() // retrieve a value for "productDetails" by calling queryProductDetailsAsync() .setProductDetails(productDetails) // For One-time product, "setOfferToken" method shouldn't be called. // For subscriptions, to get the offer token corresponding to the selected // offer call productDetails.subscriptionOfferDetails?.get(selectedOfferIndex)?.offerToken .setOfferToken(selectedOfferToken) .build() ) val billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsParamsList) .build() // Launch the billing flow val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)
জাভা
// An activity reference from which the billing flow will be launched. Activity activity = ...; ImmutableList<ProductDetailsParams> productDetailsParamsList = ImmutableList.of( ProductDetailsParams.newBuilder() // retrieve a value for "productDetails" by calling queryProductDetailsAsync() .setProductDetails(productDetails) // For one-time products, "setOfferToken" method shouldn't be called. // For subscriptions, to get the offer token corresponding to the selected // offer call productDetails.getSubscriptionOfferDetails().get(selectedOfferIndex).getOfferToken() .setOfferToken(selectedOfferToken) .build() ); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsParamsList) .build(); // Launch the billing flow BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
কেনাকাটা প্রসেস করা
Google Play Billing Library 6-এর মাধ্যমে কেনাকাটা প্রসেস করার পদ্ধতি আগের ভার্সনের মতোই রয়েছে।
ব্যবহারকারীর মালিকানাধীন সমস্ত অ্যাক্টিভ কেনাকাটা টানতে এবং নতুনের জন্য কোয়েরি করতে কেনাকাটা, নিম্নলিখিত কাজ করুন:
queryPurchasesAsync()-এBillingClient.SkuTypeভ্যালু পাস করার পরিবর্তে,QueryPurchasesParamsঅবজেক্ট পাস করুন যার মধ্যেBillingClient.ProductTypeভ্যালু আছে।
এই পরিবর্তন করার আগে ও পরে আপনার অ্যাপ কেমন দেখতে হতে পারে তা নিম্নলিখিত উদাহরণ থেকে দেখুন:
আগে
Kotlin
billingClient.queryPurchasesAsync(BillingClient.SkuType.SUBS) { billingResult, purchaseList -> { // Process the result } }
জাভা
billingClient.queryPurchasesAsync( BillingClient.SkuType.SUBS, new PurchasesResponseListener() { public void onQueryPurchasesResponse( BillingResult billingResult, List<Purchase> purchases) { // process the result } } );
পরে
Kotlin
billingClient.queryPurchasesAsync( QueryPurchasesParams.newBuilder() .setProductType(BillingClient.ProductType.SUBS) .build() ) { billingResult, purchaseList -> // Process the result }
জাভা
billingClient.queryPurchasesAsync( QueryPurchasesParams.newBuilder().setProductType(ProductType.SUBS).build(), new PurchasesResponseListener() { public void onQueryPurchasesResponse( BillingResult billingResult, List<Purchase> purchases) { // Process the result } } );
অ্যাপ-বহিস্থ কেনাকাটা এবং পেন্ডিং ট্রানজ্যাকশন ম্যানেজ করার ধাপগুলি পরিবর্তন হয়নি।
আপনার ব্যাকএন্ডে নতুন API-এর মাধ্যমে সাবস্ক্রিপশন কেনাকাটার স্ট্যাটাস ম্যানেজ করুন
আগের ধাপে তৈরি করা নতুন প্রোডাক্টের কেনাকাটা ম্যানেজ করার জন্য আপনার ব্যাকএন্ডে সাবস্ক্রিপশন কেনাকাটার স্ট্যাটাস ম্যানেজমেন্ট কম্পোনেন্ট মাইগ্রেট করতে হবে। আপনার বর্তমান সাবস্ক্রিপশন কেনাকাটার স্ট্যাটাস ম্যানেজমেন্ট কম্পোনেন্ট, ২০২২ সালের মে মাসে লঞ্চের আগে আপনার সংজ্ঞায়িত করা কনভার্ট করা সাবস্ক্রিপশন প্রোডাক্টের জন্য স্বাভাবিকভাবে কাজ করা উচিত এবং ব্যাকওয়ার্ড কম্প্যাটিবল অফারের কেনাকাটা ম্যানেজ করার জন্য এটি যথেষ্ট হওয়া উচিত, তবে এটি কোনও নতুন কার্যকারিতা সাপোর্ট করে না।
আপনার সাবস্ক্রিপশন কেনাকাটার স্ট্যাটাস ম্যানেজমেন্ট মডিউলের জন্য আপনাকে নতুন Subscription Purchases API প্রয়োগ করতে হবে, যা কেনাকাটার স্ট্যাটাস চেক করে এবং আপনার ব্যাকএন্ডে Play Billing সাবস্ক্রিপশন এনটাইটেলমেন্ট ম্যানেজ করে। API-এর পুরনো ভার্সন নতুন প্ল্যাটফর্মে কেনাকাটা ম্যানেজ করার জন্য প্রয়োজনীয় সব বিবরণ ফেরত দেয় না। আগের ভার্সন থেকে হওয়া পরিবর্তনের ব্যাপারে বিস্তারিত জানতে, মে ২০২২-এর নতুন সাবস্ক্রিপশন ফিচার সংক্রান্ত নির্দেশিকা দেখুন।
সাবস্ক্রিপশন স্ট্যাটাস সম্পর্কে লেটেস্ট তথ্য পেতে, আপনি প্রতিবার SubscriptionNotification রিয়েল-টাইম ডেভেলপার বিজ্ঞপ্তি
পেলে, সাধারণত Subscription Purchases API-কে
কল করবেন। আপনাকে purchases.subscriptions.get-এ করা কলগুলি
Subscription Purchases API-এর নতুন ভার্সন, purchases.subscriptionsv2.get-এর সাথে
পরিবর্তন করতে হবে।
SubscriptionPurchaseV2
নামে একটি নতুন রিসোর্স আছে
যা নতুন মডেলে সাবস্ক্রিপশনের জন্য কেনাকাটার এনটাইটেলমেন্ট ম্যানেজ করার জন্য
পর্যাপ্ত তথ্য প্রদান করে।
এই নতুন এন্ডপয়েন্ট আপনার সমস্ত সাবস্ক্রিপশন প্রোডাক্ট এবং আপনার সমস্ত কেনাকাটার স্ট্যাটাস ফিরিয়ে দেয়, অ্যাপের যে ভার্সন সেগুলি বিক্রি করেছে এবং কখন প্রোডাক্টটি সংজ্ঞায়িত করা হয়েছিল (মে ২০২২ রিলিজের আগে বা পরে) তা নির্বিশেষে, তাই মাইগ্রেশনের পরে আপনার সাবস্ক্রিপশন কেনাকাটার স্ট্যাটাস ম্যানেজমেন্ট মডিউলের শুধুমাত্র এই ভার্সনটির প্রয়োজন হবে।
ব্যবহারকারীর সাবস্ক্রিপশন কেনাকাটা পরিবর্তন করা
Play Billing Library 5 এবং তার আগের ভার্সনে,
ProrationMode
ব্যবহারকারীর সাবস্ক্রিপশন কেনাকাটায় পরিবর্তন প্রয়োগ করতে ব্যবহার করা হত, যেমন আপগ্রেড
বা ডাউনগ্রেড করা। এটি বাতিল করা হয়েছে এবং ভার্সন ৬-এ
ReplacementMode
দিয়ে পরিবর্তন করা হয়েছে।
সাবস্ক্রিপশনের দামের পরিবর্তন ম্যানেজ করা
আগে বন্ধ করা launchPriceConfirmationFlow API,
Play Billing Library 6 থেকে সরিয়ে দেওয়া হয়েছে। বিকল্পের জন্য, দাম পরিবর্তন সংক্রান্ত
গাইড দেখুন।
Play Billing লাইব্রেরির সমস্যা ম্যানেজ করা
Play Billing Library 6-এ, ব্যবহারকারীর ডিভাইস এবং Google Play সিস্টেমের মধ্যে নেটওয়ার্ক কানেকশনে সমস্যা নির্দেশ করার জন্য একটি নতুন NETWORK_ERROR কোড যোগ করা হয়েছে। এছাড়াও, SERVICE_TIMEOUT এবং
SERVICE_UNAVAILABLE কোডে পরিবর্তন করা হয়েছে। আরও তথ্যের জন্য, BillingResult রেসপন্স কোড
ম্যানেজ করা দেখুন।
পেন্ডিং ট্রানজ্যাকশন ম্যানেজ করা
6.0.0 ভার্সন থেকে শুরু করে, Play Billing Library, বাকি থাকা কেনাকাটার জন্য অর্ডার
আইডি তৈরি করে না। এইসব কেনাকাটার ক্ষেত্রে, কেনাকাটা
PURCHASED
স্টেটে সরিয়ে নিয়ে যাওয়ার পরে
অর্ডার আইডি দেখানো হয়। নিশ্চিত করুন যে আপনার ইন্টিগ্রেশন শুধুমাত্র একটি ট্রানজ্যাকশন সম্পূর্ণ হওয়ার পরে একটি অর্ডার আইডি আশা করে। আপনি এখনও আপনার রেকর্ডের জন্য কেনাকাটার টোকেন ব্যবহার করতে পারবেন। বাকি থাকা কেনাকাটা ম্যানেজ করার ব্যাপারে আরও তথ্যের জন্য, Play
Billing Library ইন্টিগ্রেশন গাইড এবং
কেনাকাটার লাইফসাইকেল ম্যানেজমেন্ট গাইড দেখুন।