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

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

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

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

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

  • বিলিংয়ের বিকল্প-এর জন্য নতুন API:
    • ব্যবহারকারীর জন্য উপলভ্য বিলিং সংক্রান্ত বিকল্পের তথ্য ফিরিয়ে আনতে BillingClient.getBillingChoiceInfoAsync() যোগ করা হয়েছে।
    • BillingChoiceInfo ক্লাস যোগ করা হয়েছে, যার মধ্যে ইমেজ URL ও লয়ালটি তথ্য সহ উত্তরের বিবরণ রয়েছে।
    • অনুরোধ কনফিগার করতে GetBillingChoiceInfoParams যোগ করা হয়েছে।
    • কলব্যাক পাওয়ার জন্য BillingChoiceInfoResponseListener যোগ করা হয়েছে।
    • Kotlin এক্সটেনশন BillingClient.getBillingChoiceInfo() সাসপেন্ড ফাংশন যোগ করা হয়েছে।
    • বিলিং প্রোগ্রামের জন্য তথ্য ডায়ালগ দেখাতে BillingClient.showBillingProgramInformationDialog() যোগ করা হয়েছে।
    • ডায়ালগ কনফিগার করতে BillingProgramInformationDialogParams যোগ করা হয়েছে।
    • কলব্যাক পাওয়ার জন্য BillingProgramInformationDialogListener যোগ করা হয়েছে।
    • বিলিং সংক্রান্ত পছন্দের উপলভ্যতা সম্পর্কে বিবরণ প্রদান করতে BillingProgramAvailabilityDetails.BillingChoiceAvailabilityDetails যোগ করা হয়েছে।
    • পছন্দের স্ক্রিনের ধরন নির্দিষ্ট করতে ChoiceScreenType যোগ করা হয়েছে।

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Google Play Billing Library-এর 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 ভার্সন ২.২.০-তে কাজ করে।

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

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

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

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

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

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

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

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

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

    নতুন BillingClient.Builder.enableAutoServiceReconnection() বিল্ডার প্যারামিটার ডেভেলপারদের অটোমেটিক পরিষেবা রিকানেকশন চালু করার সুবিধা দেয়, যা Play Billing Service-এ রিকানেকশন অটোমেটিক ম্যানেজ করে কানেকশন ম্যানেজমেন্টকে সহজ করে তোলে এবং পরিষেবা ডিসকানেক্ট হয়ে গেলে ম্যানুয়ালি 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())-এর সমতুল্য।

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

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

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

Google Play Billing Library-এর 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 Billing Library-এর 7.0.0 ভার্সন এবং Kotlin এক্সটেনশন এখন উপলভ্য।

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Google Play Billing Library-এর 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 Billing Library-এর 5.2.1 ভার্সন এবং Kotlin এক্সটেনশন এখন উপলভ্য।

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

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

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

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

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

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

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

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

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

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

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

Google Play Billing Library-এর 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 Billing Library-এর 4.1.0 ভার্সন এবং Kotlin এক্সটেনশন এখন উপলভ্য।

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

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

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

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

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

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

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

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

  • Play Billing Library-এর কানেকশন স্ট্যাটাস ফিরিয়ে আনতে 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 প্লাগ-ইনের ৩.০.৩ ভার্সন এখন উপলভ্য।

Java ও Kotlin-এ ত্রুটি সমাধান

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

Unity-র ত্রুটি সমাধান

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

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

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

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

  • Kotlin এক্সটেনশনে একটি সমস্যার সমাধান করা হয়েছে যেখানে "ইতিমধ্যে আবার শুরু করা হয়েছে" সমস্যার কারণে কো-রুটিন ব্যর্থ হয়।
  • Kotlin এক্সটেনশন, kotlinx.coroutines লাইব্রেরি ভার্সন ১.৪+ এর সাথে ব্যবহার করা হলে, সমাধান না হওয়া রেফারেন্সের সমস্যা সমাধান করা হয়েছে।

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

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

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

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

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

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

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

  • পুরস্কারপ্রাপ্ত 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 Billing লাইব্রেরির 2.2.1 ভার্সন এখন উপলভ্য।

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

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

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

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

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 ব্যবহার করুন নিবন্ধটি দেখুন।

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

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 Library ব্যবহার করুন।

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

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

  • BillingFlowParams-এ, setOldSku(String oldSku) বন্ধ করে দেওয়া হয়েছে এবং setOldSku(String oldSku, String purchaseToken) দিয়ে পরিবর্তন করা হয়েছে, যাতে ডিভাইসে একাধিক অ্যাকাউন্ট একই sku-এর মালিক হলে বিভ্রান্তি দূর করা যায়।

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

Google Play Billing লাইব্রেরির 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 লাইব্রেরির ২.০ ভার্সন এখন উপলভ্য। এই ভার্সনে নিম্নলিখিত পরিবর্তনগুলি রয়েছে।

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

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

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

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 Library ব্যবহার করুন।

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

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

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

একই ধরনের অফার

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

SkuDetails-এ আসল SKU-এর দাম ফিরিয়ে আনার জন্য দুটি নতুন পদ্ধতি আছে:

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

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

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

বাকি থাকা কেনাকাটা চালু করতে, আপনার অ্যাপ শুরু করার অংশ হিসেবে enablePendingPurchases() কল করুন।

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

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

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

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

বাকি থাকা কেনাকাটা স্বীকার করার সময়, কেনাকাটার স্ট্যাটাস PURCHASED হলে তবেই স্বীকার করবেন, PENDING হলে নয়।

API-তে পরিবর্তন

Google Play Billing Library-এর ২.০ ভার্সনে নতুন ফিচার কাজ করার জন্য এবং বর্তমান কার্যকারিতা আরও স্পষ্ট করার জন্য একাধিক 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 Billing লাইব্রেরির 1.2.2 ভার্সন এখন উপলভ্য। এই ভার্সনে নিম্নলিখিত পরিবর্তনগুলি রয়েছে।

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

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

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

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

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

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

প্রধান পরিবর্তনগুলি

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

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

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

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

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

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

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

  • Google Play Billing Library এখন 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 Billing ফ্লো অপ্টিমাইজ করার জন্য এই পরিবর্তন করা হয়েছে।

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

BillingFlowParams বিল্ডার ক্লাসে, 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 পরিবর্তন অবিলম্বে কার্যকর হয় এবং পরবর্তী পুনরাবৃত্তির সময় নতুন দাম চার্জ করা হবে। বিলিং চক্র একই থাকে।

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

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

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

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

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

  • পরিষেবা ডিসকানেক্ট হয়ে গেলে, অ্যাসিঙ্ক পদ্ধতিতে আগেভাগে সঠিকভাবে বেরিয়ে আসে।
  • Builder param অবজেক্ট আর তৈরি করা অবজেক্টকে মিউটেট করে না।
  • সমস্যা ৬৮০৮৭১৪১: launchBillingFlow() এখন ব্যর্থ উত্তরের জন্য কলব্যাক ট্রিগার করে।

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

Google Play Billing লাইব্রেরির 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();

BillingFlowParams ক্লাস ব্যবহার করে এখন launchBillingFlow পদ্ধতি কল করা হয়

কোনও কেনাকাটা বা সাবস্ক্রিপশনের জন্য বিলিং ফ্লো শুরু করতে, 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-এর মধ্যে ইন্টারফেস সংজ্ঞায়িত করা সহজ করে তোলে।