ভার্সন ৭ বা ৮ থেকে Google Play Billing Library 9-এ মাইগ্রেট করা

এই ডকুমেন্টে বর্ণনা করা হয়েছে যে কীভাবে Google Play Billing Library (PBL) 7 বা 8 থেকে PBL 9-এ মাইগ্রেট করতে হয় এবং নতুন ফিচারের সাথে কীভাবে ইন্টিগ্রেট করতে হয়।

9.0.0 ভার্সনে করা পরিবর্তনগুলির সম্পূর্ণ তালিকা দেখতে, রিলিজ নোট দেখুন।

এক নজরে

PBL 9-এ আগে থেকে থাকা API-তে উন্নতি করা হয়েছে এবং এর সাথে সাথে আগে বন্ধ করে দেওয়া API সরিয়ে দেওয়া হয়েছে। লাইব্রেরির এই ভার্সন নতুন সাব-রেসপন্স কোডের মাধ্যমে আরও সমৃদ্ধ সমস্যা সংক্রান্ত প্রসঙ্গও প্রদান করে।

PBL আপগ্রেডের জন্য ব্যাকওয়ার্ড-কম্প্যাটিবিলিটি

PBL 9-এ মাইগ্রেট করতে, আপনাকে নিজের অ্যাপ থেকে আগে থেকে থাকা কিছু API রেফারেন্স আপডেট করতে বা সরিয়ে দিতে হবে, যেমনটি রিলিজ নোট এবং পরে এই মাইগ্রেশন গাইডে বর্ণনা করা হয়েছে।

PBL 7 বা 8 থেকে PBL 9-এ আপগ্রেড করা

PBL 7 বা 8 থেকে PBL 9-এ আপগ্রেড করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

  1. আপনার অ্যাপের build.gradle ফাইলে Play Billing Library-এর নির্ভরতা সংক্রান্ত ভার্সন আপডেট করুন।

    dependencies {
      def billing_version = "9.1.0"
      implementation "com.android.billingclient:billing:$billing_version"
    }
    

    আপনি Kotlin ব্যবহার করলে, Google Play Billing Library KTX মডিউলে Kotlin এক্সটেনশন ও কোরাউটিন সাপোর্ট থাকে যা আপনাকে Google Play Billing Library ব্যবহার করার সময় ইডিওম্যাটিক Kotlin লিখতে সাহায্য করে। আপনার প্রোজেক্টে এইসব এক্সটেনশন যোগ করতে, আপনার অ্যাপের build.gradle ফাইলে নিচে দেখানো মতো নির্ভরতা যোগ করুন:

    dependencies {
      val billing_version = "9.1.0"
      implementation("com.android.billingclient:billing-ktx:$billing_version")
    }
    
  2. (শুধুমাত্র PBL 7 থেকে PBL 9-এ আপগ্রেড করার ক্ষেত্রে প্রযোজ্য)। queryProductDetailsAsync পদ্ধতির ইমপ্লিমেন্টেশন আপডেট করুন।

    ProductDetailsResponseListener.onProductDetailsResponse পদ্ধতির সিগনেচারে পরিবর্তন করা হয়েছে, যার ফলে queryProductDetailsAsync প্রয়োগ করার জন্য আপনার অ্যাপে পরিবর্তন করতে হবে। আরও তথ্যের জন্য, কেনার জন্য উপলভ্য প্রোডাক্ট দেখান দেখুন।

  3. সরিয়ে দেওয়া API ম্যানেজ করুন।

    নিচের সারণীতে সরিয়ে দেওয়া API এবং তার পরিবর্তে ব্যবহার করতে হবে এমন API-এর তালিকা দেওয়া হল।

    এখান থেকে আপগ্রেড করুন

    PBL 9 আর নিম্নলিখিত সারণীতে তালিকাভুক্ত API-কে সমর্থন করে না। আপনার প্রয়োগে সরিয়ে দেওয়া API-এর মধ্যে কোনওটি ব্যবহার করা হলে, তার পরিবর্তে ব্যবহার করা যায় এমন API-এর জন্য টেবিল দেখুন।

    আগে অননুমোদিত API সরিয়ে দেওয়া হয়েছে ব্যবহার করার জন্য বিকল্প API
    queryPurchaseHistoryAsync API কোয়েরি কেনাকাটার ইতিহাস দেখুন। ফ্রি ট্রায়ালের উপযুক্ততা নির্ধারণ করার জন্য আপনি queryPurchaseHistoryAsync ব্যবহার করে থাকলে, এখন আপনাকে ProductDetails.getSubscriptionOfferDetails() ব্যবহার করে নির্ধারণ করতে হবে যে কোন অফারের জন্য ব্যবহারকারী উপযুক্ত।
    BillingClient.SkuType BillingClient.ProductType. INAPP এবং SUBS প্রোডাক্টের ধরন সংক্রান্ত কনস্ট্যান্ট, বন্ধ করে দেওয়া SKU-এর ধরন সংক্রান্ত কনস্ট্যান্টের মতো একই কাজ করে।
    SkuDetails ProductDetails. এটি হল নতুন ডেটা মডেল যা ওয়ান-টাইম প্রোডাক্টে কাজ করে।
    SkuDetailsParams queryProductDetailsAsync-এর সাথে QueryProductDetailsParams ব্যবহার করুন।
    SkuDetailsResponseListener queryProductDetailsAsync-এর সাথে ProductDetailsResponseListener ব্যবহার করুন।
    QueryPurchaseHistoryParams
    • অ্যাক্টিভ বা বাকি থাকা কেনাকাটার জন্য queryPurchasesAsync ব্যবহার করুন।
    • আপনার ব্যাক-এন্ড সার্ভারে ব্যবহার করা কেনাকাটা ট্র্যাক করুন।
    • বাতিল করা বা বাতিল করা কেনাকাটার জন্য সার্ভার-সাইড Voided Purchases API ব্যবহার করুন।
    getSkuDetailsList ও setSkuDetailsList BillingFlowParams.Builder.setProductDetailsParamsList ব্যবহার করুন
    querySkuDetailsAsync queryProductDetailsAsync
    enablePendingPurchases() (প্যারামিটার ছাড়া API) enablePendingPurchases(PendingPurchasesParams params)
    মনে রাখবেন, deprecated enablePendingPurchases() ফাংশনটি enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())-এর মতো কাজ করে।
    queryPurchasesAsync(String skuType, PurchasesResponseListener listener) queryPurchasesAsync

    এখান থেকে আপগ্রেড করুন

    নিচের সারণীতে PBL 9 থেকে সরিয়ে দেওয়া API এবং তার পরিবর্তে ব্যবহার করতে হবে এমন API-এর তালিকা দেওয়া হল।

    আগে অননুমোদিত API সরিয়ে দেওয়া হয়েছে ব্যবহার করার জন্য বিকল্প API
    BillingClient.SkuType BillingClient.ProductType. INAPP এবং SUBS প্রোডাক্টের ধরন সংক্রান্ত কনস্ট্যান্ট, বন্ধ করে দেওয়া SKU-এর ধরন সংক্রান্ত কনস্ট্যান্টের মতো একই কাজ করে।
    SkuDetails ProductDetails. এটি হল নতুন ডেটা মডেল যা ওয়ান-টাইম প্রোডাক্টে কাজ করে।
    SkuDetailsParams queryProductDetailsAsync-এর সাথে QueryProductDetailsParams ব্যবহার করুন।
    SkuDetailsResponseListener queryProductDetailsAsync-এর সাথে ProductDetailsResponseListener ব্যবহার করুন।
    QueryPurchaseHistoryParams
    • অ্যাক্টিভ বা বাকি থাকা কেনাকাটার জন্য queryProductDetailsAsync ব্যবহার করুন।
    • আপনার ব্যাক-এন্ড সার্ভারে ব্যবহার করা কেনাকাটা ট্র্যাক করুন।
    • বাতিল করা বা বাতিল করা কেনাকাটার জন্য সার্ভার-সাইড Voided Purchases API ব্যবহার করুন।
    getSkuDetailsList ও setSkuDetailsList BillingFlowParams.Builder.setProductDetailsParamsList ব্যবহার করুন

  4. (সাজেস্ট করা) অটোমেটিক পরিষেবা আবার কানেক্ট করার সুবিধা চালু করুন।

    পরিষেবা ডিসকানেক্ট করা অবস্থায় কোনও API কল করা হলে, Play Billing Library অটোমেটিক পরিষেবা কানেকশন আবার চালু করার চেষ্টা করতে পারে। আরও তথ্যের জন্য, পরিষেবা অটোমেটিক আবার কানেক্ট করা চালু করুন দেখুন।

  5. নতুন সাব-রেসপন্স কোড হ্যান্ডেল করা।

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

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

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

  6. সমস্যার কোড আবার শ্রেণীবদ্ধ করা সম্পর্কে সচেতনতা।

    যেসব ক্ষেত্রে সিস্টেমের মাধ্যমে Play Store অ্যাপ ব্লক করা হয় (যেমন, OEM-কাস্টমাইজ করা কিডস মোডে), PBL থেকে পাওয়া রেসপন্স কোড ERROR থেকে পরিবর্তিত হয়ে BILLING_UNAVAILABLE হয়ে যায়।

    মাইগ্রেশন ধাপ: আপনার সমস্যা সমাধান করার লজিক যেন এই পরিবর্তনের সাথে মানিয়ে নিতে পারে এবং এই নির্দিষ্ট পরিস্থিতিতে যেন কোনও সাধারণ সমস্যার উপর নির্ভর না করে, তা নিশ্চিত করুন।

  7. DeveloperProvidedBillingDetails.getLinkUri() নাল হওয়ার সম্ভাবনা ম্যানেজ করা।

    আপনি যদি এক্সটার্নাল পেমেন্ট ইন্টিগ্রেশনের অংশ হিসেবে DeveloperProvidedBillingDetails ব্যবহার করেন, তাহলে getLinkUri() এখন @Nullable।

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

    Kotlin

    জাভা

    String linkUri = details.getLinkUri();
    if (!android.text.TextUtils.isEmpty(linkUri)) {
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(linkUri));
      context.startActivity(intent);
    }
    
  8. ঐচ্ছিক পরিবর্তন।