Google Play Billing Library রিলিজ নোট

এই ডকুমেন্টে Google Play Billing Library-এর রিলিজ নোট রয়েছে।

Google Play Billing Library 9.1.0 রিলিজ (১৮-০৬-২০২৬)

Google Play Billing Library-এর 9.1.0 ভার্সন এবং Kotlin এক্সটেনশন এখন উপলভ্য।

পরিবর্তনগুলির সারাংশ

Google Play Billing Library 9.0.0 রিলিজ (১৯-০৫-২০২৬)

Google Play বিলিং লাইব্রেরি ও Kotlin এক্সটেনশনের 9.0.0 ভার্সন এখন উপলভ্য। আপনি যদি PBL-এর আগের ভার্সন থেকে মাইগ্রেট করতে চান, তাহলে PBL 9 মাইগ্রেশন গাইড দেখুন।

পরিবর্তনগুলির সারাংশ

  • ব্লক করা Play Store অ্যাক্টিভিটির জন্য আপডেট করা সমস্যার কোড: ব্লক করা Play Store অ্যাপের জন্য সমস্যার কোড আপডেট করা হয়েছে। যেসব ক্ষেত্রে সিস্টেম Play Store অ্যাপ ব্লক করে দেয় (যেমন, OEM-কাস্টমাইজ করা কিডস মোডে), রেসপন্স কোডটি ERROR থেকে পরিবর্তিত হয়ে BILLING_UNAVAILABLE হয়ে যায়। এছাড়াও, এই ধরনের ঘটনার ক্ষেত্রে BillingResult এখন একটি Play Store ব্লক করা হয়েছে ডিবাগ মেসেজ প্রদান করে।

  • ডেভেলপার-প্রদত্ত বিলিংয়ের জন্য নাল হওয়া সংক্রান্ত আপডেট: DeveloperProvidedBillingDetails.getLinkUri() পদ্ধতিটি @Nullable হিসেবে আপডেট করা হয়েছে। এই পরিবর্তনের ফলে এমন পরিস্থিতি সামলানো যায় যেখানে পেমেন্ট বেছে নেওয়ার সময় এক্সটার্নাল পেমেন্টের জন্য ডাইরেক্ট লিঙ্ক URI উপলভ্য থাকে না।

    এই পরিবর্তন নিরাপদে ম্যানেজ করতে, নিশ্চিত করুন যে আপনার ইন্টিগ্রেশন কোড পার্স করার আগে বা ব্রাউজার ইনটেন্ট লঞ্চ করার আগে DeveloperProvidedBillingDetails.getLinkUri() পদ্ধতি থেকে পাওয়াnull এবং খালি স্ট্রিং ("") ভ্যালু, দুটিই ম্যানেজ করে।

  • targetSdkVersion-এর মান আপডেট করে ৩৫ করা হয়েছে।

  • আপনি এখন ইন-অ্যাপ মেসেজিং ব্যবহার করে আসন্ন অপ্ট-ইন দাম বৃদ্ধি সম্পর্কে ব্যবহারকারীদের বিজ্ঞপ্তি পাঠাতে পারবেন। এর ফলে ব্যবহারকারী অ্যাপ না ছেড়েই দাম বাড়ার বিষয়টি কনফার্ম করতে পারেন। বকেয়া অপ্ট-ইন দাম বাড়ার মেসেজটি প্রথম দিন থেকে দেখানো শুরু হয় যেদিন ব্যবহারকারী দাম বাড়ার বিষয়টি গ্রহণ করতে পারেন এবং মেসেজটি সর্বাধিক প্রতি ৭ দিনে একবার দেখানো হয়।

Google Play Billing Library 8.3.0 রিলিজ (২৩-১২-২০২৫)

Google Play বিলিং লাইব্রেরির 8.3.0 ভার্সন এবং Kotlin এক্সটেনশন এখন উপলভ্য।

পরিবর্তনগুলির সারাংশ

  • এক্সটার্নাল পেমেন্টের জন্য নতুন API:

  • এক্সটার্নাল পেমেন্ট ফ্লো ড্রপ-অফের জন্য উন্নত ত্রুটি ক্যাটেগরাইজেশন:

    • কোনও ব্যবহারকারী যদি পেমেন্ট সম্পূর্ণ করার জন্য কেনাকাটার ফ্লো থেকে বেরিয়ে গিয়ে কোনও এক্সটার্নাল অ্যাপে (যেমন, ই-ওয়ালেট) যান এবং ফিরে না এসে ট্রানজ্যাকশন অসম্পূর্ণ রেখে দেন, তাহলে ক্লায়েন্টকে যে রেসপন্স কোড পাঠানো হয় সেটি এখন BillingResponseCode.USER_CANCELED (১) এবং তার সাথে ডিবাগ মেসেজ BILLING_ACTIVITY_PAUSED (আগে ডিফল্ট হিসেবে BillingResponseCode.ERROR (৬) পাঠানো হত)।

Google Play Billing Library 8.2.1 রিলিজ (১৫-১২-২০২৫)

Google Play বিলিং লাইব্রেরির 8.2.1 ভার্সন এবং Kotlin এক্সটেনশন এখন উপলভ্য।

সমস্যার সমাধান

Google Play Billing Library 8.2.0 রিলিজ (০৯-১২-২০২৫)

Google Play বিলিং লাইব্রেরির 8.2.0 ভার্সন এবং Kotlin এক্সটেনশন এখন উপলভ্য।

পরিবর্তনগুলির সারাংশ

Google Play Billing Library 8.1.0 রিলিজ (০৬-১১-২০২৫)

Google Play Billing Library-এর 8.1.0 ভার্সন এবং Kotlin এক্সটেনশন এখন উপলভ্য।

পরিবর্তনগুলির সারাংশ

  • সাসপেন্ড করা সাবস্ক্রিপশন

    সাবস্ক্রিপশন কোয়েরি করার সময় সাসপেন্ড করা সাবস্ক্রিপশন অন্তর্ভুক্ত করতে BillingClient.queryPurchasesAsync() পদ্ধতিতে একটি নতুন প্যারামিটার যোগ করা হয়েছে। সাসপেন্ড করা সাবস্ক্রিপশন এখনও ব্যবহারকারীর সাথে অ্যাট্রিবিউট করা হয়, কিন্তু তা অ্যাক্টিভ থাকে না, কারণ ব্যবহারকারী সাবস্ক্রিপশন পজ করেছেন অথবা তার রিনিউয়াল পেমেন্ট পদ্ধতি বাতিল হয়ে গেছে।

    লিসেনারে রিটার্ন করা Purchase অবজেক্ট, সাসপেন্ড করা যেকোনও সাবস্ক্রিপশনের জন্য isSuspended() = true রিটার্ন করবে। এই ক্ষেত্রে, কেনা সাবস্ক্রিপশনে অ্যাক্সেস দেওয়া উচিত নয় এবং পরিবর্তে ব্যবহারকারীকে সাবস্ক্রিপশন কেন্দ্রে পাঠিয়ে দিন, যেখানে ব্যবহারকারী তার পেমেন্ট পদ্ধতি ম্যানেজ করতে অথবা সাবস্ক্রিপশন আবার অ্যাক্টিভেট করার জন্য পজ করতে পারবেন।

  • সাবস্ক্রিপশন সংক্রান্ত আপডেট:

    • BillingFlowParams.ProductDetailsParams অবজেক্টে এখন setSubscriptionProductReplacementParams() মেথড আছে যার মধ্যে আপনি প্রোডাক্ট লেভেল রিপ্লেসমেন্ট সংক্রান্ত তথ্য নির্দিষ্ট করতে পারবেন।

    • SubscriptionProductReplacementParams অবজেক্টের দুটি সেটার পদ্ধতি আছে:

      • setOldProductId: পুরনো প্রোডাক্ট যা বর্তমান ProductDetails প্রোডাক্ট দিয়ে পরিবর্তন করতে হবে।
      • setReplacementMode: এটি আইটেম লেভেল রিপ্লেসমেন্ট মোড। মোডগুলি মূলত SubscriptionUpdateParams-এর মতোই, তবে ভ্যালু ম্যাপিং আপডেট করা হয়েছে। একটি নতুন রিপ্লেসমেন্ট মোড KEEP_EXISTING চালু করা হয়েছে যা আপনাকে কোনও আইটেমের জন্য বর্তমান পেমেন্ট শিডিউল অপরিবর্তিত রাখতে দেয়।
    • SubscriptionUpdateParams setSubscriptionReplacementMode-এর ব্যবহার বন্ধ হয়ে যাবে। এর পরিবর্তে আপনাকে SubscriptionProductReplacementParams.setReplacementMode ব্যবহার করতে হবে।

  • minSdkVersion-এ আপডেট করে ২৩ করা হয়েছে।

  • একবার কেনা যাবে এমন প্রোডাক্টের জন্য প্রি-অর্ডার API চালু করা হয়েছে

    প্রি-অর্ডারের বিবরণ পাওয়ার জন্য ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails() API এখন ব্যবহার করা যাবে।

  • Google Play Billing Library এখন Kotlin ভার্সন 2.2.0-এ কাজ করে।

Google Play Billing Library 8.0.0 রিলিজ (৩০-০৬-২০২৫)

Google Play বিলিং লাইব্রেরি ও Kotlin এক্সটেনশনের 8.0.0 ভার্সন এখন উপলভ্য।

পরিবর্তনগুলির সারাংশ

  • ইন-অ্যাপ আইটেম এখন থেকে এককালীন প্রোডাক্ট হিসেবে পরিচিত হবে।

  • এককালীন প্রোডাক্টের জন্য একাধিক কেনাকাটার বিকল্প ও অফার।

    আপনি এখন নিজের এককালীন প্রোডাক্টের জন্য একাধিক কেনাকাটার বিকল্প ও অফার পাবেন। এর ফলে আপনি কীভাবে প্রোডাক্ট বিক্রি করবেন সেই বিষয়ে আরও স্বাধীনতা পান এবং সেগুলি ম্যানেজ করার জটিলতাও কমে যায়।

  • queryProductDetailsAsync() পদ্ধতি উন্নত করা হয়েছে।

    PBL 8.0.0-এর আগের ভার্সনে, queryProductDetailsAsync() পদ্ধতি ফেচ করা যায়নি এমন প্রোডাক্ট রিটার্ন করত না। এর কারণ হতে পারে যে প্রোডাক্টটি খুঁজে পাওয়া যায়নি অথবা ব্যবহারকারীর জন্য কোনও অফার উপলভ্য নেই। PBL 8.0.0-এর মাধ্যমে, নতুন প্রোডাক্ট-লেভেল স্ট্যাটাস কোড সহ আনফেচ করা প্রোডাক্ট ফেরত দেওয়া হয়, যা আনফেচ করা প্রোডাক্ট সম্পর্কে তথ্য প্রদান করে। মনে রাখবেন যে ProductDetailsResponseListener.onProductDetailsResponse()-এর সিগনেচারে পরিবর্তন হয়েছে যার জন্য আপনার অ্যাপে পরিবর্তন করতে হবে। আরও তথ্যের জন্য, ফলাফল প্রসেস করুন দেখুন।

  • পরিষেবা অটোমেটিক আবার কানেক্ট করা।

    নতুন BillingClient.Builder.enableAutoServiceReconnection() builder প্যারামিটার ডেভেলপারদের অটোমেটিক পরিষেবা রিকানেক্ট করার সুবিধা চালু করতে দেয়, যা Play Billing পরিষেবার সাথে অটোমেটিক রিকানেক্ট করার সুবিধা ম্যানেজ করে এবং পরিষেবা ডিসকানেক্ট হয়ে গেলে startConnection() ম্যানুয়ালি কল করার প্রয়োজনীয়তা দূর করে কানেকশন ম্যানেজমেন্টকে সহজ করে তোলে। আরও তথ্যের জন্য, কানেকশন অটোমেটিক আবার চালু করা দেখুন।

  • launchBillingFlow() পদ্ধতির জন্য সাব-রেসপন্স কোড।

    launchBillingFlow() থেকে পাওয়া BillingResult-এ এখন একটি সাব-রেসপন্স কোড ফিল্ড থাকবে। ব্যর্থতার আরও সুনির্দিষ্ট কারণ জানানোর জন্য শুধুমাত্র কিছু ক্ষেত্রে এই ফিল্ডে তথ্য যোগ করা হবে। সাব-উত্তর ফিল্ডে নিম্নলিখিত মান থাকতে পারে:

    • PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS - ব্যবহারকারীর ফান্ড, তিনি যে আইটেমটি কিনতে চেষ্টা করছেন সেটির দামের থেকে কম হলে ফেরত দেওয়া হয়।
    • USER_INELIGIBLE - সাবস্ক্রিপশন অফারের জন্য কনফিগার করা যোগ্যতার প্রয়োজনীয়তা ব্যবহারকারী পূরণ না করলে রিটার্ন করা হয়।
    • NO_APPLICABLE_SUB_RESPONSE_CODE - ডিফল্ট ভ্যালু, অন্য কোনও সাব-রেসপন্স কোড প্রযোজ্য না হলে এটি রিটার্ন করা হয়।
  • queryPurchaseHistory() পদ্ধতি সরিয়ে দেওয়া হয়েছে।

    queryPurchaseHistory() পদ্ধতিটি আগে অননুমোদিত হিসেবে চিহ্নিত করা হয়েছিল, সেটি এখন সরিয়ে দেওয়া হয়েছে। এর পরিবর্তে কোন বিকল্প API ব্যবহার করতে হবে সেই সম্পর্কে বিস্তারিত জানতে কেনাকাটার ইতিহাস কোয়েরি করা দেখুন।

  • querySkuDetailsAsync() পদ্ধতি সরিয়ে দেওয়া হয়েছে।

    querySkuDetailsAsync() পদ্ধতিটি আগে অননুমোদিত হিসেবে চিহ্নিত করা হয়েছিল সেটি এখন সরিয়ে দেওয়া হয়েছে। এর পরিবর্তে আপনাকে queryProductDetailsAsync ব্যবহার করতে হবে।

  • BillingClient.Builder.enablePendingPurchases() পদ্ধতি সরিয়ে দেওয়া হয়েছে।

    enablePendingPurchases() মেথডটি কোনও প্যারামিটার ছাড়াই আগে অননুমোদিত হিসেবে চিহ্নিত করা হয়েছিল, সেটি এখন সরিয়ে দেওয়া হয়েছে। এর পরিবর্তে আপনাকে enablePendingPurchases(PendingPurchaseParams params) ব্যবহার করতে হবে। মনে রাখবেন যে বন্ধ হয়ে যাওয়া enablePendingPurchases() ফাংশনের দিক থেকে enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())-এর সমতুল্য।

  • skuType নেয় এমন ওভারলোড করা queryPurchasesAsync() পদ্ধতি সরিয়ে দেওয়া হয়েছে।

    queryPurchasesAsync(String skuType, PurchasesResponseListener listener) পদ্ধতিটি আগে অননুমোদিত হিসেবে চিহ্নিত করা হয়েছিল, সেটি এখন সরিয়ে দেওয়া হয়েছে। অথবা, queryPurchasesAsync(QueryPurchasesParams queryPurchasesParams, PurchasesResponseListener listener) ব্যবহার করুন।

Google Play Billing Library 7.1.1 রিলিজ (২০২৪-১০-০৩)

Google Play বিলিং লাইব্রেরির 7.1.1 ভার্সন এবং Kotlin এক্সটেনশন এখন উপলভ্য।

সমস্যার সমাধান

Google Play Billing Library 7.1.0 রিলিজ (২০২৪-০৯-১৯)

Google Play Billing Library-এর 7.1.0 ভার্সন এবং Kotlin এক্সটেনশন এখন উপলভ্য।

পরিবর্তনগুলির সারাংশ

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

Google Play Billing Library 7.0.0 রিলিজ (১৪-০৫-২০২৪)

Google Play বিলিং লাইব্রেরির 7.0.0 ভার্সন এবং Kotlin এক্সটেনশন এখন উপলভ্য।

পরিবর্তনগুলির সারাংশ

Google Play Billing Library 6.2.1 রিলিজ (১৬-০৪-২০২৪)

Google Play বিলিং লাইব্রেরির 6.2.1 ভার্সন এবং Kotlin এক্সটেনশন এখন উপলভ্য।

পরিবর্তনগুলির সারাংশ

Google Play Billing Library 6.2.0 রিলিজ (০৬-০৩-২০২৪)

Google Play বিলিং লাইব্রেরির 6.2.0 ভার্সন এবং Kotlin এক্সটেনশন এখন উপলভ্য।

পরিবর্তনগুলির সারাংশ

  • এক্সটার্নাল অফার কাজ করে এমন API যোগ করা হয়েছে
    • এক্সটার্নাল অফার প্রদান করার ক্ষমতা চালু করতে BillingClient.Builder.enableExternalOffer() যোগ করা হয়েছে।
    • এক্সটার্নাল অফার ফাংশনালিটি প্রদান করার উপলভ্যতা চেক করতে BillingClient.isExternalOfferAvailableAsync() যোগ করা হয়েছে।
    • ব্যবহারকারীদের অ্যাপের বাইরে নিয়ে যাওয়ার আগে তাদের তথ্য ডায়ালগ দেখানোর জন্য BillingClient.showExternalOfferInformationDialog() যোগ করা হয়েছে।
    • এক্সটার্নাল অফারের মাধ্যমে করা ট্রানজ্যাকশনের ব্যাপারে অভিযোগ জানানোর জন্য প্রয়োজনীয় পেলোড তৈরি করতে BillingClient.createExternalOfferReportingDetailsAsync() যোগ করা হয়েছে।

Google Play Billing Library 6.1.0 রিলিজ (২০২৩-১১-১৪)

Google Play বিলিং লাইব্রেরির 6.1.0 ভার্সন এবং Kotlin এক্সটেনশন এখন উপলভ্য।

পরিবর্তনগুলির সারাংশ

Google Play Billing Library 6.0.1 রিলিজ (২২-০৬-২০২৩)

Google Play বিলিং লাইব্রেরির 6.0.1 ভার্সন এবং Kotlin এক্সটেনশন এখন উপলভ্য।

পরিবর্তনগুলির সারাংশ

Android 14-এর সাথে মানানসই হতে Play Billing Library আপডেট করুন।

Google Play Billing Library 6.0 রিলিজ (১০-০৫-২০২৩)

Google Play বিলিং লাইব্রেরির 6.0.0 ভার্সন এবং Kotlin এক্সটেনশন এখন উপলভ্য।

পরিবর্তনগুলির সারাংশ

  • ProrationMode বিকল্পের পরিবর্তে নতুন ReplacementMode enum যোগ করা হয়েছে।

    মনে রাখবেন, ProrationMode এখনও পুরনো ভার্সনের সাথে মানানসই হওয়ার কারণে উপলভ্য আছে।

  • PENDING কেনাকাটার জন্য অর্ডার আইডি সরিয়ে দেওয়া হয়েছে।

    আগে, কেনাকাটা পেন্ডিং থাকলেও অর্ডার আইডি তৈরি করা হত। 6.0.0 ভার্সন থেকে শুরু করে, বাকি থাকা কেনাকাটার জন্য কোনও অর্ডার আইডি তৈরি করা হবে না এবং এইসব কেনাকাটার জন্য, কেনাকাটা PURCHASED স্টেটে সরানোর পরে অর্ডার আইডি পপুলেট করা হবে।

  • queryPurchases ও launchPriceConfirmationFlow পদ্ধতি সরিয়ে দেওয়া হয়েছে।

    queryPurchases এবং launchPriceConfirmationFlow পদ্ধতিগুলি যেগুলি আগে অননুমোদিত হিসেবে চিহ্নিত করা হয়েছে, সেগুলি এখন Play Billing Library 6.0.0 থেকে সরিয়ে দেওয়া হয়েছে। ডেভেলপারদের queryPurchases-এর পরিবর্তে queryPurchasesAsync ব্যবহার করা উচিত। launchPriceConfirmationFlow বিকল্পের জন্য, দামের পরিবর্তন দেখুন।

  • নতুন নেটওয়ার্ক সংক্রান্ত সমস্যার রেসপন্স কোড যোগ করা হয়েছে।

    PBL ভার্সন 6.0.0 থেকে শুরু করে একটি নতুন নেটওয়ার্ক এরর রেসপন্স কোড, NETWORK_ERROR, যোগ করা হয়েছে। নেটওয়ার্ক কানেকশন সংক্রান্ত সমস্যার কারণে কোনও সমস্যা হলে এই কোডটি রিটার্ন করা হয়। এইসব নেটওয়ার্ক কানেকশন সমস্যাকে আগে SERVICE_UNAVAILABLE হিসেবে রিপোর্ট করা হয়েছে।

  • SERVICE_UNAVAILABLE এবং SERVICE_TIMEOUT আপডেট করা হয়েছে।

    PBL ভার্সন 6.0.0 থেকে শুরু করে, প্রসেসিংয়ের সময় টাইম-আউট হওয়ার কারণে হওয়া সমস্যাগুলি বর্তমান SERVICE_TIMEOUT-এর পরিবর্তে SERVICE_UNAVAILABLE হিসেবে ফেরত দেওয়া হবে।

    PBL-এর আগের ভার্সনে এই আচরণে কোনও পরিবর্তন হয় না।

  • সরানো হয়েছে SERVICE_TIMEOUT।

    PBL ভার্সন 6.0.0 থেকে, SERVICE_TIMEOUT আর রিটার্ন করা হবে না। PBL-এর আগের ভার্সনগুলি এখনও এই কোডটি রিটার্ন করবে।

  • অতিরিক্ত লগিং যোগ করা হয়েছে।

    Play Billing Library 6 রিলিজে অতিরিক্ত লগিং অন্তর্ভুক্ত থাকে, যা API ব্যবহার (যেমন, সফল ও ব্যর্থ) এবং পরিষেবা কানেকশন সংক্রান্ত সমস্যার ব্যাপারে ইনসাইট প্রদান করে। Play Billing Library-র পারফর্ম্যান্স উন্নত করতে এবং সমস্যার ক্ষেত্রে আরও ভালো সহায়তা প্রদান করতে এই তথ্য ব্যবহার করা হবে।

Google Play Billing Library 5.2.1 রিলিজ (২২-০৬-২০২৩)

Google Play বিলিং লাইব্রেরির 5.2.1 ভার্সন এবং Kotlin এক্সটেনশন এখন উপলভ্য।

পরিবর্তনগুলির সারাংশ

Android 14-এর সাথে মানানসই হতে Play Billing Library আপডেট করুন।

Google Play Billing Library 5.2 রিলিজ (০৬-০৪-২০২৩)

Google Play বিলিং লাইব্রেরি ও Kotlin এক্সটেনশনের 5.2.0 ভার্সন এখন উপলভ্য।

পরিবর্তনগুলির সারাংশ

  • দক্ষিণ কোরিয়ার ব্যবহারকারীদের জন্য মোবাইল/ট্যাবলেটে বিকল্প বিলিং ফ্লো কাজ করার জন্য ক্লাস যোগ করা হয়েছে:
  • যে সাবস্ক্রিপশন থেকে ট্রানজ্যাকশন শুরু হয়েছে তার এক্সটার্নাল ট্রানজ্যাকশন আইডি উল্লেখ করার জন্য BillingFlowParams.SubscriptionUpdateParams.Builder.setOriginalExternalTransactionId() পদ্ধতি যোগ করা হয়েছে।
  • দক্ষিণ কোরিয়ার ব্যবহারকারীদের বিকল্প বিলিং বিকল্প বেছে নেওয়ার অনুমতি দেওয়ার জন্য BillingClient.Builder.enableAlternativeBilling() পদ্ধতি যোগ করা হয়েছে।

Google Play Billing Library 5.1 রিলিজ (৩১-১০-২০২২)

Google Play বিলিং লাইব্রেরির 5.1.0 ভার্সন এবং Kotlin এক্সটেনশন এখন উপলভ্য।

এই ভার্সনে নিম্নলিখিত পরিবর্তন করা হয়েছে।

পরিবর্তনগুলির সারাংশ

Google Play Billing Library 5.0 রিলিজ (১১-০৫-২০২২)

Google Play বিলিং লাইব্রেরির 5.0.0 ভার্সন এবং Kotlin এক্সটেনশন এখন উপলভ্য।

এই ভার্সনে নিম্নলিখিত পরিবর্তন করা হয়েছে।

পরিবর্তনগুলির সারাংশ

  • সাবস্ক্রিপশনের জন্য নতুন মডেল চালু করা হয়েছে, এর মধ্যে নতুন এন্টিটি অন্তর্ভুক্ত যা আপনাকে একটি সাবস্ক্রিপশন প্রোডাক্টের জন্য একাধিক অফার তৈরি করতে দেয়। আরও তথ্যের জন্য, মাইগ্রেশন গাইড দেখুন।
  • BillingClient.querySkuDetailsAsync()-এর পরিবর্তে BillingClient.queryProductDetailsAsync() যোগ করা হয়েছে।
  • ইউরোপীয় ইউনিয়নের পছন্দমতো দাম সংক্রান্ত ডিসক্লোজার প্রয়োজনীয়তার জন্য setIsOfferPersonalized() পদ্ধতি যোগ করা হয়েছে। এই পদ্ধতি কীভাবে ব্যবহার করতে হয় সেই সম্পর্কে আরও জানতে, পছন্দমতো বেছে নেওয়া দাম উল্লেখ করুন।
  • queryPurchases() সরিয়ে দেওয়া হয়েছে, এটি আগে থেকেই বাতিল করা হয়েছিল এবং Google Play Billing Library 4.0.0-এ queryPurchasesAsync যোগ করে এটি প্রতিস্থাপন করা হয়েছে।
  • launchPriceChangeFlow বন্ধ করা হয়েছে এবং ভবিষ্যতে রিলিজের সময় এটি সরিয়ে দেওয়া হবে। বিকল্প সম্পর্কে আরও জানতে, মূল্য পরিবর্তন কনফার্মেশন ফ্লো লঞ্চ করুন দেখুন।
  • কেনাকাটার ফ্লো ইনস্ট্যানশিয়েট করার সময় আগে ব্যবহার করা setVrPurchaseFlow(), সরিয়ে দেওয়া হয়েছে। আগের ভার্সনে, এই পদ্ধতি ব্যবহারকারীকে তার Android-পরিচালিত ডিভাইসে কেনাকাটা সম্পূর্ণ করার জন্য রিডাইরেক্ট করত। আপনি এই পদ্ধতি সরিয়ে দিলে, ব্যবহারকারীরা স্ট্যান্ডার্ড কেনাকাটার ফ্লোয়ের মাধ্যমে কেনাকাটা সম্পূর্ণ করবেন।

Google Play Billing Library 4.1 রিলিজ (২৩-০২-২০২২)

Google Play বিলিং লাইব্রেরির 4.1.0 ভার্সন এবং Kotlin এক্সটেনশন এখন উপলভ্য।

এই ভার্সনে নিম্নলিখিত পরিবর্তন করা হয়েছে।

পরিবর্তনগুলির সারাংশ

  • সাবস্ক্রিপশন পেমেন্ট বাতিল হয়ে যাওয়া সংক্রান্ত সমস্যা সামলানোর ব্যাপারে সাহায্য করতে BillingClient.showInAppMessages() যোগ করা হয়েছে। সাবস্ক্রিপশনের পেমেন্ট প্রত্যাখ্যান সংক্রান্ত সমস্যা সমাধানের জন্য ইন-অ্যাপ মেসেজিং কীভাবে ব্যবহার করতে হয় সেই সম্পর্কে আরও জানতে, পেমেন্ট প্রত্যাখ্যান সংক্রান্ত সমস্যা সমাধান দেখুন।

Google Play Billing Library 4.0 রিলিজ (১৮-০৫-২০২১)

Google Play বিলিং লাইব্রেরির 4.0.0 ভার্সন এবং Kotlin এক্সটেনশন এখন উপলভ্য।

পরিবর্তনগুলির সারাংশ

  • ভবিষ্যতের রিলিজ থেকে সরিয়ে দেওয়া হবে এমন BillingClient.queryPurchases() পরিবর্তে BillingClient.queryPurchasesAsync() যোগ করা হয়েছে।

  • নতুন সাবস্ক্রিপশন রিপ্লেসমেন্ট মোড যোগ করা হয়েছে IMMEDIATE_AND_CHARGE_FULL_PRICE।

  • Play বিলিং লাইব্রেরির কানেকশন স্ট্যাটাস রিট্রিভ করার জন্য BillingClient.getConnectionState() মেথড যোগ করা হয়েছে।

  • কোন থ্রেড থেকে কোনও মেথড কল করা যাবে এবং কোন থ্রেডে ফলাফল পোস্ট করা হবে তা বোঝাতে Javadoc ও প্রয়োগ আপডেট করা হয়েছে।

  • সাবস্ক্রিপশন আপডেট শুরু করার নতুন উপায় হিসেবে BillingFlowParams.Builder.setSubscriptionUpdateParams() যোগ করা হয়েছে। এটি সরিয়ে দেওয়া হয়েছে এমন BillingFlowParams#getReplaceSkusProrationMode, BillingFlowParams#getOldSkuPurchaseToken, BillingFlowParams#getOldSku, BillingFlowParams.Builder#setReplaceSkusProrationMode, BillingFlowParams.Builder#setOldSku-এর পরিবর্তে ব্যবহার করা হয়েছে।

  • Purchase.getQuantity() এবং PurchaseHistoryRecord.getQuantity()-কে যোগ করা হয়েছে।

  • Purchase#getSkus() এবং PurchaseHistoryRecord#getSkus()-কে যোগ করা হয়েছে। এগুলি Purchase#getSku ও PurchaseHistoryRecord#getSku-এর পরিবর্তে ব্যবহার করা হয়, যেগুলি সরিয়ে দেওয়া হয়েছে।

  • BillingFlowParams#getSku, BillingFlowParams#getSkuDetails এবং BillingFlowParams#getSkuType সরিয়ে দেওয়া হয়েছে।

Google Play Billing Library 3.0.3 রিলিজ (১২-০৩-২০২১)

Google Play Billing Library, Kotlin এক্সটেনশন এবং Unity প্লাগ-ইনের ভার্সন 3.0.3 এখন উপলভ্য।

Java ও Kotlin সংক্রান্ত সমস্যার সমাধান

  • endConnection() কল করা হলে মেমরি লিক সংক্রান্ত সমস্যার সমাধান করা হয়।
  • যেসব অ্যাপ সিঙ্গেল টাস্ক লঞ্চ মোড ব্যবহার করে, সেগুলি Google Play Billing Library ব্যবহার করলে হওয়া সমস্যার সমাধান করা। Android লঞ্চার থেকে কোনও অ্যাপ আবার চালু করা হলে এবং সাসপেন্ড করার আগে বিলিং ডায়ালগ দেখা গেলে onPurchasesUpdated() কলব্যাক ট্রিগার করা হবে।

Unity-তে সমস্যার সমাধান

  • মেমরি লিক সংক্রান্ত সমস্যা সমাধান করতে এবং Android লঞ্চার থেকে কোনও অ্যাপ আবার চালু করার পরে কেনাকাটা করতে বাধা দেওয়া সমস্যা সমাধান করতে Java ভার্সন 3.0.3-এ আপডেট করুন এবং সাসপেন্ড করার আগে বিলিং ডায়ালগ দেখা যাচ্ছিল।

Google Play Billing Library 3.0.2 রিলিজ (২৪-১১-২০২০)

Google Play বিলিং লাইব্রেরির ভার্সন 3.0.2 এবং Kotlin এক্সটেনশন এখন উপলভ্য।

সমস্যার সমাধান

  • Kotlin এক্সটেনশনে একটি সমস্যার সমাধান করা হয়েছে যেখানে কোরাউটিন সমস্যা "Already resumed" সহ কাজ করে না।
  • kotlinx.coroutines লাইব্রেরি ভার্সন 1.4+-এর সাথে Kotlin এক্সটেনশন ব্যবহার করা হলে, সমাধান না হওয়া রেফারেন্স সংক্রান্ত সমস্যা সমাধান করা হয়েছে।

Google Play Billing Library 3.0.1 রিলিজ (৩০-০৯-২০২০)

Google Play বিলিং লাইব্রেরির 3.0.1 ভার্সন এবং Kotlin এক্সটেনশন এখন উপলভ্য।

সমস্যার সমাধান

  • বিলিং ফ্লো চলাকালীন অ্যাপ বন্ধ করে আবার চালু করলে, PurchasesUpdatedListener কেনাকাটার ফলাফল সহ কল নাও করা হতে পারে এমন একটি সমস্যার সমাধান করা হয়েছে।

Google Play Billing Library 3.0 রিলিজ (০৮-০৬-২০২০)

Google Play Billing লাইব্রেরি, Kotlin এক্সটেনশন এবং Unity প্লাগ-ইনের ভার্সন 3.0.0 এখন উপলভ্য।

পরিবর্তনগুলির সারাংশ

  • পুরস্কার প্রদানকারী SKU সংক্রান্ত সহায়তা সরিয়ে দেওয়া হয়েছে।
  • ChildDirected এবং UnderAgeOfConsent প্যারামিটার সরিয়ে দেওয়া হয়েছে।
  • ডেভেলপার পেলোড সংক্রান্ত পুরনো হয়ে যাওয়া পদ্ধতি সরিয়ে দেওয়া হয়েছে।
  • পুরনো হয়ে যাওয়া BillingFlowParams.setAccountId() এবং BillingFlowParams.setDeveloperId() পদ্ধতি সরিয়ে দেওয়া হয়েছে।
  • পুরনো হয়ে যাওয়া BillingFlowParams.setOldSkus(String oldSku) এবং BillingFlowParams.addOldSku(String oldSku) পদ্ধতি সরিয়ে দেওয়া হয়েছে।
  • নাল হওয়া যায় কিনা সেই সংক্রান্ত অ্যানোটেশন যোগ করা হয়েছে।

সমস্যার সমাধান

  • SkuDetails.getIntroductoryPriceCycles() এখন String-এর পরিবর্তে int রিটার্ন করে।
  • বিলিং ফ্লোতে অতিরিক্ত প্যারামিটার আছে বলে ধরে নেওয়া হত, যদিও কোনও অতিরিক্ত প্যারামিটার সেট করা হয়নি। এই সমস্যার সমাধান করা হয়েছে।

Google Play Billing Library 2.2.1 রিলিজ (২০-০৫-২০২০)

Google Play বিলিং লাইব্রেরির 2.2.1 ভার্সন এখন উপলভ্য।

সমস্যার সমাধান

  • Kotlin এক্সটেনশন যে Java Play বিলিং লাইব্রেরির উপর নির্ভর করে তার ডিফল্ট ভার্সন আপডেট করা হয়েছে।

Google Play Billing Library 2.2.0 রিলিজ ও Unity সাপোর্ট (২৩-০৩-২০২০)

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

Unity-র জন্য Google Play Billing Billing Library 2

Google Play Billing Library 2-এর বর্তমান Java ও Kotlin ভার্সন ছাড়াও, আমরা Unity-র সাথে ব্যবহার করার জন্য লাইব্রেরির একটি ভার্সন প্রকাশ করেছি। যেসব গেম ডেভেলপার Unity-এর ইন-অ্যাপ কেনাকাটা API ব্যবহার করেন, তারা এখন Google Play Billing Library 2-এর সব ফিচার ব্যবহার করতে এবং Google Play Billing Library-এর ভবিষ্যতের ভার্সনে পরবর্তী আপগ্রেড আরও সহজে করতে, আপগ্রেড করতে পারবেন।

আরও জানতে, Unity-র সাথে Google Play Billing ব্যবহার করুন দেখুন।

পরিবর্তনগুলির সারাংশ

  • Java Google Play Billing Library
    • AcknowledgePurchaseParams, বন্ধ করা হয়েছে setDeveloperPayload() এবং getDeveloperPayload() পদ্ধতি।
    • ConsumeParams, বন্ধ করা হয়েছে setDeveloperPayload() এবং getDeveloperPayload() পদ্ধতি।
    • In BillingFlowParams, নাম পরিবর্তন করে setAccountId() setObfuscatedAccountId() করা হয়েছে এবং ৬৪টি অক্ষরের দৈর্ঘ্যের সীমাবদ্ধতা ও এই ফিল্ডে ব্যক্তিগতভাবে শনাক্তকরণযোগ্য তথ্য (PII) ব্যবহার করা যাবে না এমন সীমাবদ্ধতা ডকুমেন্ট করা হয়েছে। setAccountId() অননুমোদিত হিসেবে চিহ্নিত করা হয়েছে এবং লাইব্রেরির ভবিষ্যতের ভার্সন থেকে সরিয়ে দেওয়া হবে।
    • BillingFlowParams-এ, setObfuscatedProfileId() যোগ করা হয়েছে যা setObfuscatedAccountId()-এর মতোই কাজ করে। আরও তথ্যের জন্য, ডেভেলপার পেলোড আপডেট ও বিকল্প দেখুন।
    • Purchase-এ, getAccountIdentifiers() পদ্ধতি যোগ করা হয়েছে। এর মাধ্যমে BillingFlowParams-এ সেট করা অস্পষ্ট অ্যাকাউন্ট শনাক্তকারীকে ফেরত পাঠানো যায়।
    • In BillingClient, the loadRewardedSku() পদ্ধতিকে পুরস্কার প্রদানকারী SKU অবলোপনের অংশ হিসেবে অবলোপন করা হয়েছে বলে চিহ্নিত করা হয়েছে।

Google Play Billing Library 2.1.0 রিলিজ ও Kotlin Extension 2.1.0 রিলিজ (১০-১২-২০১৯)

Google Play Billing লাইব্রেরির 2.1.0 ভার্সন এবং নতুন Kotlin এক্সটেনশন এখন উপলভ্য। Play Billing Library Kotlin এক্সটেনশন, Kotlin-এর জন্য ইডিওম্যাটিক API বিকল্প প্রদান করে, এতে আরও ভাল নাল-সেফটি ও করুটিন থাকে। কোডের উদাহরণের জন্য, Google Play Billing লাইব্রেরি ব্যবহার করুন দেখুন।

এই ভার্সনে নিম্নলিখিত পরিবর্তন করা হয়েছে।

পরিবর্তনগুলির সারাংশ

  • এতে BillingFlowParams, পুরনো setOldSku(String oldSku) সরিয়ে setOldSku(String oldSku, String purchaseToken) যোগ করা হয়েছে, যাতে ডিভাইসে একাধিক অ্যাকাউন্টের একই SKU থাকলে তা আলাদা করে বোঝা যায়।

Google Play Billing Library 2.0.3 রিলিজ (০৫-০৮-২০১৯)

Google Play বিলিং লাইব্রেরির 2.0.3 ভার্সন এখন উপলভ্য।

সমস্যার সমাধান

  • একটি সমস্যার সমাধান করা হয়েছে যেখানে querySkuDetailsAsync() মাঝে মাঝে সফল ফলাফল না দেখিয়ে কোড DEVELOPER_ERROR সহ ব্যর্থ হত।

Google Play Billing Library 2.0.2 রিলিজ (০৮-০৭-২০১৯)

Google Play Billing লাইব্রেরির 2.0.2 ভার্সন এখন উপলভ্য। এই রিলিজে রেফারেন্স ডকুমেন্টেশনের আপডেট আছে এবং লাইব্রেরি ফাংশনালিটিতে কোনও পরিবর্তন করা হয়নি।

Google Play Billing Library 2.0.1 রিলিজ (০৬-০৬-২০১৯)

Google Play Billing লাইব্রেরির 2.0.1 ভার্সন এখন উপলভ্য। এই ভার্সনে নিম্নলিখিত পরিবর্তন করা হয়েছে।

সমস্যার সমাধান

  • কিছু ক্ষেত্রে, ডিবাগ মেসেজ null হিসেবে রিটার্ন করা হচ্ছিল, সেই সমস্যার সমাধান করা হয়েছে।
  • সম্ভাব্য মেমরি লিক সংক্রান্ত সমস্যার সমাধান করা হয়েছে।

Google Play Billing Library 2.0 রিলিজ (০৭-০৫-২০১৯)

Google Play Billing লাইব্রেরির 2.0 ভার্সন এখন উপলভ্য। এই ভার্সনে নিম্নলিখিত পরিবর্তন করা হয়েছে।

কেনাকাটা করার তিন দিনের মধ্যে স্বীকৃতি জানাতে হবে

Google Play আপনার অ্যাপের মধ্যে (অ্যাপ-মধ্যস্থ) বা অ্যাপের বাইরে (অ্যাপ-বাইরে) থেকে প্রোডাক্ট কেনার সুবিধা দেয়। ব্যবহারকারী যেখানেই আপনার প্রোডাক্ট কিনুন না কেন, Google Play যাতে সর্বত্র কেনাকাটার অভিজ্ঞতা একই রকম রাখতে পারে, তার জন্য ব্যবহারকারীকে এনটাইটেলমেন্ট দেওয়ার পরে Google Play বিলিং লাইব্রেরির মাধ্যমে পাওয়া সব কেনাকাটা যত তাড়াতাড়ি সম্ভব আপনাকে স্বীকার করতে হবে। আপনি তিন দিনের মধ্যে কোনও কেনাকাটা স্বীকার না করলে, ব্যবহারকারী অটোমেটিক রিফান্ড পেয়ে যান এবং Google Play কেনাকাটা বাতিল করে দেয়। পেন্ডিং ট্রানজ্যাকশনের (ভার্সন ২.০-তে নতুন) ক্ষেত্রে, তিন দিনের উইন্ডো শুরু হয় যখন কেনাকাটা PURCHASED স্টেটে চলে যায় এবং কেনাকাটা PENDING স্টেটে থাকাকালীন এটি প্রযোজ্য হয় না।

সাবস্ক্রিপশনের ক্ষেত্রে, নতুন purchase token সহ যেকোনও কেনাকাটা আপনাকে স্বীকার করতে হবে। এর অর্থ হল, সব প্রাথমিক কেনাকাটা, প্ল্যান পরিবর্তন এবং আবার সাইন-আপ করার জন্য স্বীকৃতি জানাতে হবে, তবে পরবর্তী রিনিউয়ালের জন্য আপনাকে স্বীকৃতি জানাতে হবে না। কেনাকাটার জন্য স্বীকৃতি প্রয়োজন কিনা তা নির্ধারণ করতে, আপনি কেনাকাটায় স্বীকৃতি ফিল্ড চেক করতে পারেন।

Purchase অবজেক্টে এখন একটি isAcknowledged() মেথড আছে যা কোনও কেনাকাটা স্বীকার করা হয়েছে কিনা তা নির্দেশ করে। এছাড়াও, Google Play Developer API-তে Purchases.products ও Purchases.subscriptions, দু'টির জন্যই স্বীকৃতি সংক্রান্ত বুলিয়ান ভ্যালু অন্তর্ভুক্ত থাকে। কোনও কেনাকাটা স্বীকার করার আগে, কেনাকাটাটি আগে থেকেই স্বীকার করা হয়েছে কিনা তা নির্ধারণ করতে এইসব পদ্ধতি ব্যবহার করতে ভুলবেন না।

আপনি নিম্নলিখিত পদ্ধতির মধ্যে একটি ব্যবহার করে কেনাকাটা কনফার্ম করতে পারেন:

  • কনজিউমেবল প্রোডাক্টের জন্য, ক্লায়েন্ট API-তে পাওয়া consumeAsync() ব্যবহার করুন।
  • যেসব প্রোডাক্ট ব্যবহার করা হয় না, সেগুলির জন্য acknowledgePurchase() ব্যবহার করুন, এটি ক্লায়েন্ট API-তে পাওয়া যায়।
  • এছাড়াও, Server API-তে একটি নতুন acknowledge() পদ্ধতি উপলভ্য।

BillingFlowParams.setSku() সরিয়ে দেওয়া হয়েছে

এই রিলিজ থেকে আগে বন্ধ হয়ে যাওয়া BillingFlowParams#setSku() পদ্ধতি সরিয়ে দেওয়া হয়েছে। কেনাকাটার ফ্লোতে প্রোডাক্ট রেন্ডার করার আগে, আপনাকে অবশ্যই BillingClient.querySkuDetailsAsync()-কে কল করতে হবে, এর ফলে পাওয়া SkuDetails অবজেক্টকে BillingFlowParams.Builder.setSkuDetails()-এ পাস করতে হবে।

কোডের উদাহরণের জন্য, Google Play Billing লাইব্রেরি ব্যবহার করুন দেখুন।

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

Google Play বিলিং লাইব্রেরির ভার্সন 2.0-তে ডেভেলপার পে-লোড—কেনাকাটার সাথে অ্যাটাচ করা যায় এমন অনির্দিষ্ট স্ট্রিং—এর জন্য সহায়তা যোগ করা হয়েছে। আপনি কোনও কেনাকাটার সাথে ডেভেলপার পেলোড প্যারামিটার অ্যাটাচ করতে পারবেন, তবে শুধুমাত্র তখনই যখন কেনাকাটা কনফার্ম করা বা ব্যবহার করা হয়। এটি AIDL-এর ডেভেলপার পেলোড থেকে আলাদা, যেখানে কেনাকাটার ফ্লো লঞ্চ করার সময় পেলোড নির্দিষ্ট করা যেতে পারে। কারণ, এখন আপনার অ্যাপের বাইরে থেকে কেনাকাটা শুরু করা যেতে পারে, এই পরিবর্তন নিশ্চিত করে যে কেনাকাটায় পেলোড যোগ করার সুযোগ আপনি সবসময় পাবেন।

নতুন লাইব্রেরিতে পেলোড অ্যাক্সেস করতে, Purchase অবজেক্টে এখন একটি getDeveloperPayload() মেথড অন্তর্ভুক্ত থাকে।

ধারাবাহিক অফার

আপনি ছাড়যুক্ত SKU অফার করলে, Google Play এখন SKU-এর আসল দাম রিটার্ন করে যাতে আপনি ব্যবহারকারীদের দেখাতে পারেন যে তারা ছাড় পাচ্ছেন।

SkuDetails-এ আসল SKU মূল্য রিট্রিভ করার দুটি নতুন পদ্ধতি আছে:

  • getOriginalPriceAmountMicros()
    • ছাড় দেওয়ার আগে SKU-এর ফর্ম্যাট না করা আসল দাম রিটার্ন করে।
  • getOriginalPrice()
    • অতিরিক্ত কারেন্সি ফর্ম্যাটিং সহ আসল দাম রিটার্ন করে।

বাকি থাকা ট্রানজ্যাকশন

Google Play Billing লাইব্রেরির ভার্সন 2.0-এর সাথে, এনটাইটেলমেন্ট দেওয়ার আগে অতিরিক্ত অ্যাকশন নেওয়ার প্রয়োজন হয় এমন কেনাকাটা আপনাকে অবশ্যই কাজ করাতে হবে। যেমন, কোনও ব্যবহারকারী হয়ত কোনও ফিজিক্যাল স্টোরে গিয়ে ক্যাশ পেমেন্ট করে আপনার অ্যাপ-মধ্যস্থ প্রোডাক্ট কিনতে পারেন। এর অর্থ হল, ট্রানজ্যাকশনটি আপনার অ্যাপের বাইরে সম্পূর্ণ হয়েছে। এই পরিস্থিতিতে, ব্যবহারকারী ট্রানজ্যাকশন সম্পূর্ণ করার পরেই আপনাকে এনটাইটেলমেন্ট দিতে হবে।

আপনার অ্যাপ ইনিশিয়ালাইজ করার অংশ হিসেবে enablePendingPurchases() কল করে পেন্ডিং কেনাকাটা চালু করুন।

কেনাকাটার স্ট্যাটাস PURCHASED বা PENDING কিনা তা নির্ধারণ করতে Purchase.getPurchaseState() ব্যবহার করুন। মনে রাখবেন যে স্ট্যাটাস PURCHASED হলে তবেই আপনাকে এনটাইটেলমেন্ট দিতে হবে। আপনাকে নিম্নলিখিত কাজগুলি করে Purchase-এর স্ট্যাটাস আপডেট চেক করতে হবে:

  1. আপনার অ্যাপ শুরু করার সময়, ব্যবহারকারীর সাথে যুক্ত থাকা ব্যবহার করা হয়নি এমন প্রোডাক্টের তালিকা পেতে BillingClient.queryPurchases() কল করুন।
  2. ফেরত আসা প্রতিটি Purchase অবজেক্টে Purchase.getPurchaseState() কল করুন।
  3. Purchase অবজেক্টে হওয়া পরিবর্তন সম্পর্কে উত্তর দিতে onPurchasesUpdated() মেথড প্রয়োগ করুন।

এছাড়াও, Google Play Developer API-তে PENDING-এর জন্য Purchases.products একটি স্টেট অন্তর্ভুক্ত। সাবস্ক্রিপশনের ক্ষেত্রে বাকি থাকা ট্রানজ্যাকশন কাজ করে না।

এছাড়াও, এই রিলিজের মাধ্যমে নতুন ধরনের রিয়েল-টাইম ডেভেলপার বিজ্ঞপ্তি চালু করা হয়েছে, OneTimeProductNotification। এই বিজ্ঞপ্তি সংক্রান্ত ধরনের মধ্যে একটি মেসেজ থাকে যার ভ্যালু হয় ONE_TIME_PRODUCT_PURCHASED অথবা ONE_TIME_PRODUCT_CANCELED হয়। এই ধরনের বিজ্ঞপ্তি শুধুমাত্র নগদ অর্থের মতো বিলম্বিত পেমেন্ট পদ্ধতির সাথে যুক্ত কেনাকাটার জন্য পাঠানো হয়।

পেন্ডিং থাকা কেনাকাটা স্বীকার করার সময়, নিশ্চিত করুন যে আপনি শুধুমাত্র তখনই স্বীকার করছেন যখন কেনাকাটার স্ট্যাটাস PURCHASED হয়, PENDING নয়।

API পরিবর্তন

Google Play বিলিং লাইব্রেরির 2.0 ভার্সনে নতুন ফিচার কাজ করানোর জন্য এবং আগে থেকে থাকা কার্যকারিতা আরও স্পষ্ট করার জন্য একাধিক API পরিবর্তন করা হয়েছে।

consumeAsync

consumeAsync() এখন purchaseToken-এর পরিবর্তে ConsumeParams অবজেক্ট নেয়। ConsumeParams-এ purchaseToken-এর পাশাপাশি ঐচ্ছিক ডেভেলপার পেলোডও থাকে।

এই রিলিজে consumeAsync()-এর আগের ভার্সন সরিয়ে দেওয়া হয়েছে।

queryPurchaseHistoryAsync

বিভ্রান্তি কমাতে, queryPurchaseHistoryAsync() এখন Purchase অবজেক্টের পরিবর্তে একটি PurchaseHistoryRecord অবজেক্ট রিটার্ন করে। PurchaseHistoryRecord অবজেক্টটি Purchase অবজেক্টের মতোই, তবে এটি শুধুমাত্র queryPurchaseHistoryAsync()-এর রিটার্ন করা ভ্যালু দেখায় এবং এতে autoRenewing, orderId ও packageName ফিল্ড থাকে না। মনে রাখবেন যে, ফিরে আসা ডেটাতে কোনও পরিবর্তন করা হয়নি—queryPurchaseHistoryAsync() আগে যেমন ডেটা ছিল, এখনও একই ডেটা রিটার্ন করে।

BillingResult রিটার্ন ভ্যালু

যেসব API আগে BillingResponse পূর্ণসংখ্যা ভ্যালু রিটার্ন করত, সেগুলি এখন BillingResult অবজেক্ট রিটার্ন করে। BillingResult-এ BillingResponse ইন্টিজার এবং ডিবাগ স্ট্রিং আছে যা আপনি সমস্যা নির্ণয় করার জন্য ব্যবহার করতে পারেন। ডিবাগ স্ট্রিং en-US লোকাল ব্যবহার করে এবং এটি ব্যবহারকারীদের দেখানোর জন্য নয়।

সমস্যার সমাধান

Google Play Billing Library 1.2.2 রিলিজ (০৭-০৩-২০১৯)

Google Play বিলিং লাইব্রেরির 1.2.2 ভার্সন এখন উপলভ্য। এই ভার্সনে নিম্নলিখিত পরিবর্তন করা হয়েছে।

সমস্যার সমাধান

  • v1.2.1-এ থ্রেডিং সংক্রান্ত যে সমস্যা হয়েছিল সেটির সমাধান করা হয়েছে। ব্যাকগ্রাউন্ড কল আর প্রধান থ্রেড ব্লক করে না।

অন্যান্য পরিবর্তন

  • যদিও মূল থ্রেড ব্যবহার করার পরামর্শ এখনও দেওয়া হয়, তবে আপনি এখন ব্যাকগ্রাউন্ড থ্রেড থেকে Google Play Billing লাইব্রেরি ইনস্ট্যানশিয়েট করতে পারবেন।
  • ইনস্ট্যানসিয়েশন সম্পূর্ণভাবে ব্যাকগ্রাউন্ড থ্রেডে মাইগ্রেট করা হয়েছে যাতে ANR হওয়ার সম্ভাবনা কমে যায়।

Play Billing Library 1.2.1 রিলিজ (২০১৯-০৩-০৪)

Google Play বিলিং লাইব্রেরির 1.2.1 ভার্সন এখন উপলভ্য। এই ভার্সনে নিম্নলিখিত পরিবর্তন করা হয়েছে।

প্রধান পরিবর্তন

অন্যান্য পরিবর্তন

  • পরীক্ষা সহজ করতে PurchasesResult ও SkuDetailsResult-এর জন্য পাবলিক কনস্ট্রাক্টর যোগ করা হয়েছে।
  • SkuDetails অবজেক্ট একটি নতুন পদ্ধতি, getOriginalJson() ব্যবহার করতে পারে।
  • সব AIDL পরিষেবা কল এখন ব্যাকগ্রাউন্ড থ্রেড দ্বারা ম্যানেজ করা হয়।

সমস্যার সমাধান

  • সর্বজনীন API-তে আর নাল কলব্যাক লিসনার পাস করা হয় না।

Google Play Billing Library 1.2 রিলিজ (১৮-১০-২০১৮)

Google Play বিলিং লাইব্রেরির 1.2 ভার্সন এখন উপলভ্য। এই ভার্সনে নিম্নলিখিত পরিবর্তন করা হয়েছে।

পরিবর্তনগুলির সারাংশ

  • Google Play Billing লাইব্রেরি এখন Android Software Development Kit লাইসেন্স চুক্তি-এর অধীনে লাইসেন্স করা হয়েছে।
  • launchPriceChangeConfirmationFlow API যোগ করা হয়েছে, যা ব্যবহারকারীদের সাবস্ক্রিপশনের মূল্যে মুলতুবি থাকা পরিবর্তন পর্যালোচনা করার জন্য প্রম্পট করে।
  • ব্যবহারকারীর সাবস্ক্রিপশন আপগ্রেড বা ডাউনগ্রেড করার সময় নতুন প্রোরেশন মোড, DEFERRED-এর জন্য সহায়তা যোগ করা হয়েছে।
  • BillingFlowParams ক্লাসে, setSku()-এর পরিবর্তে setSkuDetails() ব্যবহার করা হয়েছে।
  • ছোটখাটো সমস্যার সমাধান ও কোড অপ্টিমাইজেশন।

মূল্যে পরিবর্তনের কনফার্মেশন

আপনি এখন Google Play Console-এ সাবস্ক্রিপশনের দাম পরিবর্তন করতে পারবেন এবং ব্যবহারকারীরা আপনার অ্যাপে প্রবেশ করলে নতুন দাম পর্যালোচনা ও গ্রহণ করার জন্য তাদের প্রম্পট করতে পারবেন।

এই API ব্যবহার করতে, সাবস্ক্রিপশন প্রোডাক্টের skuDetails ব্যবহার করে একটি PriceChangeFlowParams অবজেক্ট তৈরি করুন এবং তারপরে launchPriceChangeConfirmationFlow() কল করুন। নিচের কোড স্নিপেটে দেখানো হয়েছে সেইভাবে PriceChangeConfirmationListener প্রয়োগ করুন যাতে দাম পরিবর্তন কনফার্মেশন ফ্লো সম্পূর্ণ হলে ফলাফল হ্যান্ডেল করা যায়:

Kotlin

val priceChangeFlowParams = PriceChangeFlowParams.newBuilder()
    .setSkuDetails(skuDetailsOfThePriceChangedSubscription)
    .build()

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        object : PriceChangeConfirmationListener() {
            override fun onPriceChangeConfirmationResult(responseCode: Int) {
                // Handle the result.
            }
        })

জাভা

PriceChangeFlowParams priceChangeFlowParams =
        PriceChangeFlowParams.newBuilder()
    .setSkuDetails(skuDetailsOfThePriceChangedSubscription)
    .build();

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        new PriceChangeConfirmationListener() {
            @Override
            public void onPriceChangeConfirmationResult(int responseCode) {
                // Handle the result.
            }
        });

দাম পরিবর্তনের কনফার্মেশন ফ্লোতে নতুন দাম সংক্রান্ত তথ্য সহ একটি ডায়ালগ দেখানো হয় এবং ব্যবহারকারীকে নতুন দাম মেনে নিতে বলা হয়। এই ফ্লো BillingClient.BillingResponse ধরনের একটি রেসপন্স কোড রিটার্ন করে।

নতুন প্রোরেশন মোড

কোনও ব্যবহারকারীর সাবস্ক্রিপশন আপগ্রেড বা ডাউনগ্রেড করার সময়, আপনি নতুন প্রোরেশন মোড, DEFERRED ব্যবহার করতে পারবেন। পরবর্তীকালে রিনিউ করার সময় এই মোড ব্যবহারকারীর সাবস্ক্রিপশন আপডেট করে। এই প্রোরেশন মোড কীভাবে সেট করবেন সেই সম্পর্কে আরও জানতে, প্রোরেশন মোড সেট করুন দেখুন।

SKU বিবরণ সেট করার নতুন পদ্ধতি

BillingFlowParams ক্লাসে, setSku() পদ্ধতি অবচিত করা হয়েছে। Google Play বিলিং ফ্লো অপ্টিমাইজ করার জন্য এই পরিবর্তন করা হয়েছে।

আপনার ইন-অ্যাপ বিলিং ক্লায়েন্টে BillingFlowParams-এর নতুন ইনস্ট্যান্স তৈরি করার সময়, আমরা সাজেস্ট করি যে আপনি এর পরিবর্তে সরাসরি JSON অবজেক্টের সাথে কাজ করুন setSkuDetails(), যেমনটি নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে:

BillingFlowParams Builder ক্লাসে, setSku() পদ্ধতিটি অবচিত করা হয়েছে। পরিবর্তে, নিম্নলিখিত কোড স্নিপেটে দেখানো setSkuDetails() পদ্ধতি ব্যবহার করুন। setSkuDetails() অবজেক্টে পাস করা অবজেক্টটি querySkuDetailsAsync() মেথড থেকে আসে।

Kotlin

private lateinit var mBillingClient: BillingClient
private val mSkuDetailsMap = HashMap<String, SkuDetails>()

private fun querySkuDetails() {
    val skuDetailsParamsBuilder = SkuDetailsParams.newBuilder()
    mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build()
    ) { responseCode, skuDetailsList ->
        if (responseCode == 0) {
            for (skuDetails in skuDetailsList) {
                mSkuDetailsMap[skuDetails.sku] = skuDetails
            }
        }
    }
}

private fun startPurchase(skuId: String) {
    val billingFlowParams = BillingFlowParams.newBuilder()
    .setSkuDetails(mSkuDetailsMap[skuId])
    .build()
}

জাভা

private BillingClient mBillingClient;
private Map<String, SkuDetails> mSkuDetailsMap = new HashMap<>();

private void querySkuDetails() {
    SkuDetailsParams.Builder skuDetailsParamsBuilder
            = SkuDetailsParams.newBuilder();
    mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build(),
            new SkuDetailsResponseListener() {
                @Override
                public void onSkuDetailsResponse(int responseCode,
                        List<SkuDetails> skuDetailsList) {
                    if (responseCode == 0) {
                        for (SkuDetails skuDetails : skuDetailsList) {
                            mSkuDetailsMap.put(skuDetails.getSku(), skuDetails);
                        }
                    }
                }
            });
}

private void startPurchase(String skuId) {
    BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
            .setSkuDetails(mSkuDetailsMap.get(skuId))
            .build();
}

Play Billing Library 1.1 রিলিজ (০৭-০৫-২০১৮)

Google Play Billing লাইব্রেরির 1.1 ভার্সন এখন উপলভ্য। এই ভার্সনে নিম্নলিখিত পরিবর্তন করা হয়েছে।

পরিবর্তনগুলির সারাংশ

  • আগে থেকে থাকা সাবস্ক্রিপশন আপগ্রেড/ডাউনগ্রেড করার সময় BillingFlowParams-এ প্রোরেশন মোড নির্দিষ্ট করার সুবিধা যোগ করা হয়েছে।
  • BillingFlowParams-এ replaceSkusProration বুলিয়ান ফ্ল্যাগ আর কাজ করে না। এর পরিবর্তে replaceSkusProrationMode ব্যবহার করুন।
  • launchBillingFlow() এখন উত্তর না এলে কলব্যাক ট্রিগার করে।

আচরণগত পরিবর্তন

Google Play Billing লাইব্রেরির ভার্সন 1.1-এ নিম্নলিখিত আচরণগত পরিবর্তন রয়েছে।

ডেভেলপাররা BillingFlowParams ক্লাসে replaceSkusProrationMode সেট করতে পারেন

ব্যবহারকারীর সাবস্ক্রিপশন আপগ্রেড বা ডাউনগ্রেড করার সময় প্রোরেশনের ধরন সম্পর্কে ProrationMode আরও বিবরণ প্রদান করে।

Kotlin

BillingFlowParams.newBuilder()
    .setSku(skuId)
    .setType(billingType)
    .setOldSku(oldSku)
    .setReplaceSkusProrationMode(replaceSkusProrationMode)
    .build()

জাভা

BillingFlowParams.newBuilder()
    .setSku(skuId)
    .setType(billingType)
    .setOldSku(oldSku)
    .setReplaceSkusProrationMode(replaceSkusProrationMode)
    .build();

Google Play-তে নিম্নলিখিত প্রোরেশন মোড কাজ করে:

IMMEDIATE_WITH_TIME_PRORATION পরিবর্তন অবিলম্বে কার্যকর হয় এবং নতুন মেয়াদ শেষ হওয়ার সময় প্রো-রেট হিসেবে ব্যবহারকারীকে ক্রেডিট বা চার্জ করা হবে। এটি হল বর্তমান ডিফল্ট আচরণ।
IMMEDIATE_AND_CHARGE_PRORATED_PRICE পরিবর্তন সাথে সাথেই কার্যকর হয় এবং বিলিং চক্র একই থাকে। বাকি সময়ের জন্য দাম চার্জ করা হবে।

মনে রাখবেন: এই বিকল্পটি শুধুমাত্র সাবস্ক্রিপশন আপগ্রেড করার জন্য উপলভ্য।

IMMEDIATE_WITHOUT_PRORATION পরিবর্তন অবিলম্বে কার্যকর হয় এবং পরবর্তী বিলিং চক্রে নতুন দাম চার্জ করা হবে । বিলিং চক্র একই থাকে।

BillingFlowParams ক্লাসে replaceSkusProration আর কাজ করে না

সাবস্ক্রিপশন আপগ্রেড করার অনুরোধের জন্য প্রোরেট করা পরিমাণ চার্জ করার জন্য ডেভেলপাররা একটি বুলিয়ান ফ্ল্যাগ সেট করতে পারতেন। আমরা যেহেতু ProrationMode-এ সহায়তা করছি, যেখানে প্রোরেশন সংক্রান্ত আরও বিস্তারিত নির্দেশাবলী রয়েছে, তাই এই বুলিয়ান ফ্ল্যাগ আর কাজ করে না।

launchBillingFlow() এখন ব্যর্থ উত্তরের জন্য কলব্যাক ট্রিগার করে

বিলিং লাইব্রেরি সবসময় PurhcasesUpdatedListener কলব্যাক ট্রিগার করবে এবং BillingResponse অ্যাসিঙ্ক্রোনাস হিসেবে রিটার্ন করবে। BillingResponse -এর সিঙ্ক্রোনাস রিটার্ন ভ্যালুও রাখা হয়।

সমস্যার সমাধান

  • পরিষেবা ডিসকানেক্ট হয়ে গেলে অ্যাসিঙ্ক পদ্ধতিতে সঠিকভাবে বেরিয়ে আসে।
  • Builder param অবজেক্ট আর বিল্ট অবজেক্টকে মিউট করে না।
  • সমস্যা 68087141: launchBillingFlow() এখন উত্তর না আসা কলব্যাকের জন্য ট্রিগার করুন।

Google Play Billing Library 1.0 রিলিজ (১৯-০৯-২০১৭, ঘোষণা)

Google Play বিলিং লাইব্রেরির ভার্সন 1.0 এখন উপলভ্য। এই ভার্সনে নিম্নলিখিত পরিবর্তন করা হয়েছে।

গুরুত্বপূর্ণ পরিবর্তন

  • লাইব্রেরির ম্যানিফেস্টের মধ্যে এম্বেড করা বিলিং সংক্রান্ত অনুমতি। Android ম্যানিফেস্টের মধ্যে com.android.vending.BILLING অনুমতি যোগ করার প্রয়োজন আর নেই।
  • BillingClient.Builder ক্লাসে নতুন বিল্ডার যোগ করা হয়েছে।
  • SKU কোয়েরি করার পদ্ধতিতে ব্যবহার করার জন্য SkuDetailsParams ক্লাসের জন্য বিল্ডার প্যাটার্ন চালু করা হয়েছে।
  • সামঞ্জস্যের জন্য একাধিক API পদ্ধতি আপডেট করা হয়েছে (একই রিটার্ন আর্গুমেন্ট নাম ও ক্রম)।

আচরণগত পরিবর্তন

Google Play Billing লাইব্রেরির ভার্সন ১.০-এ নিম্নলিখিত আচরণগত পরিবর্তন রয়েছে।

BillingClient.Builder ক্লাস

BillingClient.Builder এখন newBuilder প্যাটার্নের মাধ্যমে ইনিশিয়ালাইজ করা হয়েছে:

Kotlin

billingClient = BillingClient.newBuilder(context).setListener(this).build()

জাভা

billingClient = BillingClient.newBuilder(context).setListener(this).build();

launchBillingFlow মেথড এখন BillingFlowParams ক্লাস ব্যবহার করে কল করা হয়

কেনাকাটা বা সাবস্ক্রিপশনের জন্য বিলিং ফ্লো শুরু করতে, launchBillingFlow() পদ্ধতিতে অনুরোধের জন্য নির্দিষ্ট প্যারামিটার সহ BillingFlowParams ইনস্ট্যান্স ইনিশিয়ালাইজ করা হয়:

Kotlin

BillingFlowParams.newBuilder().setSku(skuId)
        .setType(billingType)
        .setOldSku(oldSku)
        .build()

// Then, use the BillingFlowParams to start the purchase flow
val responseCode = billingClient.launchBillingFlow(builder.build())

জাভা

BillingFlowParams.newBuilder().setSku(skuId)
                              .setType(billingType)
                              .setOldSku(oldSku)
                              .build();

// Then, use the BillingFlowParams to start the purchase flow
int responseCode = billingClient.launchBillingFlow(builder.build());

উপলভ্য প্রোডাক্ট কোয়েরি করার নতুন উপায়

queryPurchaseHistoryAsync() ও querySkuDetailsAsync() পদ্ধতির আর্গুমেন্টকে বিল্ডার প্যাটার্নে র‍্যাপ করা হয়েছে:

Kotlin

val params = SkuDetailsParams.newBuilder()
params.setSkusList(skuList)
        .setType(itemType)
billingClient.querySkuDetailsAsync(params.build(), object : SkuDetailsResponseListener() {
    ...
})

জাভা

SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList)
        .setType(itemType);
billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {...})

আপনার সুবিধার জন্য এবং আমাদের API জুড়ে সামঞ্জস্য বজায় রাখতে, ফলাফল এখন ফলাফল কোড এবং SkuDetails অবজেক্টের একটি তালিকার মাধ্যমে রিটার্ন করা হয়, আগের র‍্যাপার ক্লাসের মাধ্যমে নয়:

Kotlin

fun onSkuDetailsResponse(@BillingResponse responseCode: Int, skuDetailsList: List<SkuDetails>)

জাভা

public void onSkuDetailsResponse(@BillingResponse int responseCode, List<SkuDetails> skuDetailsList)

onConsumeResponse() পদ্ধতিতে প্যারামিটারের ক্রম পরিবর্তন করা হয়েছে

আমাদের API জুড়ে সামঞ্জস্য বজায় রাখতে ConsumeResponseListener ইন্টারফেস থেকে onConsumeResponse-এর আর্গুমেন্টের ক্রম পরিবর্তন করা হয়েছে:

Kotlin

fun onConsumeResponse(@BillingResponse responseCode: Int, outToken: String)

জাভা

public void onConsumeResponse(@BillingResponse int responseCode, String outToken)

আনর‍্যাপ করা PurchaseResult অবজেক্ট

PurchaseResult আমাদের API জুড়ে সামঞ্জস্যপূর্ণ হওয়ার জন্য আনর‍্যাপ করা হয়েছে:

Kotlin

fun onPurchaseHistoryResponse(@BillingResponse responseCode: Int, purchasesList: List<Purchase>)

জাভা

void onPurchaseHistoryResponse(@BillingResponse int responseCode, List<Purchase> purchasesList)

সমস্যার সমাধান

ডেভেলপার প্রিভিউ ১ রিলিজ (১২-০৬-২০১৭, ঘোষণা)

ডেভেলপার প্রিভিউ লঞ্চ করা হয়েছে, এর লক্ষ্য হল বিলিংয়ের ক্ষেত্রে ডেভেলপমেন্ট প্রসেসকে সহজ করা। এর ফলে ডেভেলপাররা Android অ্যাপের জন্য নির্দিষ্ট লজিক প্রয়োগ করার উপর মনোযোগ দিতে পারবেন, যেমন অ্যাপ্লিকেশন আর্কিটেকচার ও নেভিগেশন স্ট্রাকচার।

Google Play Billing API-এর সাথে আপনার Android অ্যাপ ইন্টিগ্রেট করার সময় ব্যবহার করার জন্য লাইব্রেরিতে অনেকগুলি সুবিধাজনক ক্লাস ও ফিচার অন্তর্ভুক্ত থাকে। এছাড়াও, লাইব্রেরিটি Android ইন্টারফেস ডেফিনিশন ল্যাঙ্গুয়েজ (AIDL) পরিষেবার উপরে একটি অ্যাবস্ট্রাকশন লেয়ার প্রদান করে, যা অ্যাপ এবং Google Play Billing API-এর মধ্যে ইন্টারফেসকে ডেভেলপারদের জন্য আরও সহজে ডিফাইন করে।