Play Billing में, प्रॉडक्ट की खरीदारी के दौरान होने वाली रुकावटों का विश्लेषण करना

1. परिचय

इस कोडलैब में, आपको वन-टाइम प्रॉडक्ट बनाने, अपने ऐप्लिकेशन को Play Billing Library (पीबीएल) के साथ इंटिग्रेट करने, और खरीदारी में गिरावट की वजहों का विश्लेषण करने पर फ़ोकस करना होगा.

दर्शक

यह कोडलैब, Android ऐप्लिकेशन डेवलपर के लिए है. ये डेवलपर, Play Billing Library (PBL) का इस्तेमाल कर रहे हैं या वन-टाइम प्रॉडक्ट से कमाई करने के लिए PBL का इस्तेमाल करना चाहते हैं.

आपको यह जानकारी मिलेगी...

  • Google Play Console में वन-टाइम प्रॉडक्ट बनाने का तरीका.
  • अपने ऐप्लिकेशन को पीबीएल के साथ इंटिग्रेट करने का तरीका.
  • पीबीएल में, इस्तेमाल किए जा सकने वाले और इस्तेमाल न किए जा सकने वाले वन-टाइम प्रॉडक्ट की खरीदारी को प्रोसेस करने का तरीका.
  • खरीदारी के दौरान होने वाली रुकावटों का विश्लेषण कैसे करें.

आपको इन चीज़ों की ज़रूरत होगी...

2. सैंपल ऐप्लिकेशन बनाना

सैंपल ऐप्लिकेशन को पूरी तरह से काम करने वाले Android ऐप्लिकेशन के तौर पर डिज़ाइन किया गया है. इसमें पूरा सोर्स कोड है, जो इन पहलुओं को दिखाता है:

  • ऐप्लिकेशन को पीबीएल के साथ इंटिग्रेट करना
  • वन-टाइम प्रॉडक्ट फ़ेच करना
  • वन-टाइम प्रॉडक्ट के लिए खरीदारी के फ़्लो लॉन्च करना
  • खरीदारी के ऐसे उदाहरण जिनसे बिलिंग के ये जवाब मिलते हैं:
    • BILLING_UNAVAILABLE
    • USER_CANCELLED
    • OK
    • ITEM_ALREADY_OWNED

नीचे दिए गए डेमो वीडियो में दिखाया गया है कि सैंपल ऐप्लिकेशन को डिप्लॉय और चलाने के बाद, वह कैसा दिखेगा और कैसे काम करेगा.

ज़रूरी शर्तें

संपल ऐप्लिकेशन बनाने और उसे डिप्लॉय करने से पहले, ये काम करें:

बनाएं

बिल्ड के इस चरण का मकसद, सैंपल ऐप्लिकेशन की साइन की गई Android ऐप्लिकेशन बंडल फ़ाइल जनरेट करना है.

Android ऐप्लिकेशन बंडल जनरेट करने के लिए, यह तरीका अपनाएं:

  1. GitHub से सैंपल ऐप्लिकेशन डाउनलोड करें.
  2. सैंपल ऐप्लिकेशन बनाएं. सैंपल ऐप्लिकेशन बनाने से पहले, उसके पैकेज का नाम बदलें. इसके बाद, उसे बनाएं. अगर आपके Play Console खाते में अन्य ऐप्लिकेशन के पैकेज मौजूद हैं, तो पक्का करें कि सैंपल ऐप्लिकेशन के लिए दिया गया पैकेज का नाम यूनीक हो.

    ध्यान दें: सैंपल ऐप्लिकेशन बनाने पर, सिर्फ़ एक APK फ़ाइल बनती है. इसका इस्तेमाल लोकल टेस्टिंग के लिए किया जा सकता है. हालांकि, ऐप्लिकेशन चलाने पर प्रॉडक्ट और उनकी कीमतें नहीं दिखती हैं. ऐसा इसलिए, क्योंकि Play Console में प्रॉडक्ट कॉन्फ़िगर नहीं किए गए हैं. इस कोडलैब में आगे आपको यह काम करना है.
  3. हस्ताक्षर किया गया Android ऐप्लिकेशन बंडल जनरेट करें.
    1. अपलोड की और कीस्टोर जनरेट करना
    2. अपने ऐप्लिकेशन पर अपलोड पासकोड से साइन करना
    3. Play ऐप्लिकेशन साइनिंग की सुविधा को कॉन्फ़िगर करना

अगला चरण, Android ऐप्लिकेशन बंडल को Google Play Console पर अपलोड करना है.

3. Play Console में वन-टाइम प्रॉडक्ट बनाना

Google Play Console में एक बार खरीदे जाने वाले प्रॉडक्ट बनाने के लिए, आपके पास Play Console में कोई ऐप्लिकेशन होना चाहिए. Play Console में एक ऐप्लिकेशन बनाएं. इसके बाद, पहले से बनाए गए साइन किए गए ऐप्लिकेशन बंडल को अपलोड करें.

ऐप्लिकेशन बनाना

ऐप्लिकेशन बनाने के लिए:

  1. अपने डेवलपर खाते का इस्तेमाल करके, Google Play Console में लॉग इन करें.
  2. ऐप्लिकेशन बनाएं पर क्लिक करें. इससे ऐप्लिकेशन बनाएं पेज खुलता है.
  3. ऐप्लिकेशन का नाम डालें, डिफ़ॉल्ट भाषा चुनें, और ऐप्लिकेशन से जुड़ी अन्य जानकारी डालें.
  4. ऐप्लिकेशन बनाएं पर क्लिक करें. इससे Google Play Console में एक ऐप्लिकेशन बन जाएगा.

अब सैंपल ऐप्लिकेशन का साइन किया गया ऐप्लिकेशन बंडल अपलोड किया जा सकता है.

साइन किया गया ऐप्लिकेशन बंडल अपलोड करना

  1. हस्ताक्षर किया गया ऐप्लिकेशन बंडल, Google Play Console के इंटरनल टेस्ट ट्रैक पर अपलोड करें. ऐप्लिकेशन अपलोड करने के बाद ही, Play Console में कमाई करने से जुड़ी सुविधाओं को कॉन्फ़िगर किया जा सकता है.
  2. जांच करें और रिलीज़ करें > टेस्टिंग > इंटरनल रिलीज़ > नई रिलीज़ बनाएं पर क्लिक करें.
  3. रिलीज़ का नाम डालें और हस्ताक्षर किया गया ऐप्लिकेशन बंडल अपलोड करें.
  4. आगे बढ़ें पर क्लिक करें. इसके बाद, सेव करें और पब्लिश करें पर क्लिक करें.

अब वन-टाइम प्रॉडक्ट बनाए जा सकते हैं.

वन-टाइम प्रॉडक्ट सेट करना

वन-टाइम प्रॉडक्ट सेट करने के लिए:

  1. Google Play Console में, बाईं ओर मौजूद नेविगेशन मेन्यू में जाकर, Google Play का इस्तेमाल करके कमाई करें > प्रॉडक्ट > वन-टाइम प्रॉडक्ट पर जाएं.
  2. वन-टाइम प्रॉडक्ट सेट करें पर क्लिक करें.
  3. प्रॉडक्ट की यह जानकारी डालें:
    • प्रॉडक्ट आईडी: कोई यूनीक प्रॉडक्ट आईडी डालें. one_time_product_01 डालें.
    • (ज़रूरी नहीं) टैग: काम के टैग जोड़ें.
    • नाम: प्रॉडक्ट का नाम डालें. उदाहरण के लिए, Product name.
    • ब्यौरा: प्रॉडक्ट का ब्यौरा डालें. उदाहरण के लिए, Product description.
    • (ज़रूरी नहीं है) आइकॉन इमेज जोड़ें: अपने प्रॉडक्ट को दिखाने वाला आइकॉन अपलोड करें.
    ध्यान दें: इस कोडलैब के लिए, टैक्स, उससे जुड़े नियमों का पालन, और प्रोग्राम सेक्शन को कॉन्फ़िगर करने की ज़रूरत नहीं है.
  4. आगे बढ़ें पर क्लिक करें.
  5. खरीदारी का विकल्प जोड़ें और कॉन्फ़िगर करें कि वह किस देश/इलाके में उपलब्ध है. वन-टाइम प्रॉडक्ट के लिए, खरीदारी का कम से कम एक विकल्प सेट करना ज़रूरी है. इससे यह तय किया जा सकता है कि किसी उपयोगकर्ता को प्रॉडक्ट का ऐक्सेस कैसे दिया जाए, कीमत क्या हो, और प्रॉडक्ट किस इलाके में उपलब्ध होगा. इस कोडलैब के लिए, हम प्रॉडक्ट के लिए स्टैंडर्ड खरीदें विकल्प जोड़ेंगे.खरीदारी का विकल्प सेक्शन में, यह जानकारी डालें:
    • खरीदारी के विकल्प का आईडी: खरीदारी के विकल्प का आईडी डालें. उदाहरण के लिए, buy.
    • खरीदारी का टाइप: खरीदें को चुनें.
    • (ज़रूरी नहीं) टैग: खरीदारी के इस विकल्प के लिए खास तौर पर टैग जोड़ें.
    • (ज़रूरी नहीं) ऐडवांस विकल्पों को कॉन्फ़िगर करने के लिए, ऐडवांस विकल्प पर क्लिक करें. इस कोडलैब के लिए, ऐडवांस विकल्पों के कॉन्फ़िगरेशन को स्किप किया जा सकता है.
  6. उपलब्धता और कीमत सेक्शन में जाकर, कीमतें तय करें > कीमतों में एक साथ बदलाव करें पर क्लिक करें.
  7. देश / इलाका विकल्प चुनें. इससे सभी इलाके चुने जाते हैं.
  8. जारी रखें पर क्लिक करें. इससे कीमत डालने के लिए एक डायलॉग बॉक्स खुलता है. 10 डॉलर डालें. इसके बाद, लागू करें पर क्लिक करें.
  9. सेव करें पर क्लिक करें. इसके बाद, चालू करें पर क्लिक करें. इससे खरीदारी का विकल्प बन जाता है और चालू हो जाता है.

इस कोडलैब के लिए, यहां दिए गए प्रॉडक्ट आईडी का इस्तेमाल करके, एक बार खरीदे जाने वाले तीन और प्रॉडक्ट बनाएं:

  • consumable_product_01
  • consumable_product_02
  • consumable_product_03

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

Google Play Console में सैंपल ऐप्लिकेशन खोलें. इसके बाद, Google Play का इस्तेमाल करके कमाई करें > प्रॉडक्ट > वन-टाइम प्रॉडक्ट पर जाएं. इसके बाद, वन-टाइम प्रॉडक्ट सेट करें पर क्लिक करें और चरण 3 से 9 को दोहराएं.

वन-टाइम प्रॉडक्ट बनाने के बारे में वीडियो

यहां दिए गए सैंपल वीडियो में, प्रॉडक्ट बनाने के एक बार के चरणों को दिखाया गया है. इनके बारे में पहले बताया जा चुका है.

4. पीबीएल के साथ इंटिग्रेट करना

अब हम देखेंगे कि अपने ऐप्लिकेशन को Play Billing Library (पीबीएल) से कैसे इंटिग्रेट किया जाता है. इस सेक्शन में, इंटिग्रेशन के लिए ज़रूरी चरणों के बारे में बताया गया है. साथ ही, हर चरण के लिए कोड स्निपेट दिया गया है. इन स्निपेट का इस्तेमाल, अपने इंटिग्रेशन को लागू करने के लिए दिशा-निर्देश के तौर पर किया जा सकता है.

अपने ऐप्लिकेशन को PBL के साथ इंटिग्रेट करने के लिए, यह तरीका अपनाएं:

  1. सैंपल ऐप्लिकेशन में Play Billing Library की डिपेंडेंसी जोड़ें.
    dependencies {
    val billing_version = "8.0.0"
    
    implementation("com.android.billingclient:billing-ktx:$billing_version")
    }
    
  2. BillingClient को शुरू करें. BillingClient, क्लाइंट SDK टूल है. यह आपके ऐप्लिकेशन पर मौजूद होता है और Play Billing Library से कम्यूनिकेट करता है. यहां दिए गए कोड स्निपेट में, बिलिंग क्लाइंट को शुरू करने का तरीका बताया गया है.
    protected BillingClient createBillingClient() {
    return BillingClient.newBuilder(activity)
        .setListener(purchasesUpdatedListener)
        .enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())
        .enableAutoServiceReconnection()
        .build();
    }
    
  3. Google Play से कनेक्ट करें.नीचे दिए गए कोड स्निपेट से पता चलता है कि Google Play से कैसे कनेक्ट किया जाता है.
    public void startBillingConnection(ImmutableList<Product> productList) {
    Log.i(TAG, "Product list sent: " + productList);
    Log.i(TAG, "Starting connection");
    billingClient.startConnection(
        new BillingClientStateListener() {
          @Override
          public void onBillingSetupFinished(BillingResult billingResult) {
            if (billingResult.getResponseCode() == BillingResponseCode.OK) {
              // Query product details to get the product details list.
              queryProductDetails(productList);
            } else {
              // BillingClient.enableAutoServiceReconnection() will retry the connection on
              // transient errors automatically.
              // We don't need to retry on terminal errors (e.g., BILLING_UNAVAILABLE,
              // DEVELOPER_ERROR).
              Log.e(TAG, "Billing connection failed: " + billingResult.getDebugMessage());
              Log.e(TAG, "Billing response code: " + billingResult.getResponseCode());
            }
          }
    
          @Override
          public void onBillingServiceDisconnected() {
            Log.e(TAG, "Billing Service connection lost.");
          }
        });
    }
    
  4. वन-टाइम प्रॉडक्ट की जानकारी फ़ेच करें.अपने ऐप्लिकेशन को PBL के साथ इंटिग्रेट करने के बाद, आपको अपने ऐप्लिकेशन में वन-टाइम प्रॉडक्ट की जानकारी फ़ेच करनी होगी. यहां दिए गए कोड स्निपेट में बताया गया है कि अपने ऐप्लिकेशन में वन-टाइम प्रॉडक्ट की जानकारी कैसे फ़ेच करें.
    private void queryProductDetails(ImmutableList<Product> productList) {
    Log.i(TAG, "Querying products for: " + productList);
    QueryProductDetailsParams queryProductDetailsParams =
        QueryProductDetailsParams.newBuilder().setProductList(productList).build();
    billingClient.queryProductDetailsAsync(
        queryProductDetailsParams,
        new ProductDetailsResponseListener() {
          @Override
          public void onProductDetailsResponse(
              BillingResult billingResult, QueryProductDetailsResult productDetailsResponse) {
            // check billingResult
            Log.i(TAG, "Billing result after querying: " + billingResult.getResponseCode());
            // process returned productDetailsList
            Log.i(
                TAG,
                "Print unfetched products: " + productDetailsResponse.getUnfetchedProductList());
            setupProductDetailsMap(productDetailsResponse.getProductDetailsList());
            billingServiceClientListener.onProductDetailsFetched(productDetailsMap);
          }
        });
    }
    
    ProductDetails को फ़ेच करने पर, आपको इस तरह का जवाब मिलता है:
    {
        "productId": "consumable_product_01",
        "type": "inapp",
        "title": "Shadow Coat (Yolo's Realm | Play Samples)",
        "name": "Shadow Coat",
        "description": "A sleek, obsidian coat for stealth and ambushes",
        "skuDetailsToken": "<---skuDetailsToken--->",
        "oneTimePurchaseOfferDetails": {},
        "oneTimePurchaseOfferDetailsList": [
            {
                "priceAmountMicros": 1990000,
                "priceCurrencyCode": "USD",
                "formattedPrice": "$1.99",
                "offerIdToken": "<--offerIdToken-->",
                "purchaseOptionId": "buy",
                "offerTags": []
            }
        ]
    },
    {
        "productId": "consumable_product_02",
        "type": "inapp",
        "title": "Emperor Den (Yolo's Realm | Play Samples)",
        "name": "Emperor Den",
        "description": "A fair lair glowing with molten rock and embers",
        "skuDetailsToken": "<---skuDetailsToken--->",
        "oneTimePurchaseOfferDetails": {},
        "oneTimePurchaseOfferDetailsList": [
            {
                "priceAmountMicros": 2990000,
                "priceCurrencyCode": "USD",
                "formattedPrice": "$2.99",
                "offerIdToken": "<--offerIdToken-->",
                "purchaseOptionId": "buy",
                "offerTags": []
            }
        ]
    }
    
  5. बिलिंग फ़्लो लॉन्च करें.
    public void launchBillingFlow(String productId) {
    ProductDetails productDetails = productDetailsMap.get(productId);
    if (productDetails == null) {
      Log.e(
          TAG, "Cannot launch billing flow: ProductDetails not found for productId: " + productId);
      billingServiceClientListener.onBillingResponse(
          BillingResponseCode.ITEM_UNAVAILABLE,
          BillingResult.newBuilder().setResponseCode(BillingResponseCode.ITEM_UNAVAILABLE).build());
      return;
    }
    ImmutableList<ProductDetailsParams> productDetailsParamsList =
        ImmutableList.of(
            ProductDetailsParams.newBuilder().setProductDetails(productDetails).build());
    
    BillingFlowParams billingFlowParams =
        BillingFlowParams.newBuilder()
            .setProductDetailsParamsList(productDetailsParamsList)
            .build();
    
    billingClient.launchBillingFlow(activity, billingFlowParams);
    }
    
  6. खरीदारी का पता लगाना और उसे प्रोसेस करना. इस चरण के तहत, आपको ये काम करने होंगे:
    1. खरीदारी की पुष्टि करना
    2. उपयोगकर्ता को ऐक्सेस देना
    3. उपयोगकर्ता को सूचना देना
    4. Google को खरीदारी की प्रोसेस के बारे में सूचना देना
    इनमें से, a, b, और c चरणों को आपके बैकएंड में पूरा किया जाना चाहिए. इसलिए, ये इस कोडलैब के दायरे से बाहर हैं. यहां दिए गए स्निपेट में बताया गया है कि एक बार इस्तेमाल किए जा सकने वाले प्रॉडक्ट के बारे में Google को कैसे सूचना दी जाती है:
    private void handlePurchase(Purchase purchase) {
    // Step 1: Send the purchase to your secure backend to verify the purchase following
    // https://developer.android.com/google/play/billing/security#verify
    
    // Step 2: Update your entitlement storage with the purchase. If purchase is
    // in PENDING state then ensure the entitlement is marked as pending and the
    // user does not receive benefits yet. It is recommended that this step is
    // done on your secure backend and can combine in the API call to your
    // backend in step 1.
    
    // Step 3: Notify the user using appropriate messaging.
    if (purchase.getPurchaseState() == PurchaseState.PURCHASED) {
      for (String product : purchase.getProducts()) {
        Log.d(TAG, product + " purchased successfully! ");
      }
    }
    
    // Step 4: Notify Google the purchase was processed.
    // For one-time products, acknowledge the purchase.
    // This sample app (client-only) uses billingClient.acknowledgePurchase().
    // For consumable one-time products, consume the purchase
    // This sample app (client-only) uses billingClient.consumeAsync()
    // If you have a secure backend, you must acknowledge purchases on your server using the
    // server-side API.
    // See https://developer.android.com/google/play/billing/security#acknowledge
    if (purchase.getPurchaseState() == PurchaseState.PURCHASED && !purchase.isAcknowledged()) {
    
      if (shouldConsume(purchase)) {
        ConsumeParams consumeParams =
            ConsumeParams.newBuilder().setPurchaseToken(purchase.getPurchaseToken()).build();
        billingClient.consumeAsync(consumeParams, consumeResponseListener);
    
      } else {
        AcknowledgePurchaseParams acknowledgePurchaseParams =
            AcknowledgePurchaseParams.newBuilder()
                .setPurchaseToken(purchase.getPurchaseToken())
                .build();
        billingClient.acknowledgePurchase(
            acknowledgePurchaseParams, acknowledgePurchaseResponseListener);
      }
     }
    }
    

5. खरीदारी के दौरान उपयोगकर्ताओं के रुक जाने का विश्लेषण करना

अब तक इस कोडलैब में, Play Billing के जवाबों में कुछ ही स्थितियों पर फ़ोकस किया गया है. जैसे, USER_CANCELLED, BILLING_UNAVAILABLE, OK, और ITEM_ALREADY_OWNED जवाब. हालांकि, Play Billing 13 अलग-अलग रिस्पॉन्स कोड दिखा सकता है. ये कोड, असल दुनिया की अलग-अलग स्थितियों की वजह से ट्रिगर हो सकते हैं.

इस सेक्शन में, USER_CANCELLED और BILLING_UNAVAILABLE से जुड़ी गड़बड़ियों के बारे में बताया गया है. साथ ही, इन गड़बड़ियों को ठीक करने के लिए कुछ सुझाव दिए गए हैं.

USER_CANCELED रिस्पॉन्स से जुड़ी गड़बड़ी का कोड

इस रिस्पॉन्स कोड से पता चलता है कि उपयोगकर्ता ने खरीदारी पूरी करने से पहले ही, खरीदारी के फ़्लो वाले यूज़र इंटरफ़ेस (यूआई) को बंद कर दिया है.

संभावित वजहें

आपके पास कौन-कौनसी कार्रवाइयां करने की सुविधा है?

  • इससे पता चलता है कि कीमत के बारे में ज़्यादा सोचने वाले लोगों की दिलचस्पी कम है.
  • खरीदारी पूरी नहीं हुई है या पेमेंट अस्वीकार कर दिया गया है.

BILLING_UNAVAILABLE रिस्पॉन्स की गड़बड़ी का कोड

इस जवाब कोड का मतलब है कि उपयोगकर्ता के पेमेंट की सेवा देने वाली कंपनी या उसके चुने गए पेमेंट के तरीके में कोई समस्या होने की वजह से, खरीदारी पूरी नहीं की जा सकी. उदाहरण के लिए, उपयोगकर्ता के क्रेडिट कार्ड की समयसीमा खत्म हो गई है या उपयोगकर्ता ऐसे देश में है जहां यह सुविधा काम नहीं करती. इस कोड से यह पता नहीं चलता कि Play Billing सिस्टम में कोई गड़बड़ी है.

संभावित वजहें

आपके पास कौन-कौनसी कार्रवाइयां करने की सुविधा है?

  • उपयोगकर्ता के डिवाइस पर Play Store ऐप्लिकेशन का पुराना वर्शन है.
  • उपयोगकर्ता किसी ऐसे देश में है जहां Play की सुविधा उपलब्ध नहीं है.
  • उपयोगकर्ता एंटरप्राइज़ उपयोगकर्ता है और उसके एंटरप्राइज़ एडमिन ने उपयोगकर्ताओं के लिए खरीदारी करने की सुविधा बंद कर दी है.
  • Google Play, उपयोगकर्ता के पेमेंट के तरीके से शुल्क नहीं ले पा रहा है. उदाहरण के लिए, ऐसा हो सकता है कि उपयोगकर्ता के क्रेडिट कार्ड की समयसीमा खत्म हो गई हो.
  • सिस्टम से जुड़ी समस्याओं और खास क्षेत्रों के रुझानों पर नज़र रखना
  • PBL 8 पर माइग्रेट करें, क्योंकि यह PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS सब-रिस्पॉन्स कोड के साथ काम करता है. अगर आपको यह रिस्पॉन्स कोड मिलता है, तो उपयोगकर्ताओं को पेमेंट पूरा न होने की सूचना दें या उन्हें पेमेंट के दूसरे तरीके सुझाएं.
  • इस रिस्पॉन्स कोड को फिर से कोशिश करने के लिए डिज़ाइन किया गया है. इससे आपको फिर से कोशिश करने की सही रणनीतियां लागू करने में मदद मिलती है.
    इस मामले में, अपने-आप फिर से कोशिश करने की सुविधा से मदद नहीं मिलेगी. हालांकि, अगर उपयोगकर्ता उस समस्या को ठीक कर लेता है जिसकी वजह से अनुरोध पूरा नहीं किया जा सका, तो मैन्युअल तरीके से फिर से कोशिश करने पर अनुरोध पूरा किया जा सकता है. उदाहरण के लिए, अगर उपयोगकर्ता Play Store के वर्शन को ऐसे वर्शन पर अपडेट करता है जिस पर यह सुविधा काम करती है, तो शुरुआती कार्रवाई को मैन्युअल तरीके से फिर से आज़माया जा सकता है.

    अगर उपयोगकर्ता के सेशन में न होने पर आपको यह जवाब कोड मिलता है, तो फिर से कोशिश करने से कोई फ़ायदा नहीं होगा. जब आपको खरीदारी के फ़्लो के दौरान `BILLING_UNAVAILABLE` जवाब मिलता है, तो ऐसा हो सकता है कि उपयोगकर्ता को खरीदारी के दौरान Google Play से कोई सूचना मिली हो. साथ ही, उसे यह भी पता हो कि क्या गड़बड़ी हुई है. ऐसे में, गड़बड़ी का मैसेज दिखाया जा सकता है. साथ ही, `फिर से कोशिश करें` बटन दिया जा सकता है, ताकि उपयोगकर्ता समस्या ठीक करने के बाद, मैन्युअल तरीके से फिर से कोशिश कर सके.

रिस्पॉन्स के गड़बड़ी कोड के लिए, फिर से कोशिश करने की रणनीतियां

Play Billing Library (PBL) से ठीक की जा सकने वाली गड़बड़ियों के लिए, फिर से कोशिश करने की असरदार रणनीतियां, कॉन्टेक्स्ट के हिसाब से अलग-अलग होती हैं. जैसे, सेशन में मौजूद उपयोगकर्ता के इंटरैक्शन (जैसे, खरीदारी के दौरान) बनाम बैकग्राउंड में होने वाली कार्रवाइयां (जैसे, ऐप्लिकेशन फिर से शुरू होने पर खरीदारी के बारे में क्वेरी करना). इन रणनीतियों को लागू करना ज़रूरी है, क्योंकि कुछ BillingResponseCode वैल्यू से पता चलता है कि कुछ समय के लिए समस्याएं आई हैं. इन्हें फिर से कोशिश करके ठीक किया जा सकता है. वहीं, कुछ वैल्यू से पता चलता है कि समस्याएं हमेशा के लिए हैं और इन्हें ठीक करने के लिए फिर से कोशिश करने की ज़रूरत नहीं है.

जब उपयोगकर्ता सेशन में हो, तब आने वाली गड़बड़ियों के लिए, फिर से कोशिश करने की आसान रणनीति का इस्तेमाल करना चाहिए. साथ ही, कोशिशों की ज़्यादा से ज़्यादा संख्या तय करनी चाहिए, ताकि उपयोगकर्ता अनुभव में रुकावट कम से कम हो. इसके उलट, बैकग्राउंड में होने वाली कार्रवाइयों के लिए एक्सपोनेंशियल बैकऑफ़ का इस्तेमाल करने का सुझाव दिया जाता है. जैसे, नई खरीदारी की पुष्टि करना. इसके लिए, तुरंत कार्रवाई करने की ज़रूरत नहीं होती.

खास रिस्पॉन्स कोड और उनके हिसाब से फिर से कोशिश करने की सुझाई गई रणनीतियों के बारे में ज़्यादा जानने के लिए, BillingResult रिस्पॉन्स कोड मैनेज करना लेख पढ़ें.

6. अगले चरण

रेफ़रंस दस्तावेज़

7. बधाई हो!

बधाई हो! आपने Google Play Console का इस्तेमाल करके, एक बार इस्तेमाल किया जा सकने वाला नया प्रॉडक्ट बनाया है. साथ ही, बिलिंग के जवाब वाले कोड की जांच की है और खरीदारी में दिलचस्पी दिखाने वाले लोगों की संख्या में आई गिरावट का विश्लेषण किया है.

सर्वे

इस कोडलैब के बारे में आपके सुझाव, शिकायत या राय हमारे लिए बहुत अहम है. कृपया कुछ समय निकालकर, हमारे सर्वे में हिस्सा लें.