সংস্করণ 4 বা 5 থেকে Google Play বিলিং লাইব্রেরি 6-এ স্থানান্তর করুন৷

এই বিষয়টি বর্ণনা করে যে কীভাবে Google Play বিলিং লাইব্রেরি 4 বা 5 থেকে Google Play বিলিং লাইব্রেরি 6-এ স্থানান্তর করা যায় এবং কীভাবে নতুন সদস্যতা ক্ষমতা ব্যবহার করা যায়।

সংস্করণ 6.0.0-এ পরিবর্তনের সম্পূর্ণ তালিকার জন্য, রিলিজ নোট পড়ুন।

ওভারভিউ

Google Play বিলিং লাইব্রেরি 6 সংস্করণ 5 এ প্রবর্তিত নতুন সদস্যতা বৈশিষ্ট্যের উপর তৈরি করে এবং আরও কিছু উন্নতি যোগ করে। এই বৈশিষ্ট্যগুলি আপনাকে ক্রমাগত ক্রমবর্ধমান SKU তৈরি এবং পরিচালনা করার প্রয়োজনীয়তা দূর করে অপারেশনাল খরচ কমিয়ে আরও উপায়ে সাবস্ক্রিপশন বিক্রি করতে দেয়।

প্লে বিলিং লাইব্রেরি 5 এর সাথে প্রবর্তিত নতুন বৈশিষ্ট্যগুলি সম্পর্কে আরও তথ্যের জন্য, প্লে কনসোলে সদস্যতাগুলির সাম্প্রতিক পরিবর্তনগুলি দেখুন৷

ব্যাকওয়ার্ড-সামঞ্জস্যপূর্ণ প্লে বিলিং লাইব্রেরি আপগ্রেড

প্লে বিলিং লাইব্রেরি 5 এবং নতুন সাবস্ক্রিপশন প্ল্যাটফর্মের মে 2022-এর রিলিজের অংশ হিসাবে সমস্ত বিদ্যমান সাবস্ক্রিপশন পণ্য স্বয়ংক্রিয়ভাবে এই নতুন দৃষ্টান্তে রূপান্তরিত হয়েছে। এর মানে হল যে প্লে বিলিং লাইব্রেরির নতুন সংস্করণগুলির সাথে সামঞ্জস্যপূর্ণ একটি ক্যাটালগ পেতে আপনাকে কোনো সদস্যতা পণ্য কনফিগারেশন পরিবর্তন করতে হবে না৷ কীভাবে সাবস্ক্রিপশন SKUগুলিকে পিছনের-সামঞ্জস্যপূর্ণ সাবস্ক্রিপশনে রূপান্তরিত করা হয়েছিল সে সম্পর্কে আরও তথ্যের জন্য, Play Console সহায়তা নিবন্ধে পুরানো সদস্যতার সাথে কাজ করা বিভাগটি দেখুন।

আপনার অ্যাপের পুরানো সংস্করণ এখনও কাজ করে

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

অবহেলিত পদ্ধতিগুলি ব্যবহার করে আপনার অ্যাপের সংস্করণগুলি (উদাহরণস্বরূপ, querySkuDetailsAsync() ) কোনও বেস প্ল্যান বা অফার বিক্রি করতে সক্ষম হবে না যা পশ্চাদমুখী সামঞ্জস্যপূর্ণ নয়৷ আপনি প্রাসঙ্গিক Play Console সহায়তা কেন্দ্র নিবন্ধে ব্যাকওয়ার্ড-সামঞ্জস্যপূর্ণ অফার সম্পর্কে পড়তে পারেন।

প্লে বিলিং লাইব্রেরি 5 বা 6 এ আপগ্রেড করুন

প্লে বিলিং লাইব্রেরি 5 এবং 6-এ অপ্রচলিত পদ্ধতি querySkuDetailsAsync এবং BillingFlowParams.Builder.setSkuDetails অন্তর্ভুক্ত রয়েছে যা SkuDetails বিলিং ফ্লো প্যারামিটার হিসাবে নেয়৷ এর মানে হল যে আপনি স্থানান্তরের বিভিন্ন ধাপের পরিকল্পনা করে ধীরে ধীরে প্লে বিলিং লাইব্রেরি 6-এ যেতে পারেন।

মাইগ্রেশনের প্রথম ধাপ হিসেবে, আপনি শুধু লাইব্রেরি সংস্করণ আপডেট করতে পারেন, আপনার ক্যাটালগ এবং ব্যাকএন্ড যেমন আছে তেমনই রেখে যেতে পারেন এবং আপনার অ্যাপ পরীক্ষা করতে পারেন যখন এটি এখনও অবহেলিত পদ্ধতি ব্যবহার করে। আপনি যদি queryPurchases , launchPriceChangeFlow , বা setVrPurchaseFlow ব্যবহার না করেন তবে এটি এখনও উদ্দেশ্য অনুযায়ী কাজ করা উচিত। এর পরে, আপনি 2022 সালের মে মাসে প্রকাশিত নতুন সাবস্ক্রিপশন বৈশিষ্ট্যগুলি সম্পূর্ণরূপে গ্রহণ করতে পুনরাবৃত্তি করতে পারেন।

আপনি যদি আগে Google Play বিলিং লাইব্রেরি 5 মাইগ্রেশনের সাথে এই বৈশিষ্ট্যগুলি গ্রহণ করে থাকেন তবে আপনি Google Play বিলিং লাইব্রেরি আপডেট করুন এবং ব্যবহারকারীর সদস্যতা কেনাকাটা পরিবর্তন করুন লেবেলযুক্ত বিভাগগুলিতে সরাসরি যেতে পারেন৷ আপনি যদি আগের সংস্করণ থেকে শুরু করেন বা এখনও নতুন বৈশিষ্ট্যগুলি পুরোপুরি গ্রহণ না করে থাকেন তবে আপনি কীভাবে সেগুলি গ্রহণ করবেন তা শিখতে অনুসরণ করা সম্পূর্ণ মাইগ্রেশন পদক্ষেপগুলি পড়তে পারেন৷

সম্পূর্ণ মাইগ্রেশন ধাপ

আপনার ব্যাকএন্ড পণ্য ক্যাটালগে নতুন সদস্যতা তৈরি করুন

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

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

আমরা সুপারিশ করছি যে আপনি 2022 সালের মে রিলিজের পরে রূপান্তরিত সাবস্ক্রিপশন পণ্যগুলি পরিবর্তন করবেন না; এই পুরানো বিল্ডগুলিকে প্রভাবিত করতে পারে এমন পরিবর্তনগুলি প্রবর্তন না করে অবহেলিত পদ্ধতিগুলি (উদাহরণস্বরূপ, querySkuDetailsAsync() ) ব্যবহার করে আপনার অ্যাপের সংস্করণগুলির সাথে বিক্রি করা হবে বলে আপনার সেগুলি ছেড়ে দেওয়া উচিত৷

কনভার্সন প্রসেস আপনার ক্যাটালগে থাকা সাবস্ক্রিপশন প্রোডাক্টগুলিকে মে 2022-এর আগে রিড-ওনলি তৈরি করে যাতে দুর্ঘটনাজনিত পরিবর্তনগুলি এড়াতে পারে যার ফলে আপনার বিদ্যমান ইন্টিগ্রেশনে সমস্যা হতে পারে। এই সাবস্ক্রিপশনগুলিতে পরিবর্তন করা সম্ভব, তবে এমন প্রভাব থাকবে যা আপনার ফ্রন্টএন্ড এবং ব্যাকএন্ড ইন্টিগ্রেশনকে প্রভাবিত করতে পারে:

  • ফ্রন্টএন্ডে, সাবস্ক্রিপশন পণ্যের বিশদ বিবরণ পেতে querySkuDetailsAsync() ব্যবহার করে অ্যাপ সংস্করণগুলি শুধুমাত্র ব্যাকওয়ার্ড-সামঞ্জস্যপূর্ণ বেস প্ল্যান এবং অফার বিক্রি করতে পারে এবং শুধুমাত্র একটি ব্যাকওয়ার্ড-সামঞ্জস্যপূর্ণ বেস প্ল্যান এবং অফার সমন্বয় থাকতে পারে, তাই আপনি যদি নতুন প্ল্যান বা অফার যোগ করেন রূপান্তরিত সাবস্ক্রিপশন, নতুন অতিরিক্ত বেস প্ল্যান বা অফারগুলি আপনার অ্যাপের এই পুরানো সংস্করণগুলিতে বিক্রি করা যাবে না।

  • ব্যাকএন্ডে, আপনি যদি Play Console UI-তে আপনার রূপান্তরিত সাবস্ক্রিপশনগুলি সম্পাদনা করেন, আপনি যদি এই উদ্দেশ্যে এন্ডপয়েন্টকে কল করেন তবে আপনি inappproducts এন্ডপয়েন্টের সাথে সেগুলি পরিচালনা করতে পারবেন না। এই সাবস্ক্রিপশনগুলির জন্য কেনাকাটা পরিচালনা করার জন্য আপনাকে নতুন সাবস্ক্রিপশন ক্রয় স্ট্যাটাস এন্ডপয়েন্ট ( purchases.subscriptionsv2.get ) এ স্থানান্তরিত করা উচিত, কারণ পুরানো ক্রয় স্ট্যাটাস এন্ডপয়েন্ট ( purchases.subscriptions.get ) শুধুমাত্র ব্যাকওয়ার্ড-সামঞ্জস্যপূর্ণ বেস প্ল্যানগুলি পরিচালনা করার জন্য প্রয়োজনীয় ডেটা ফেরত দেয়। এবং কেনাকাটা অফার করে। আরো তথ্যের জন্য সদস্যতা ক্রয় অবস্থা পরিচালনা বিভাগ পড়ুন.

নতুন API দিয়ে আপনার ব্যাকএন্ড সদস্যতা ক্যাটালগ পরিচালনা করুন

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

Google Play বিলিং সদস্যতাগুলির জন্য একটি স্বয়ংক্রিয় পণ্য ক্যাটালগ পরিচালনা মডিউল স্থানান্তর করতে, আপনার সদস্যতা ক্যাটালগ পরিচালনা এবং প্রকাশ করতে নতুন সাবস্ক্রিপশন পাবলিশিং API দিয়ে inappproducts API প্রতিস্থাপন করুন। তিনটি নতুন শেষ পয়েন্ট আছে:

  • সদস্যতা পণ্য পরিচালনা করতে Monetization.subscriptions .
  • Monetization.basePlans সাবস্ক্রিপশনের জন্য বেস প্ল্যানগুলি পরিচালনা করতে।
  • বেস প্ল্যানগুলির জন্য অফারগুলি পরিচালনা করার জন্য Monetization.offers

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

আপনার এককালীন কেনাকাটার পণ্যগুলির জন্য আপনার অ্যাপ-মধ্যস্থ পণ্য ক্যাটালগ পরিচালনা করতে এখনও inappproducts API ব্যবহার করা উচিত।

অবহেলিত পদ্ধতিগুলি ব্যবহার করে আপনার অ্যাপের সংস্করণগুলি (উদাহরণস্বরূপ, querySkuDetailsAsync() ) কোনও বেস প্ল্যান বা অফার বিক্রি করতে সক্ষম হবে না যা পশ্চাদমুখী সামঞ্জস্যপূর্ণ নয়৷ আপনি এখানে ব্যাকওয়ার্ড-সামঞ্জস্যপূর্ণ অফার সম্পর্কে পড়তে পারেন।

Google Play বিলিং লাইব্রেরি আপডেট করুন

একবার আপনি আপনার নতুন সাবস্ক্রিপশন পণ্যের ক্যাটালগ তৈরি করলে, আপনি আপনার অ্যাপটিকে Google বিলিং লাইব্রেরি 5-এ স্থানান্তর করতে পারেন। আপনার অ্যাপের build.gradle ফাইলে আপডেট হওয়া সংস্করণের সাথে বিদ্যমান Play বিলিং লাইব্রেরি নির্ভরতা প্রতিস্থাপন করুন।

dependencies {
    def billingVersion = "6.0.0"

    implementation "com.android.billingclient:billing:$billingVersion"
}

আপনার প্রকল্পটি এখনই তৈরি করা উচিত, এমনকি যদি আপনি পদ্ধতিতে কোনো কল পরিবর্তন না করে থাকেন—প্লে বিলিং লাইব্রেরি 6 পশ্চাদপদ সামঞ্জস্যপূর্ণ। একটি SKU-এর ধারণাটিকে অবহেলিত বলে মনে করা হয়, কিন্তু পোর্টিং অ্যাপগুলিকে একটি সহজ, আরও ক্রমবর্ধমান প্রক্রিয়া করতে এখনও উপস্থিত রয়েছে৷

বিলিং ক্লায়েন্ট শুরু করুন এবং Google Play-তে একটি সংযোগ স্থাপন করুন

একটি অ্যান্ড্রয়েড অ্যাপ থেকে কেনাকাটা শুরু করার প্রথম ধাপগুলি একই থাকে:

কিনতে উপলব্ধ পণ্য দেখান

সমস্ত অফার পেতে একজন ব্যবহারকারী ক্রয় করার যোগ্য:

  • QueryProductDetailsParams দিয়ে SkuDetailsParams প্রতিস্থাপন করুন
  • BillingClient.querySkuDetailsAsync() ব্যবহার করতে BillingClient.queryProductDetailsAsync() কল পরিবর্তন করুন

মনে রাখবেন যে ক্যোয়ারী ফলাফল এখন SkuDetails এর পরিবর্তে ProductDetails । প্রতিটি ProductDetails আইটেম পণ্য সম্পর্কে তথ্য (আইডি, শিরোনাম, প্রকার, এবং তাই) ধারণ করে। সাবস্ক্রিপশন পণ্যের জন্য, ProductDetails একটি List<ProductDetails.SubscriptionOfferDetails> , যা সাবস্ক্রিপশন অফারের বিবরণের তালিকা। এককালীন কেনাকাটার পণ্যগুলির জন্য, ProductDetails একটি ProductDetails.OneTimePurchaseOfferDetails থাকে।OneTimePurchaseOfferDetails। কোন অফার ব্যবহারকারীদের দেখানো হবে তা নির্ধারণ করতে এগুলি ব্যবহার করা যেতে পারে।

নিম্নলিখিত উদাহরণগুলি দেখায় যে এই পরিবর্তনগুলি করার আগে এবং পরে আপনার অ্যাপটি কেমন দেখতে পারে:

আগে

কোটলিন

val skuList = ArrayList<String>()

skuList.add("up_basic_sub")

val params = SkuDetailsParams.newBuilder()

params.setSkusList(skuList).setType(BillingClient.SkuType.SUBS).build()

billingClient.querySkuDetailsAsync(params) {
    billingResult,
    skuDetailsList ->
    // Process the result
}

জাভা

List<String> skuList = new ArrayList<>();

skuList.add("up_basic_sub");

SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();

params.setSkusList(skuList).setType(SkuType.SUBS).build();

billingClient.querySkuDetailsAsync(params,
    new SkuDetailsResponseListener() {
        @Override
        public void onSkuDetailsResponse(BillingResult billingResult,
                List<SkuDetails> skuDetailsList) {
            // Process the result.
        }
    }
);

পরে

কোটলিন

val productList =
    listOf(
        QueryProductDetailsParams.Product.newBuilder()
            .setProductId("up_basic_sub")
            .setProductType(BillingClient.ProductType.SUBS)
            .build()
    )

val params = QueryProductDetailsParams.newBuilder().setProductList(productList).build()

billingClient.queryProductDetailsAsync(params) {
    billingResult,
    productDetailsList ->
    // Process the result
}

জাভা

ImmutableList<Product> productList = ImmutableList.of(Product.newBuilder()
                                            .setProductId("up_basic_sub")
                                            .setProductType(ProductType.SUBS)
                                            .build());

QueryProductDetailsParams params = QueryProductDetailsParams.newBuilder()
    .setProductList(productList)
    .build();

billingClient.queryProductDetailsAsync(
        params,
        new ProductDetailsResponseListener() {
                public void onProductDetailsResponse(BillingResult billingResult, List<ProductDetails> productDetailsList) {
                    // Process the result
                }
        }
);

queryProductDetailsAsync এর জন্য কলব্যাক একটি List<ProductDetails> প্রদান করে। প্রতিটি ProductDetails আইটেম পণ্য সম্পর্কে তথ্য (আইডি, শিরোনাম, প্রকার, এবং তাই) ধারণ করে। প্রধান পার্থক্য হল যে সাবস্ক্রিপশন পণ্যগুলিতে এখন একটি List<ProductDetails.SubscriptionOfferDetails> রয়েছে যাতে ব্যবহারকারীর জন্য উপলব্ধ সমস্ত অফার থাকে।

যেহেতু প্লে বিলিং লাইব্রেরির পূর্ববর্তী সংস্করণগুলি নতুন অবজেক্টগুলিকে সমর্থন করে না (সাবস্ক্রিপশন, বেস প্ল্যান, অফার এবং আরও অনেক কিছু), নতুন সিস্টেম প্রতিটি সাবস্ক্রিপশন SKU কে একটি একক পশ্চাদগামী-সামঞ্জস্যপূর্ণ বেস প্ল্যান এবং অফারে অনুবাদ করে৷ উপলব্ধ এককালীন ক্রয় পণ্যগুলিও একটি ProductDetails বস্তুতে পোর্ট করা হয়। getOneTimePurchaseOfferDetails() পদ্ধতিতে একবার কেনার পণ্যের অফার বিশদটি অ্যাক্সেস করা যেতে পারে।

কদাচিৎ, কিছু ডিভাইস ProductDetails এবং queryProductDetailsAsync() সমর্থন করতে পারে না, সাধারণত Google Play পরিষেবার পুরানো সংস্করণের কারণে। এই দৃশ্যের জন্য যথাযথ সমর্থন নিশ্চিত করতে, queryProductDetailsAsync কল করার আগে PRODUCT_DETAILS বৈশিষ্ট্যের জন্য isFeatureSupported() কল করুন। প্রতিক্রিয়া OK থাকলে, ডিভাইসটি বৈশিষ্ট্যটিকে সমর্থন করে এবং আপনি কলিং queryProductDetailsAsync() এর সাথে এগিয়ে যেতে পারেন৷ যদি প্রতিক্রিয়া FEATURE_NOT_SUPPORTED হয়, তাহলে আপনি পরিবর্তে querySkuDetailsAsync() এর সাথে উপলব্ধ পশ্চাদগামী-সামঞ্জস্যপূর্ণ পণ্য তালিকার অনুরোধ করতে পারেন। ব্যাকওয়ার্ড সামঞ্জস্য বৈশিষ্ট্যগুলি কীভাবে ব্যবহার করবেন সে সম্পর্কে আরও জানতে, মে 2022 সাবস্ক্রিপশন বৈশিষ্ট্য নির্দেশিকা দেখুন।

অফার ক্রয় প্রবাহ চালু করুন

একটি অফারের জন্য একটি ক্রয় প্রবাহ চালু করা একটি SKU এর জন্য একটি ফ্লো চালু করার অনুরূপ। সংস্করণ 6 ব্যবহার করে একটি ক্রয়ের অনুরোধ শুরু করতে, নিম্নলিখিতগুলি করুন:

  • BillingFlowParams এর জন্য SkuDetails ব্যবহার করার পরিবর্তে, ProductDetailsParams ব্যবহার করুন।
  • SubscriptionOfferDetails অবজেক্ট ব্যবহার করে অফার(গুলি) বিবরণ, যেমন অফার আইডি, বেস প্ল্যান আইডি এবং আরও অনেক কিছু পাওয়া যেতে পারে।

ব্যবহারকারীর নির্বাচিত অফার সহ একটি পণ্য কেনার জন্য, নির্বাচিত অফারটির offerToken পান এবং এটিকে ProductDetailsParams অবজেক্টে পাস করুন৷

একবার আপনি একটি BillingFlowParams অবজেক্ট তৈরি করলে, BillingClient এর সাথে বিলিং ফ্লো চালু করা একই থাকে।

নিম্নলিখিত উদাহরণগুলি দেখায় যে এই পরিবর্তনগুলি করার আগে এবং পরে আপনার অ্যাপটি কেমন দেখতে পারে:

আগে

কোটলিন

// An activity reference from which the billing flow will be launched.
val activity : Activity = ...
// Retrieve a value for "skuDetails" by calling querySkuDetailsAsync().
val billingFlowParams = BillingFlowParams.newBuilder()
                            .setSkuDetails(skuDetails)
                            .build()

val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)

জাভা

// An activity reference from which the billing flow will be launched.
Activity activity = ...;
// Retrieve a value for "skuDetails" by calling querySkuDetailsAsync().
BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
        .setSkuDetails(skuDetails)
        .build();

BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)

পরে

কোটলিন

// An activity reference from which the billing flow will be launched.
val activity : Activity = ...;

val productDetailsParamsList = listOf(
    BillingFlowParams.ProductDetailsParams.newBuilder()
        // retrieve a value for "productDetails" by calling queryProductDetailsAsync()
        .setProductDetails(productDetails)
        // For One-time product, "setOfferToken" method shouldn't be called.
        // For subscriptions, to get the offer token corresponding to the selected
        // offer call productDetails.subscriptionOfferDetails?.get(selectedOfferIndex)?.offerToken
        .setOfferToken(selectedOfferToken)
        .build()
)

val billingFlowParams = BillingFlowParams.newBuilder()
    .setProductDetailsParamsList(productDetailsParamsList)
    .build()

// Launch the billing flow
val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)

জাভা

// An activity reference from which the billing flow will be launched.
Activity activity = ...;

ImmutableList<ProductDetailsParams> productDetailsParamsList =
    ImmutableList.of(
        ProductDetailsParams.newBuilder()
             // retrieve a value for "productDetails" by calling queryProductDetailsAsync()
            .setProductDetails(productDetails)
            // For one-time products, "setOfferToken" method shouldn't be called.
            // For subscriptions, to get the offer token corresponding to the selected
            // offer call productDetails.getSubscriptionOfferDetails().get(selectedOfferIndex).getOfferToken()
            .setOfferToken(selectedOfferToken)
            .build()
    );

BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
    .setProductDetailsParamsList(productDetailsParamsList)
    .build();

// Launch the billing flow
BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);

ক্রয় প্রক্রিয়া

Google Play বিলিং লাইব্রেরি 6 এর সাথে ক্রয় প্রক্রিয়াকরণ পূর্ববর্তী সংস্করণগুলির মতোই থাকে৷

ব্যবহারকারীর মালিকানাধীন সমস্ত সক্রিয় কেনাকাটা টেনে আনতে এবং নতুন কেনাকাটার জন্য জিজ্ঞাসা করতে, নিম্নলিখিতগুলি করুন:

  • queryPurchasesAsync()BillingClient.SkuType মান পাস করার পরিবর্তে, একটি QueryPurchasesParams অবজেক্ট পাস করুন যাতে একটি BillingClient.ProductType মান রয়েছে।

নিম্নলিখিত উদাহরণগুলি দেখায় যে এই পরিবর্তনগুলি করার আগে এবং পরে আপনার অ্যাপটি কেমন দেখতে পারে:

আগে

কোটলিন

billingClient.queryPurchasesAsync(BillingClient.SkuType.SUBS) {
    billingResult,
    purchaseList -> {
        // Process the result
    }
}

জাভা


billingClient.queryPurchasesAsync(
    BillingClient.SkuType.SUBS,
    new PurchasesResponseListener() {
        public void onQueryPurchasesResponse(
                BillingResult billingResult,
                List<Purchase> purchases) {
            // process the result
        }
    }
);

পরে

কোটলিন

billingClient.queryPurchasesAsync(
    QueryPurchasesParams.newBuilder()
        .setProductType(BillingClient.ProductType.SUBS)
        .build()
) { billingResult, purchaseList ->
    // Process the result
}

জাভা

billingClient.queryPurchasesAsync(
    QueryPurchasesParams.newBuilder().setProductType(ProductType.SUBS).build(),
    new PurchasesResponseListener() {
        public void onQueryPurchasesResponse(
                BillingResult billingResult,
                List<Purchase> purchases) {
            // Process the result
        }
    }
);

অ্যাপ কেনাকাটা এবং মুলতুবি লেনদেনগুলি পরিচালনা করার পদক্ষেপগুলি পরিবর্তিত হয়নি।

আপনার ব্যাকএন্ডে নতুন API দিয়ে সদস্যতা ক্রয়ের অবস্থা পরিচালনা করুন

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

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

সাবস্ক্রিপশন স্ট্যাটাস সম্পর্কে সর্বশেষ তথ্য টেনে আনতে আপনি SubscriptionNotification রিয়েল টাইম ডেভেলপার নোটিফিকেশন পাওয়ার সময় সাধারনত সাবস্ক্রিপশন পারচেস এপিআই কল করবেন। সাবস্ক্রিপশন পারচেসেস API-এর নতুন সংস্করণ, purchases.subscriptionsv2.get এর সাথে আপনাকে আপনার কলগুলি purchases.subscriptions.get এ প্রতিস্থাপন করতে হবে। SubscriptionPurchaseV2 নামে একটি নতুন সংস্থান রয়েছে যা নতুন মডেলে সাবস্ক্রিপশনের জন্য ক্রয়ের এনটাইটেলমেন্ট পরিচালনা করার জন্য যথেষ্ট তথ্য প্রদান করে।

এই নতুন এন্ডপয়েন্টটি আপনার সমস্ত সাবস্ক্রিপশন পণ্য এবং আপনার সমস্ত কেনাকাটার স্ট্যাটাস প্রদান করে, সেগুলি বিক্রি করা অ্যাপের সংস্করণ নির্বিশেষে এবং যখন পণ্যটি সংজ্ঞায়িত করা হয়েছিল (মে 2022 রিলিজের আগে বা পরে), তাই মাইগ্রেশনের পরে শুধুমাত্র আপনার প্রয়োজন হবে আপনার সাবস্ক্রিপশন ক্রয় স্ট্যাটাস ম্যানেজমেন্ট মডিউলের এই সংস্করণ।

ব্যবহারকারীর সদস্যতা ক্রয় পরিবর্তন করুন

প্লে বিলিং লাইব্রেরি 5 এবং তার আগে, ProrationMode ব্যবহারকারীর সাবস্ক্রিপশন ক্রয়ের পরিবর্তনগুলি প্রয়োগ করতে ব্যবহার করা হয়েছিল, যেমন আপগ্রেড বা ডাউনগ্রেড৷ এটিকে অবমূল্যায়ন করা হয়েছে এবং 6 সংস্করণে ReplacementMode দিয়ে প্রতিস্থাপিত করা হয়েছে।

সাবস্ক্রিপশন মূল্য পরিবর্তন হ্যান্ডেল

প্লে বিলিং লাইব্রেরি 6-এ পূর্বে অবহেলিত launchPriceConfirmationFlow API সরানো হয়েছে। বিকল্পের জন্য, মূল্য পরিবর্তনের নির্দেশিকা দেখুন।

প্লে বিলিং লাইব্রেরি ত্রুটিগুলি পরিচালনা করুন৷

প্লে বিলিং লাইব্রেরি 6-এ, ব্যবহারকারীর ডিভাইস এবং Google Play সিস্টেমের মধ্যে নেটওয়ার্ক সংযোগের সমস্যাগুলি নির্দেশ করতে একটি নতুন NETWORK_ERROR কোড যোগ করা হয়েছে৷ SERVICE_TIMEOUT এবং SERVICE_UNAVAILABLE কোডগুলিতেও পরিবর্তন হয়েছে। আরও তথ্যের জন্য, হ্যান্ডেল BillingResult প্রতিক্রিয়া কোড দেখুন।

মুলতুবি লেনদেন পরিচালনা করুন

সংস্করণ 6.0.0 দিয়ে শুরু করে, Play বিলিং লাইব্রেরি মুলতুবি কেনাকাটার জন্য একটি অর্ডার আইডি তৈরি করে না। এই কেনাকাটার জন্য, ক্রয়টি PURCHASED অবস্থায় সরানোর পরে অর্ডার আইডি পপুলেট করা হয়। নিশ্চিত করুন যে আপনার ইন্টিগ্রেশন শুধুমাত্র একটি লেনদেন সম্পূর্ণভাবে সম্পন্ন হওয়ার পরে একটি অর্ডার আইডি আশা করে। আপনি এখনও আপনার রেকর্ডের জন্য ক্রয় টোকেন ব্যবহার করতে পারেন। মুলতুবি কেনাকাটা পরিচালনার বিষয়ে আরও তথ্যের জন্য, Play বিলিং লাইব্রেরি ইন্টিগ্রেশন গাইড এবং ক্রয় জীবনচক্র ব্যবস্থাপনা নির্দেশিকা দেখুন।