এই ডকুমেন্টে বর্ণনা করা হয়েছে কীভাবে গুগল প্লে বিলিং লাইব্রেরি (পিবিএল) ৭ বা ৮ থেকে পিবিএল ৯-এ মাইগ্রেট করতে হয় এবং কীভাবে নতুন ফিচারগুলোর সাথে ইন্টিগ্রেট করতে হয়।
সংস্করণ ৯.০.০-এর পরিবর্তনসমূহের পূর্ণাঙ্গ তালিকার জন্য রিলিজ নোট দেখুন।
সংক্ষিপ্ত বিবরণ
PBL 9-এ বিদ্যমান API-গুলোর উন্নতির পাশাপাশি পূর্বে বাতিল ঘোষিত API-গুলো অপসারণ করা হয়েছে। লাইব্রেরির এই সংস্করণটিতে নতুন সাব-রেসপন্স কোডের মাধ্যমে আরও সমৃদ্ধ এরর কনটেক্সটও যুক্ত করা হয়েছে।
PBL আপগ্রেডের জন্য পশ্চাৎ সামঞ্জস্যতা
PBL 9-এ মাইগ্রেট করার জন্য, আপনাকে আপনার অ্যাপ থেকে বিদ্যমান কিছু API রেফারেন্স আপডেট বা অপসারণ করতে হবে, যেমনটি রিলিজ নোটে এবং পরবর্তীতে এই মাইগ্রেশন গাইডে বর্ণনা করা হয়েছে।
PBL 7 বা 8 থেকে PBL 9-এ আপগ্রেড করুন
PBL 7 বা 8 থেকে PBL 9-এ আপগ্রেড করতে, নিম্নলিখিত ধাপগুলো অনুসরণ করুন:
আপনার অ্যাপের
build.gradleফাইলে প্লে বিলিং লাইব্রেরি ডিপেন্ডেন্সির ভার্সন আপডেট করুন।dependencies { def billing_version = "9.0.0" implementation "com.android.billingclient:billing:$billing_version" }আপনি যদি কোটলিন ব্যবহার করেন, তাহলে গুগল প্লে বিলিং লাইব্রেরি KTX মডিউলটিতে কোটলিন এক্সটেনশন এবং কো-রুটিন সাপোর্ট রয়েছে, যা আপনাকে গুগল প্লে বিলিং লাইব্রেরি ব্যবহার করার সময় প্রচলিত কোটলিন কোড লিখতে সক্ষম করে। আপনার প্রোজেক্টে এই এক্সটেনশনগুলো অন্তর্ভুক্ত করতে, দেখানো অনুযায়ী আপনার অ্যাপের
build.gradleফাইলে নিম্নলিখিত ডিপেন্ডেন্সিটি যোগ করুন:dependencies { val billing_version = "9.0.0" implementation("com.android.billingclient:billing-ktx:$billing_version") }(শুধুমাত্র PBL 7 থেকে PBL 9-এ আপগ্রেডের জন্য প্রযোজ্য)।
queryProductDetailsAsyncমেথডটির ইমপ্লিমেন্টেশন আপডেট করুন।ProductDetailsResponseListener.onProductDetailsResponseমেথডটির সিগনেচারে একটি পরিবর্তন এসেছে, যার জন্য আপনার অ্যাপেরqueryProductDetailsAsyncইমপ্লিমেন্টেশনে পরিবর্তন আনা প্রয়োজন। আরও তথ্যের জন্য, কেনার জন্য উপলব্ধ পণ্যগুলো দেখুন।অপসারিত এপিআইগুলো পরিচালনা করুন।
নিম্নলিখিত সারণিতে সেই API-গুলো তালিকাভুক্ত করা হয়েছে যেগুলো সরিয়ে ফেলা হয়েছে এবং সেগুলোর বিকল্প API-গুলো উল্লেখ করা হয়েছে, যা আপনাকে আপনার অ্যাপে অবশ্যই ব্যবহার করতে হবে।
আপগ্রেড করুন
PBL 9 নিম্নলিখিত সারণিতে তালিকাভুক্ত API-গুলো আর সমর্থন করে না। যদি আপনার ইমপ্লিমেন্টেশনে এই অপসারিত API-গুলোর কোনোটি ব্যবহৃত হয়, তবে সেগুলোর সংশ্লিষ্ট বিকল্প API-গুলোর জন্য সারণিটি দেখুন।
পূর্বে বাতিল করা এপিআই সরানো হয়েছে ব্যবহারের জন্য বিকল্প এপিআই queryPurchaseHistoryAsync API ক্রয়ের ইতিহাস অনুসন্ধান করুন। আপনি যদি বিনামূল্যে ট্রায়ালের জন্য যোগ্যতা নির্ধারণ করতে queryPurchaseHistoryAsync ব্যবহার করে থাকেন, তাহলে এখন একজন ব্যবহারকারী কোন অফারগুলির জন্য যোগ্য তা নির্ধারণ করতে আপনার ProductDetails.getSubscriptionOfferDetails() ব্যবহার করা উচিত। বিলিং ক্লায়েন্ট.এসকেইউটাইপ BillingClient.ProductType . INAPP এবং SUBS প্রোডাক্ট টাইপ কনস্ট্যান্টগুলো কার্যকারিতার দিক থেকে বাতিলকৃত SKU টাইপ কনস্ট্যান্টগুলোর মতোই থাকে। SkuDetails পণ্যের বিবরণ । এটি নতুন ডেটা মডেল যা এককালীন পণ্যগুলোকে সমর্থন করে। SkuDetailsParams queryProductDetailsAsync- এর সাথে QueryProductDetailsParams ব্যবহার করুন। SkuDetailsResponseListener queryProductDetailsAsync এর সাথে ProductDetailsResponseListener ব্যবহার করুন। কোয়েরিপারচেজহিস্টোরিপ্যারামস - সক্রিয় বা অপেক্ষমান ক্রয়ের জন্য queryPurchasesAsync ব্যবহার করুন।
- আপনার ব্যাকএন্ড সার্ভারগুলিতে সম্পন্ন হওয়া কেনাকাটাগুলো ট্র্যাক করুন।
- বাতিল বা অকার্যকর করা কেনাকাটার জন্য সার্ভার-সাইড ভয়েডেড পারচেজেস এপিআই (Voided Purchases API) ব্যবহার করুন।
getSkuDetailsList এবং setSkuDetailsList BillingFlowParams.Builder.setProductDetailsParamsList ব্যবহার করুন querySkuDetailsAsync queryProductDetailsAsync enablePendingPurchases() (প্যারামিটার ছাড়া এপিআই) enablePendingPurchases(PendingPurchasesParams params)
উল্লেখ্য যে, অপ্রচলিত enablePendingPurchases() ফাংশনটিenablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())সাথে কার্যকারিতার দিক থেকে সমতুল্য।queryPurchasesAsync(String skuType, PurchasesResponseListener listener) queryPurchasesAsync আপগ্রেড করুন
নিচের সারণিতে PBL 9 থেকে বাদ দেওয়া API-গুলো এবং সেগুলোর সংশ্লিষ্ট বিকল্প API-গুলোর তালিকা দেওয়া হলো, যা আপনাকে আপনার অ্যাপে অবশ্যই ব্যবহার করতে হবে।
পূর্বে বাতিল করা এপিআই সরানো হয়েছে ব্যবহারের জন্য বিকল্প এপিআই বিলিং ক্লায়েন্ট.এসকেইউটাইপ BillingClient.ProductType . INAPP এবং SUBS প্রোডাক্ট টাইপ কনস্ট্যান্টগুলো কার্যকারিতার দিক থেকে বাতিলকৃত SKU টাইপ কনস্ট্যান্টগুলোর মতোই থাকে। SkuDetails পণ্যের বিবরণ । এটি নতুন ডেটা মডেল যা এককালীন পণ্যগুলোকে সমর্থন করে। SkuDetailsParams queryProductDetailsAsync- এর সাথে QueryProductDetailsParams ব্যবহার করুন। SkuDetailsResponseListener queryProductDetailsAsync এর সাথে ProductDetailsResponseListener ব্যবহার করুন। কোয়েরিপারচেজহিস্টোরিপ্যারামস - সক্রিয় বা অপেক্ষমান ক্রয়ের জন্য queryProductDetailsAsync ব্যবহার করুন।
- আপনার ব্যাকএন্ড সার্ভারগুলিতে সম্পন্ন হওয়া কেনাকাটাগুলো ট্র্যাক করুন।
- বাতিল বা অকার্যকর করা কেনাকাটার জন্য সার্ভার-সাইড ভয়েডেড পারচেজেস এপিআই (Voided Purchases API) ব্যবহার করুন।
getSkuDetailsList এবং setSkuDetailsList BillingFlowParams.Builder.setProductDetailsParamsList ব্যবহার করুন (সুপারিশকৃত) স্বয়ংক্রিয় পরিষেবা পুনঃসংযোগ সক্ষম করুন।
পরিষেবা সংযোগ বিচ্ছিন্ন থাকা অবস্থায় কোনো এপিআই কল করা হলে, প্লে বিলিং লাইব্রেরি স্বয়ংক্রিয়ভাবে পরিষেবা সংযোগ পুনঃস্থাপন করার চেষ্টা করতে পারে। আরও তথ্যের জন্য, ‘স্বয়ংক্রিয় পরিষেবা পুনঃসংযোগ সক্ষম করুন ’ দেখুন।
নতুন উপ-প্রতিক্রিয়া কোডগুলি পরিচালনা করুন।
launchBillingFlow()থেকে ফেরত আসা BillingResult-এ এখন একটি সাব-রেসপন্স কোড ফিল্ড অন্তর্ভুক্ত থাকবে। ব্যর্থতার আরও সুনির্দিষ্ট কারণ জানানোর জন্য এই ফিল্ডটি শুধুমাত্র কিছু ক্ষেত্রে পূরণ করা হবে। সাব-রেসপন্স ফিল্ডটির নিম্নলিখিত মানগুলো থাকতে পারে:-
PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS- ব্যবহারকারীর তহবিল তিনি যে পণ্যটি কেনার চেষ্টা করছেন তার দামের চেয়ে কম হলে এটি ফেরত আসে। -
USER_INELIGIBLE- যখন কোনো ব্যবহারকারী একটি সাবস্ক্রিপশন অফারের জন্য নির্ধারিত যোগ্যতার শর্ত পূরণ করতে পারেন না, তখন এটি ফেরত আসে। -
NO_APPLICABLE_SUB_RESPONSE_CODE- এটি ডিফল্ট মান, যা অন্য কোনো সাব-রেসপন্স কোড প্রযোজ্য না হলে ফেরত আসে।
মাইগ্রেশন ধাপ : আরও ভালো ব্যবহারকারীর অভিজ্ঞতা প্রদানের জন্য, আপনার
PurchasesUpdatedListenerবা সমতুল্য ফলাফল হ্যান্ডলিং সিস্টেমকে এই নির্দিষ্ট সাব-রেসপন্স কোডগুলো শনাক্ত করতে এবং সে অনুযায়ী সাড়া দিতে আপডেট করুন। উদাহরণস্বরূপ, পেমেন্ট পদ্ধতি ঠিক করার জন্য প্রম্পট করা বা একটি নির্দিষ্ট ত্রুটির বার্তা দেখানো।-
ত্রুটি-কোড পুনঃশ্রেণীকরণ সম্পর্কে সচেতনতা।
যেসব ক্ষেত্রে সিস্টেম দ্বারা প্লে স্টোর অ্যাপ ব্লক করা হয় (উদাহরণস্বরূপ, OEM-কাস্টমাইজড কিডস মোডে), সেসব ক্ষেত্রে PBL থেকে প্রাপ্ত রেসপন্স কোড
ERRORথেকেBILLING_UNAVAILABLEএ পরিবর্তিত হয়েছে।স্থানান্তর ধাপ : নিশ্চিত করুন যে আপনার ত্রুটি পরিচালনা করার লজিক এই পরিবর্তনটি গ্রহণ করতে পারে এবং এই নির্দিষ্ট পরিস্থিতিগুলিতে একটি সাধারণ ত্রুটি পাওয়ার উপর নির্ভর করে না।
DeveloperProvidedBillingDetails.getLinkUri()নাল হওয়ার সম্ভাবনা সামলানো।আপনি যদি কোনো বাহ্যিক পেমেন্ট ইন্টিগ্রেশনের অংশ হিসেবে
DeveloperProvidedBillingDetailsব্যবহার করেন, তাহলেgetLinkUri()এখন@Nullableহবে।স্থানান্তর ধাপ : এই পরিবর্তনটি নিরাপদে পরিচালনা করতে, নিশ্চিত করুন যে আপনার ইন্টিগ্রেশন কোড ব্রাউজার ইন্টেন্ট পার্সিং বা লঞ্চ করার আগে
DeveloperProvidedBillingDetails.getLinkUri()মেথড থেকে আসাnullএবং খালি স্ট্রিং ("") উভয় ভ্যালুই হ্যান্ডেল করে। উদাহরণস্বরূপ:কোটলিন
val linkUri = details.getLinkUri() if (!linkUri.isNullOrEmpty()) { val intent = Intent(Intent.ACTION_VIEW, Uri.parse(linkUri)) context.startActivity(intent) }জাভা
String linkUri = details.getLinkUri(); if (!android.text.TextUtils.isEmpty(linkUri)) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(linkUri)); context.startActivity(intent); }ঐচ্ছিক পরিবর্তন।
প্রিপেইড প্ল্যানের জন্য অপেক্ষমান কেনাকাটা সমর্থন করুন। আরও তথ্যের জন্য, ‘সাবস্ক্রিপশন এবং অপেক্ষমান লেনদেন পরিচালনা’ দেখুন।
ভার্চুয়াল কিস্তি সাবস্ক্রিপশন। আরও তথ্যের জন্য, কিস্তি সাবস্ক্রিপশন ইন্টিগ্রেশন দেখুন।