Google Play Billing Library 7 या 8 से Google Play Billing Library 9 पर माइग्रेट करना

इस दस्तावेज़ में, Google Play Billing Library (पीबीएल) 7 या 8 से पीबीएल 9 पर माइग्रेट करने का तरीका बताया गया है. साथ ही, नई सुविधाओं को इंटिग्रेट करने का तरीका भी बताया गया है.

वर्शन 9.0.0 में हुए सभी बदलावों की पूरी सूची देखने के लिए, रिलीज़ नोट देखें.

खास जानकारी

PBL 9 में, मौजूदा एपीआई को बेहतर बनाया गया है. साथ ही, इसमें पहले बंद किए जा चुके एपीआई को हटा दिया गया है. लाइब्रेरी के इस वर्शन में, नए सब-रिस्पॉन्स कोड के ज़रिए गड़बड़ी के बारे में ज़्यादा जानकारी भी मिलती है.

पीबीएल को अपग्रेड करने के लिए, पुराने सिस्टम के साथ काम करने की सुविधा

PBL 9 पर माइग्रेट करने के लिए, आपको अपने ऐप्लिकेशन से कुछ मौजूदा एपीआई रेफ़रंस अपडेट करने या हटाने होंगे. इसके बारे में रिलीज़ नोट में बताया गया है. साथ ही, इस माइग्रेशन गाइड में भी इसकी जानकारी दी गई है.

PBL 7 या 8 से PBL 9 पर अपग्रेड करना

PBL 7 या 8 से PBL 9 पर अपग्रेड करने के लिए, यह तरीका अपनाएं:

  1. अपने ऐप्लिकेशन की build.gradle फ़ाइल में, Play Billing Library की डिपेंडेंसी के वर्शन को अपडेट करें.

    dependencies {
      def billing_version = "9.0.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.0.0"
      implementation("com.android.billingclient:billing-ktx:$billing_version")
    }
    
  2. (सिर्फ़ PBL 7 से PBL 9 पर अपग्रेड करने के लिए लागू होता है). queryProductDetailsAsync तरीके को लागू करने का तरीका अपडेट करें.

    ProductDetailsResponseListener.onProductDetailsResponse तरीके के सिग्नेचर में बदलाव किया गया है. इसलिए, queryProductDetailsAsync को लागू करने के लिए, आपको अपने ऐप्लिकेशन में बदलाव करने होंगे. ज़्यादा जानकारी के लिए, खरीदने के लिए उपलब्ध प्रॉडक्ट दिखाना लेख पढ़ें.

  3. हटाए गए एपीआई को मैनेज करें.

    यहां दी गई टेबल में, हटाए गए एपीआई और उनके बदले इस्तेमाल किए जाने वाले एपीआई की जानकारी दी गई है. आपको अपने ऐप्लिकेशन में इन एपीआई का इस्तेमाल करना होगा.

    अपग्रेड करें

    PBL 9 अब यहां दी गई टेबल में शामिल एपीआई के साथ काम नहीं करता. अगर आपके इंटिग्रेशन में हटाए गए इनमें से किसी एपीआई का इस्तेमाल किया जा रहा है, तो उनके बदले इस्तेमाल किए जा सकने वाले एपीआई के बारे में जानने के लिए, टेबल देखें.

    पहले से बंद किए गए एपीआई को हटा दिया गया है इस्तेमाल करने के लिए दूसरा एपीआई
    queryPurchaseHistoryAsync API Query Purchase History देखें. अगर आपने 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() (एपीआई में पैरामीटर नहीं होते) enablePendingPurchases(PendingPurchasesParams params)
    ध्यान दें कि बंद की जा चुकी enablePendingPurchases() सुविधा, फ़ंक्शन के तौर पर enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()) के बराबर है.
    queryPurchasesAsync(String skuType, PurchasesResponseListener listener) queryPurchasesAsync

    अपग्रेड करें

    यहां दी गई टेबल में, PBL 9 में हटाए गए एपीआई और उनके बदले इस्तेमाल किए जाने वाले एपीआई की सूची दी गई है. आपको अपने ऐप्लिकेशन में इन एपीआई का इस्तेमाल करना होगा.

    पहले से बंद किए गए एपीआई को हटा दिया गया है इस्तेमाल करने के लिए दूसरा एपीआई
    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. (सुझाया गया) सेवा के अपने-आप फिर से कनेक्ट होने की सुविधा चालू करें.

    अगर सेवा के डिसकनेक्ट होने के दौरान कोई एपीआई कॉल किया जाता है, तो Play Billing Library सेवा कनेक्शन को अपने-आप फिर से चालू करने की कोशिश कर सकती है. ज़्यादा जानकारी के लिए, सेवा से अपने-आप फिर से कनेक्ट होने की सुविधा चालू करना लेख पढ़ें.

  5. नए सब-रिस्पॉन्स कोड हैंडल किए जा सकते हैं.

    launchBillingFlow() से मिला BillingResult अब सब-रिस्पॉन्स कोड फ़ील्ड को शामिल करेगा. यह फ़ील्ड सिर्फ़ कुछ मामलों में भरा जाएगा, ताकि फ़ेल होने की वजह के बारे में ज़्यादा जानकारी दी जा सके. सब-रिस्पॉन्स फ़ील्ड में ये वैल्यू हो सकती हैं:

    • PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS - यह तब दिखता है, जब उपयोगकर्ता के पास उतने पैसे नहीं होते जितने का आइटम वह खरीदने की कोशिश कर रहा है.
    • USER_INELIGIBLE - यह तब दिखता है, जब उपयोगकर्ता सदस्यता के ऑफ़र के लिए कॉन्फ़िगर की गई ज़रूरी शर्तों को पूरा नहीं करता.
    • NO_APPLICABLE_SUB_RESPONSE_CODE - यह डिफ़ॉल्ट वैल्यू है. यह तब दिखती है, जब कोई अन्य सब-रिस्पॉन्स कोड लागू नहीं होता.

    माइग्रेशन का चरण: बेहतर उपयोगकर्ता अनुभव देने के लिए, PurchasesUpdatedListener या जवाब के बराबर नतीजे देने वाले सिस्टम को अपडेट करें. इससे इन खास सब-जवाब कोड को पहचाना जा सकेगा और इनके हिसाब से जवाब दिया जा सकेगा. उदाहरण के लिए, पेमेंट के तरीके ठीक करने के लिए प्रॉम्प्ट करना या गड़बड़ी का कोई मैसेज दिखाना.

  6. गड़बड़ी के कोड को फिर से क्लासिफ़ाई करने के बारे में जानकारी.

    अगर सिस्टम ने Play Store ऐप्लिकेशन को ब्लॉक किया है (उदाहरण के लिए, ओईएम के हिसाब से बनाए गए बच्चों के मोड में), तो PBL से मिलने वाला रिस्पॉन्स कोड ERROR से बदलकर BILLING_UNAVAILABLE हो गया है.

    माइग्रेशन का चरण: पक्का करें कि गड़बड़ी को ठीक करने का लॉजिक, इस बदलाव के मुताबिक हो. साथ ही, इन खास मामलों में सामान्य गड़बड़ी मिलने पर निर्भर न हो.

  7. DeveloperProvidedBillingDetails.getLinkUri() में मौजूद वैल्यू के नल होने की स्थिति को हैंडल करें.

    अगर आपने बाहरी बिलिंग सिस्टम के साथ इंटिग्रेट किए गए DeveloperProvidedBillingDetails का इस्तेमाल किया है, तो अब getLinkUri() को @Nullable के तौर पर इस्तेमाल किया जा सकता है.

    माइग्रेशन का चरण: इस बदलाव को सुरक्षित तरीके से लागू करने के लिए, पक्का करें कि आपका इंटिग्रेशन कोड, ब्राउज़र इंटेंट को पार्स करने या लॉन्च करने से पहले, DeveloperProvidedBillingDetails.getLinkUri() तरीके से null और खाली स्ट्रिंग ("") वैल्यू, दोनों को हैंडल करता हो. उदाहरण के लिए:

    Kotlin

    val linkUri = details.getLinkUri()
    if (!linkUri.isNullOrEmpty()) {
      val intent = Intent(Intent.ACTION_VIEW, Uri.parse(linkUri))
      context.startActivity(intent)
    }
    

    Java

    String linkUri = details.getLinkUri();
    if (!android.text.TextUtils.isEmpty(linkUri)) {
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(linkUri));
      context.startActivity(intent);
    }
    
  8. वैकल्पिक बदलाव.