Play Billing-এ পণ্য ক্রয়ের ড্রপ-অফ বিশ্লেষণ করুন

1. ভূমিকা

এই কোডল্যাবে আপনি একটি এককালীন পণ্য তৈরি, আপনার অ্যাপটিকে প্লে বিলিং লাইব্রেরি (PBL) এর সাথে একীভূত করার উপর মনোনিবেশ করবেন এবং ক্রয় ড্রপ-অফের কারণ বিশ্লেষণ করবেন।

পাঠকবর্গ

এই কোডল্যাবটি এমন অ্যান্ড্রয়েড অ্যাপ ডেভেলপারদের জন্য তৈরি যারা প্লে বিলিং লাইব্রেরি (PBL) ব্যবহার করছেন অথবা তাদের এককালীন পণ্য নগদীকরণের জন্য PBL ব্যবহার করতে চান।

তুমি যা শিখবে...

  • গুগল প্লে কনসোলে কীভাবে এককালীন পণ্য তৈরি করবেন।
  • আপনার অ্যাপটি PBL এর সাথে কীভাবে সংহত করবেন।
  • পিবিএল-এ কীভাবে ভোগ্যপণ্য এবং অভোগ্যপণ্য এককালীন ক্রয় প্রক্রিয়াজাত করবেন।
  • ক্রয়ের পতন কীভাবে বিশ্লেষণ করবেন।

তোমার যা লাগবে...

২. নমুনা অ্যাপ তৈরি করুন

নমুনা অ্যাপটি সম্পূর্ণরূপে কার্যকরী অ্যান্ড্রয়েড অ্যাপ হিসেবে ডিজাইন করা হয়েছে যার সম্পূর্ণ সোর্স কোড রয়েছে যা নিম্নলিখিত দিকগুলি প্রদর্শন করে:

  • অ্যাপটিকে PBL এর সাথে একীভূত করা
  • এককালীন পণ্য আনুন
  • এককালীন পণ্যের জন্য ক্রয় প্রবাহ চালু করুন
  • ক্রয়ের পরিস্থিতি যা নিম্নলিখিত বিলিং প্রতিক্রিয়াগুলির দিকে পরিচালিত করে:
    • BILLING_UNAVAILABLE
    • USER_CANCELLED
    • OK
    • ITEM_ALREADY_OWNED

নিচের ডেমো ভিডিওটিতে দেখানো হয়েছে যে নমুনা অ্যাপটি স্থাপন এবং চালানোর পরে কেমন দেখাবে এবং আচরণ করবে।

পূর্বশর্ত

নমুনা অ্যাপ তৈরি এবং স্থাপন করার আগে, নিম্নলিখিতগুলি করুন:

নির্মাণ করুন

এই বিল্ড ধাপের উদ্দেশ্য হল নমুনা অ্যাপের একটি স্বাক্ষরিত অ্যান্ড্রয়েড অ্যাপ বান্ডেল ফাইল তৈরি করা।

অ্যান্ড্রয়েড অ্যাপ বান্ডেল তৈরি করতে, নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করুন:

  1. GitHub থেকে নমুনা অ্যাপটি ডাউনলোড করুন।
  2. নমুনা অ্যাপ তৈরি করুন । তৈরি করার আগে, নমুনা অ্যাপের প্যাকেজ নাম পরিবর্তন করুন এবং তারপর তৈরি করুন। যদি আপনার Play Console-এ অন্যান্য অ্যাপের প্যাকেজ থাকে, তাহলে নিশ্চিত করুন যে নমুনা অ্যাপের জন্য আপনি যে প্যাকেজ নামটি দিয়েছেন তা অনন্য।

    দ্রষ্টব্য : নমুনা অ্যাপ তৈরি করলে কেবল একটি APK ফাইল তৈরি হয় যা আপনি স্থানীয় পরীক্ষার জন্য ব্যবহার করতে পারেন। তবে, অ্যাপটি চালানোর ফলে পণ্য এবং দাম পাওয়া যায় না কারণ পণ্যগুলি Play Console-এ কনফিগার করা হয়নি যা আপনি এই কোডল্যাবে আরও করবেন।
  3. একটি স্বাক্ষরিত অ্যান্ড্রয়েড অ্যাপ বান্ডেল তৈরি করুন।
    1. একটি আপলোড কী এবং কীস্টোর তৈরি করুন
    2. আপনার আপলোড কী দিয়ে অ্যাপে সাইন ইন করুন
    3. প্লে অ্যাপ সাইনিং কনফিগার করুন

পরবর্তী ধাপ হল গুগল প্লে কনসোলে অ্যান্ড্রয়েড অ্যাপ বান্ডেল আপলোড করা।

৩. প্লে কনসোলে এককালীন পণ্য তৈরি করুন

গুগল প্লে কনসোলে এককালীন পণ্য তৈরি করতে, আপনার প্লে কনসোলে একটি অ্যাপ থাকা দরকার। প্লে কনসোলে একটি অ্যাপ তৈরি করুন এবং তারপরে পূর্বে তৈরি স্বাক্ষরিত অ্যাপ বান্ডেলটি আপলোড করুন।

একটি অ্যাপ তৈরি করুন

একটি অ্যাপ তৈরি করতে:

  1. আপনার ডেভেলপার অ্যাকাউন্ট ব্যবহার করে গুগল প্লে কনসোলে লগ-ইন করুন।
  2. "অ্যাপ তৈরি করুন" এ ক্লিক করুন। এটি "অ্যাপ তৈরি করুন" পৃষ্ঠাটি খুলবে।
  3. একটি অ্যাপের নাম লিখুন, ডিফল্ট ভাষা নির্বাচন করুন এবং অ্যাপ সম্পর্কিত অন্যান্য বিবরণ দিন।
  4. অ্যাপ তৈরি করুন এ ক্লিক করুন। এটি গুগল প্লে কনসোলে একটি অ্যাপ তৈরি করে।

এখন আপনি নমুনা অ্যাপের স্বাক্ষরিত অ্যাপ বান্ডিলটি আপলোড করতে পারেন।

স্বাক্ষরিত অ্যাপ বান্ডেলটি আপলোড করুন

  1. স্বাক্ষরিত অ্যাপ বান্ডেলটি Google Play-এর কনসোলের অভ্যন্তরীণ পরীক্ষামূলক ট্র্যাকে আপলোড করুন । আপলোড করার পরেই, আপনি Play Console-এ নগদীকরণ সম্পর্কিত বৈশিষ্ট্যগুলি কনফিগার করতে পারবেন।
  2. পরীক্ষা এবং প্রকাশ > পরীক্ষা > অভ্যন্তরীণ প্রকাশ > নতুন প্রকাশ তৈরি করুন ক্লিক করুন।
  3. একটি রিলিজের নাম লিখুন এবং স্বাক্ষরিত অ্যাপ বান্ডেল ফাইলটি আপলোড করুন।
  4. পরবর্তী ক্লিক করুন, এবং তারপর সংরক্ষণ করুন এবং প্রকাশ করুন ক্লিক করুন।

এখন, আপনি আপনার এককালীন পণ্য তৈরি করতে পারেন।

এককালীন পণ্য তৈরি করুন

এককালীন পণ্য তৈরি করতে:

  1. Google Play Console- এ, বাম দিকের নেভিগেশন মেনু থেকে, Monetize with Play > Products > One-time products- এ যান।
  2. এককালীন পণ্য তৈরি করুন ক্লিক করুন।
  3. নিম্নলিখিত পণ্যের বিবরণ লিখুন:
    • পণ্য আইডি: একটি অনন্য পণ্য আইডি লিখুন। one_time_product_01 লিখুন।
    • (ঐচ্ছিক) ট্যাগ: প্রাসঙ্গিক ট্যাগ যোগ করুন।
    • নাম: একটি পণ্যের নাম লিখুন। উদাহরণস্বরূপ, Product name
    • বর্ণনা: একটি পণ্যের বিবরণ লিখুন। উদাহরণস্বরূপ, Product description
    • (ঐচ্ছিক) একটি আইকন ছবি যোগ করুন: আপনার পণ্যের প্রতিনিধিত্ব করে এমন একটি আইকন আপলোড করুন।
    দ্রষ্টব্য: এই কোডল্যাবের উদ্দেশ্যে, আপনি ট্যাক্স, কমপ্লায়েন্স এবং প্রোগ্রাম বিভাগটি কনফিগার করা এড়িয়ে যেতে পারেন।
  4. পরবর্তী ক্লিক করুন।
  5. একটি ক্রয় বিকল্প যোগ করুন এবং এর আঞ্চলিক প্রাপ্যতা কনফিগার করুন। একটি এককালীন পণ্যের জন্য কমপক্ষে একটি ক্রয় বিকল্প প্রয়োজন, যা এনটাইটেলমেন্ট কীভাবে প্রদান করা হয়, এর দাম এবং আঞ্চলিক প্রাপ্যতা নির্ধারণ করে। এই কোডল্যাবের জন্য, আমরা পণ্যের জন্য স্ট্যান্ডার্ড ক্রয় বিকল্প যোগ করব । ক্রয় বিকল্প বিভাগে, নিম্নলিখিত বিবরণ লিখুন:
    • ক্রয় বিকল্প আইডি: একটি ক্রয় বিকল্প আইডি লিখুন। উদাহরণস্বরূপ, buy
    • ক্রয়ের ধরণ: কিনুন নির্বাচন করুন।
    • (ঐচ্ছিক) ট্যাগ: এই ক্রয় বিকল্পের জন্য নির্দিষ্ট ট্যাগ যোগ করুন।
    • (ঐচ্ছিক) উন্নত বিকল্পগুলি কনফিগার করতে উন্নত বিকল্পগুলিতে ক্লিক করুন। এই কোডল্যাবের উদ্দেশ্যে, আপনি উন্নত বিকল্পগুলি কনফিগারেশন এড়িয়ে যেতে পারেন।
  6. প্রাপ্যতা এবং মূল্য নির্ধারণ বিভাগে, দাম নির্ধারণ করুন > বাল্ক মূল্য সম্পাদনা করুন ক্লিক করুন।
  7. দেশ / অঞ্চল বিকল্পটি নির্বাচন করুন। এটি সমস্ত অঞ্চল নির্বাচন করে।
  8. Continue এ ক্লিক করুন। এটি একটি মূল্য প্রবেশ করানোর জন্য একটি ডায়ালগ খুলবে। 10 USD লিখুন এবং তারপর Apply এ ক্লিক করুন।
  9. সংরক্ষণ করুন ক্লিক করুন এবং তারপর সক্রিয় করুন ক্লিক করুন। এটি ক্রয় বিকল্প তৈরি এবং সক্রিয় করে।

এই কোডল্যাবের উদ্দেশ্যে, নিম্নলিখিত পণ্য আইডি ব্যবহার করে আরও ৩টি এককালীন পণ্য তৈরি করুন:

  • ভোগ্যপণ্য_01
  • ভোগ্যপণ্য_02
  • ভোগ্যপণ্য_০৩

নমুনা অ্যাপটি এই পণ্য আইডিগুলি ব্যবহার করার জন্য কনফিগার করা হয়েছে। আপনি বিভিন্ন পণ্য আইডি প্রদান করতে পারেন, সেক্ষেত্রে, আপনার প্রদত্ত পণ্য আইডি ব্যবহার করার জন্য আপনাকে নমুনা অ্যাপটি পরিবর্তন করতে হবে।

Google Play Console- এ নমুনা অ্যাপটি খুলুন এবং Play > Products > One-time products -এ যান। তারপর Create one-time product-এ ক্লিক করুন এবং ৩ থেকে ৯ ধাপ পুনরাবৃত্তি করুন।

একবার ব্যবহারযোগ্য পণ্য তৈরির ভিডিও

নিম্নলিখিত নমুনা ভিডিওটিতে পূর্বে বর্ণিত এককালীন পণ্য তৈরির ধাপগুলি দেখানো হয়েছে।

৪. PBL এর সাথে একীভূত করুন

এখন, আমরা দেখব কিভাবে আপনার অ্যাপটিকে Play Billing Library (PBL) এর সাথে একীভূত করবেন। এই বিভাগটি ইন্টিগ্রেশনের জন্য উচ্চ স্তরের ধাপগুলি বর্ণনা করে এবং প্রতিটি ধাপের জন্য একটি কোড স্নিপেট প্রদান করে। আপনি আপনার প্রকৃত ইন্টিগ্রেশন বাস্তবায়নের জন্য এই স্নিপেটগুলি একটি নির্দেশিকা হিসাবে ব্যবহার করতে পারেন।

আপনার অ্যাপটিকে 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. গুগল প্লেতে সংযোগ করুন। নিম্নলিখিত কোড স্নিপেটটি গুগল প্লেতে কীভাবে সংযোগ করবেন তা দেখায়।
    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);
      }
     }
    }
    

৫. ক্রয়ের ড্রপ-অফ বিশ্লেষণ করুন

কোডল্যাবে এখন পর্যন্ত, Play Billing-এর প্রতিক্রিয়াগুলি USER_CANCELLED , BILLING_UNAVAILABLE , OK , এবং ITEM_ALREADY_OWNED প্রতিক্রিয়াগুলির মতো সীমিত পরিস্থিতিতে ফোকাস করেছে। তবে, Play Billing ১৩টি ভিন্ন প্রতিক্রিয়া কোড ফেরত দিতে পারে যা বিভিন্ন বাস্তব-বিশ্বের কারণ দ্বারা ট্রিগার করা যেতে পারে।

এই বিভাগটি USER_CANCELLED এবং BILLING_UNAVAILABLE ত্রুটির প্রতিক্রিয়াগুলির কারণগুলি বিস্তারিতভাবে বর্ণনা করে এবং সম্ভাব্য সংশোধনমূলক পদক্ষেপগুলির পরামর্শ দেয় যা আপনি বাস্তবায়ন করতে পারেন।

USER_CANCELED প্রতিক্রিয়া ত্রুটি কোড

এই প্রতিক্রিয়া কোডটি নির্দেশ করে যে ব্যবহারকারী ক্রয় সম্পূর্ণ করার আগেই ক্রয় প্রবাহ UI পরিত্যাগ করেছেন।

সম্ভাব্য কারণ

আপনি কী কী পদক্ষেপ নিতে পারেন?

  • দামের প্রতি সংবেদনশীল কম উদ্দেশ্যপ্রণোদিত ব্যবহারকারীদের নির্দেশ করতে পারে।
  • ক্রয়টি মুলতুবি আছে অথবা অর্থ প্রদান প্রত্যাখ্যান করা হয়েছে।

BILLING_UNAVAILABLE প্রতিক্রিয়া ত্রুটি কোড

এই প্রতিক্রিয়া কোডের অর্থ হল ব্যবহারকারীর পেমেন্ট প্রদানকারী বা তাদের নির্বাচিত পেমেন্ট পদ্ধতিতে কোনও সমস্যার কারণে কেনাকাটা সম্পন্ন করা যায়নি। উদাহরণস্বরূপ, ব্যবহারকারীর ক্রেডিট কার্ডের মেয়াদ শেষ হয়ে গেছে অথবা ব্যবহারকারী কোনও অসমর্থিত দেশে আছেন। এই কোডটি Play Billing সিস্টেমে কোনও ত্রুটি নির্দেশ করে না।

সম্ভাব্য কারণ

আপনি কী কী পদক্ষেপ নিতে পারেন?

  • ব্যবহারকারীর ডিভাইসে থাকা প্লে স্টোর অ্যাপটি পুরনো।
  • ব্যবহারকারী এমন একটি দেশে আছেন যেখানে Play সমর্থিত নয়।
  • ব্যবহারকারী একজন এন্টারপ্রাইজ ব্যবহারকারী, এবং তাদের এন্টারপ্রাইজ প্রশাসক ব্যবহারকারীদের কেনাকাটা করতে অক্ষম করেছেন।
  • Google Play ব্যবহারকারীর পেমেন্ট পদ্ধতি থেকে চার্জ করতে পারছে না। উদাহরণস্বরূপ, ব্যবহারকারীর ক্রেডিট কার্ডের মেয়াদ শেষ হয়ে যেতে পারে।
  • সিস্টেম সমস্যা এবং নির্দিষ্ট অঞ্চলে প্রবণতা পর্যবেক্ষণ করুন।
  • PBL 8 -এ মাইগ্রেট করার কথা বিবেচনা করুন কারণ এটি আরও সূক্ষ্ম PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS সাব-রেসপন্স কোড সমর্থন করে। যদি আপনি এই রেসপন্স কোডটি পান, তাহলে ব্যবহারকারীদের ব্যর্থতার বিষয়ে অবহিত করার কথা বিবেচনা করুন অথবা বিকল্প পেমেন্ট পদ্ধতির পরামর্শ দিন।
  • এই প্রতিক্রিয়া কোডটি পুনঃচেষ্টার জন্য ডিজাইন করা হয়েছে, যা আপনাকে উপযুক্ত পুনঃচেষ্টা কৌশল বাস্তবায়নের সুযোগ দেয়।
    এই ক্ষেত্রে স্বয়ংক্রিয় পুনঃপ্রচেষ্টা সাহায্য করার সম্ভাবনা কম। তবে, ব্যবহারকারী যদি সমস্যার কারণ হিসেবে চিহ্নিত সমস্যাটি সমাধান করেন তবে ম্যানুয়াল পুনঃপ্রচেষ্টা সাহায্য করতে পারে। উদাহরণস্বরূপ, যদি ব্যবহারকারী তাদের প্লে স্টোর সংস্করণটি একটি সমর্থিত সংস্করণে আপডেট করেন, তাহলে প্রাথমিক ক্রিয়াকলাপের ম্যানুয়াল পুনঃপ্রচেষ্টা কাজ করতে পারে।

    ব্যবহারকারী যখন সেশনে নেই তখন যদি আপনি এই প্রতিক্রিয়া কোডটি পান, তাহলে পুনরায় চেষ্টা করার অর্থ নাও হতে পারে। ক্রয় প্রবাহের ফলে যখন আপনি `BILLING_UNAVAILABLE` প্রতিক্রিয়া পান, তখন খুব সম্ভবত ব্যবহারকারী ক্রয় প্রক্রিয়ার সময় Google Play থেকে প্রতিক্রিয়া পেয়েছেন এবং কী ভুল হয়েছে তা জানতে পারেন। এই ক্ষেত্রে, আপনি কিছু ভুল হয়েছে তা উল্লেখ করে একটি ত্রুটি বার্তা দেখাতে পারেন এবং ব্যবহারকারীকে সমস্যাটি সমাধান করার পরে ম্যানুয়াল পুনরায় চেষ্টা করার বিকল্প দেওয়ার জন্য ``আবার চেষ্টা করুন'' বোতামটি অফার করতে পারেন।

প্রতিক্রিয়া ত্রুটি কোডগুলির জন্য পুনরায় চেষ্টা করার কৌশলগুলি

Play Billing Library (PBL) থেকে পুনরুদ্ধারযোগ্য ত্রুটির জন্য কার্যকর পুনঃচেষ্টা কৌশলগুলি ব্যবহারকারী-ইন-সেশন ইন্টারঅ্যাকশন (যেমন কেনাকাটার সময়) বনাম ব্যাকগ্রাউন্ড অপারেশন (যেমন অ্যাপ রিজিউমে কেনাকাটা জিজ্ঞাসা করা) এর প্রেক্ষাপটের উপর নির্ভর করে পরিবর্তিত হয়। এই কৌশলগুলি বাস্তবায়ন করা গুরুত্বপূর্ণ কারণ কিছু BillingResponseCode মান অস্থায়ী সমস্যাগুলিকে নির্দেশ করে যা পুনরায় চেষ্টা করে সমাধান করা যেতে পারে, অন্যগুলি স্থায়ী এবং পুনরায় চেষ্টা করার প্রয়োজন হয় না।

ব্যবহারকারীর সেশন চলাকালীন ত্রুটির ক্ষেত্রে, ব্যবহারকারীর অভিজ্ঞতায় ব্যাঘাত কমাতে সর্বোচ্চ সংখ্যক প্রচেষ্টা সহ একটি সহজ পুনঃচেষ্টা কৌশল পরামর্শ দেওয়া হয়। বিপরীতে, নতুন ক্রয় স্বীকার করার মতো ব্যাকগ্রাউন্ড অপারেশনগুলির জন্য, যা তাৎক্ষণিকভাবে কার্যকর করার প্রয়োজন হয় না, সূচকীয় ব্যাকঅফ হল প্রস্তাবিত পদ্ধতি।

নির্দিষ্ট প্রতিক্রিয়া কোড এবং তাদের সংশ্লিষ্ট প্রস্তাবিত পুনঃচেষ্টা কৌশল সম্পর্কে বিস্তারিত তথ্যের জন্য, হ্যান্ডেল বিলিং রেজাল্ট প্রতিক্রিয়া কোডগুলি দেখুন।

৬. পরবর্তী পদক্ষেপ

রেফারেন্স ডক্স

৭. অভিনন্দন!

অভিনন্দন! আপনি Google Play Console-এ সফলভাবে নেভিগেট করেছেন, একটি নতুন এককালীন পণ্য তৈরি করেছেন, বিলিং প্রতিক্রিয়া কোড পরীক্ষা করেছেন, ক্রয়ের ড্রপ-অফ বিশ্লেষণ করেছেন।

জরিপ

এই কোডল্যাব সম্পর্কে আপনার মতামত অত্যন্ত মূল্যবান। আমাদের জরিপটি সম্পূর্ণ করতে কয়েক মিনিট সময় নেওয়ার কথা বিবেচনা করুন।