1. परिचय
इस कोडलैब में, आपको वन-टाइम प्रॉडक्ट बनाने, अपने ऐप्लिकेशन को Play Billing Library (पीबीएल) के साथ इंटिग्रेट करने, और खरीदारी में गिरावट की वजहों का विश्लेषण करने पर फ़ोकस करना होगा.
दर्शक
यह कोडलैब, Android ऐप्लिकेशन डेवलपर के लिए है. ये डेवलपर, Play Billing Library (PBL) का इस्तेमाल कर रहे हैं या वन-टाइम प्रॉडक्ट से कमाई करने के लिए PBL का इस्तेमाल करना चाहते हैं.
आपको यह जानकारी मिलेगी...
- Google Play Console में वन-टाइम प्रॉडक्ट बनाने का तरीका.
- अपने ऐप्लिकेशन को पीबीएल के साथ इंटिग्रेट करने का तरीका.
- पीबीएल में, इस्तेमाल किए जा सकने वाले और इस्तेमाल न किए जा सकने वाले वन-टाइम प्रॉडक्ट की खरीदारी को प्रोसेस करने का तरीका.
- खरीदारी के दौरान होने वाली रुकावटों का विश्लेषण कैसे करें.
आपको इन चीज़ों की ज़रूरत होगी...
- डेवलपर खाते से Google Play Console का ऐक्सेस. अगर आपके पास डेवलपर खाता नहीं है, तो आपको एक खाता बनाना होगा.
- इस कोडलैब के लिए एक सैंपल ऐप्लिकेशन, जिसे GitHub से डाउनलोड किया जा सकता है.
- Android Studio.
2. सैंपल ऐप्लिकेशन बनाना
सैंपल ऐप्लिकेशन को पूरी तरह से काम करने वाले Android ऐप्लिकेशन के तौर पर डिज़ाइन किया गया है. इसमें पूरा सोर्स कोड है, जो इन पहलुओं को दिखाता है:
- ऐप्लिकेशन को पीबीएल के साथ इंटिग्रेट करना
- वन-टाइम प्रॉडक्ट फ़ेच करना
- वन-टाइम प्रॉडक्ट के लिए खरीदारी के फ़्लो लॉन्च करना
- खरीदारी के ऐसे उदाहरण जिनसे बिलिंग के ये जवाब मिलते हैं:
BILLING_UNAVAILABLE
USER_CANCELLED
OK
ITEM_ALREADY_OWNED
नीचे दिए गए डेमो वीडियो में दिखाया गया है कि सैंपल ऐप्लिकेशन को डिप्लॉय और चलाने के बाद, वह कैसा दिखेगा और कैसे काम करेगा.
ज़रूरी शर्तें
संपल ऐप्लिकेशन बनाने और उसे डिप्लॉय करने से पहले, ये काम करें:
- Google Play Console डेवलपर खाता बनाएं. अगर आपके पास पहले से ही डेवलपर खाता है, तो इस चरण को छोड़ दें.
- Play Console में नया ऐप्लिकेशन बनाएं. ऐप्लिकेशन बनाते समय, सैंपल ऐप्लिकेशन के लिए कोई भी नाम दिया जा सकता है.
- Android Studio इंस्टॉल करें.
बनाएं
बिल्ड के इस चरण का मकसद, सैंपल ऐप्लिकेशन की साइन की गई Android ऐप्लिकेशन बंडल फ़ाइल जनरेट करना है.
Android ऐप्लिकेशन बंडल जनरेट करने के लिए, यह तरीका अपनाएं:
- GitHub से सैंपल ऐप्लिकेशन डाउनलोड करें.
- सैंपल ऐप्लिकेशन बनाएं. सैंपल ऐप्लिकेशन बनाने से पहले, उसके पैकेज का नाम बदलें. इसके बाद, उसे बनाएं. अगर आपके Play Console खाते में अन्य ऐप्लिकेशन के पैकेज मौजूद हैं, तो पक्का करें कि सैंपल ऐप्लिकेशन के लिए दिया गया पैकेज का नाम यूनीक हो.
ध्यान दें: सैंपल ऐप्लिकेशन बनाने पर, सिर्फ़ एक APK फ़ाइल बनती है. इसका इस्तेमाल लोकल टेस्टिंग के लिए किया जा सकता है. हालांकि, ऐप्लिकेशन चलाने पर प्रॉडक्ट और उनकी कीमतें नहीं दिखती हैं. ऐसा इसलिए, क्योंकि Play Console में प्रॉडक्ट कॉन्फ़िगर नहीं किए गए हैं. इस कोडलैब में आगे आपको यह काम करना है. - हस्ताक्षर किया गया Android ऐप्लिकेशन बंडल जनरेट करें.
अगला चरण, Android ऐप्लिकेशन बंडल को Google Play Console पर अपलोड करना है.
3. Play Console में वन-टाइम प्रॉडक्ट बनाना
Google Play Console में एक बार खरीदे जाने वाले प्रॉडक्ट बनाने के लिए, आपके पास Play Console में कोई ऐप्लिकेशन होना चाहिए. Play Console में एक ऐप्लिकेशन बनाएं. इसके बाद, पहले से बनाए गए साइन किए गए ऐप्लिकेशन बंडल को अपलोड करें.
ऐप्लिकेशन बनाना
ऐप्लिकेशन बनाने के लिए:
- अपने डेवलपर खाते का इस्तेमाल करके, Google Play Console में लॉग इन करें.
- ऐप्लिकेशन बनाएं पर क्लिक करें. इससे ऐप्लिकेशन बनाएं पेज खुलता है.
- ऐप्लिकेशन का नाम डालें, डिफ़ॉल्ट भाषा चुनें, और ऐप्लिकेशन से जुड़ी अन्य जानकारी डालें.
- ऐप्लिकेशन बनाएं पर क्लिक करें. इससे Google Play Console में एक ऐप्लिकेशन बन जाएगा.
अब सैंपल ऐप्लिकेशन का साइन किया गया ऐप्लिकेशन बंडल अपलोड किया जा सकता है.
साइन किया गया ऐप्लिकेशन बंडल अपलोड करना
- हस्ताक्षर किया गया ऐप्लिकेशन बंडल, Google Play Console के इंटरनल टेस्ट ट्रैक पर अपलोड करें. ऐप्लिकेशन अपलोड करने के बाद ही, Play Console में कमाई करने से जुड़ी सुविधाओं को कॉन्फ़िगर किया जा सकता है.
- जांच करें और रिलीज़ करें > टेस्टिंग > इंटरनल रिलीज़ > नई रिलीज़ बनाएं पर क्लिक करें.
- रिलीज़ का नाम डालें और हस्ताक्षर किया गया ऐप्लिकेशन बंडल अपलोड करें.
- आगे बढ़ें पर क्लिक करें. इसके बाद, सेव करें और पब्लिश करें पर क्लिक करें.
अब वन-टाइम प्रॉडक्ट बनाए जा सकते हैं.
वन-टाइम प्रॉडक्ट सेट करना
वन-टाइम प्रॉडक्ट सेट करने के लिए:
- Google Play Console में, बाईं ओर मौजूद नेविगेशन मेन्यू में जाकर, Google Play का इस्तेमाल करके कमाई करें > प्रॉडक्ट > वन-टाइम प्रॉडक्ट पर जाएं.
- वन-टाइम प्रॉडक्ट सेट करें पर क्लिक करें.
- प्रॉडक्ट की यह जानकारी डालें:
- प्रॉडक्ट आईडी: कोई यूनीक प्रॉडक्ट आईडी डालें.
one_time_product_01
डालें. - (ज़रूरी नहीं) टैग: काम के टैग जोड़ें.
- नाम: प्रॉडक्ट का नाम डालें. उदाहरण के लिए,
Product name
. - ब्यौरा: प्रॉडक्ट का ब्यौरा डालें. उदाहरण के लिए,
Product description
. - (ज़रूरी नहीं है) आइकॉन इमेज जोड़ें: अपने प्रॉडक्ट को दिखाने वाला आइकॉन अपलोड करें.
- प्रॉडक्ट आईडी: कोई यूनीक प्रॉडक्ट आईडी डालें.
- आगे बढ़ें पर क्लिक करें.
- खरीदारी का विकल्प जोड़ें और कॉन्फ़िगर करें कि वह किस देश/इलाके में उपलब्ध है. वन-टाइम प्रॉडक्ट के लिए, खरीदारी का कम से कम एक विकल्प सेट करना ज़रूरी है. इससे यह तय किया जा सकता है कि किसी उपयोगकर्ता को प्रॉडक्ट का ऐक्सेस कैसे दिया जाए, कीमत क्या हो, और प्रॉडक्ट किस इलाके में उपलब्ध होगा. इस कोडलैब के लिए, हम प्रॉडक्ट के लिए स्टैंडर्ड खरीदें विकल्प जोड़ेंगे.खरीदारी का विकल्प सेक्शन में, यह जानकारी डालें:
- खरीदारी के विकल्प का आईडी: खरीदारी के विकल्प का आईडी डालें. उदाहरण के लिए,
buy
. - खरीदारी का टाइप: खरीदें को चुनें.
- (ज़रूरी नहीं) टैग: खरीदारी के इस विकल्प के लिए खास तौर पर टैग जोड़ें.
- (ज़रूरी नहीं) ऐडवांस विकल्पों को कॉन्फ़िगर करने के लिए, ऐडवांस विकल्प पर क्लिक करें. इस कोडलैब के लिए, ऐडवांस विकल्पों के कॉन्फ़िगरेशन को स्किप किया जा सकता है.
- खरीदारी के विकल्प का आईडी: खरीदारी के विकल्प का आईडी डालें. उदाहरण के लिए,
- उपलब्धता और कीमत सेक्शन में जाकर, कीमतें तय करें > कीमतों में एक साथ बदलाव करें पर क्लिक करें.
- देश / इलाका विकल्प चुनें. इससे सभी इलाके चुने जाते हैं.
- जारी रखें पर क्लिक करें. इससे कीमत डालने के लिए एक डायलॉग बॉक्स खुलता है. 10 डॉलर डालें. इसके बाद, लागू करें पर क्लिक करें.
- सेव करें पर क्लिक करें. इसके बाद, चालू करें पर क्लिक करें. इससे खरीदारी का विकल्प बन जाता है और चालू हो जाता है.
इस कोडलैब के लिए, यहां दिए गए प्रॉडक्ट आईडी का इस्तेमाल करके, एक बार खरीदे जाने वाले तीन और प्रॉडक्ट बनाएं:
- consumable_product_01
- consumable_product_02
- consumable_product_03
सैंपल ऐप्लिकेशन को इन प्रॉडक्ट आईडी का इस्तेमाल करने के लिए कॉन्फ़िगर किया गया है. आपके पास अलग-अलग प्रॉडक्ट आईडी देने का विकल्प होता है. ऐसे में, आपको सैंपल ऐप्लिकेशन में बदलाव करना होगा, ताकि आपके दिए गए प्रॉडक्ट आईडी का इस्तेमाल किया जा सके.
Google Play Console में सैंपल ऐप्लिकेशन खोलें. इसके बाद, Google Play का इस्तेमाल करके कमाई करें > प्रॉडक्ट > वन-टाइम प्रॉडक्ट पर जाएं. इसके बाद, वन-टाइम प्रॉडक्ट सेट करें पर क्लिक करें और चरण 3 से 9 को दोहराएं.
वन-टाइम प्रॉडक्ट बनाने के बारे में वीडियो
यहां दिए गए सैंपल वीडियो में, प्रॉडक्ट बनाने के एक बार के चरणों को दिखाया गया है. इनके बारे में पहले बताया जा चुका है.
4. पीबीएल के साथ इंटिग्रेट करना
अब हम देखेंगे कि अपने ऐप्लिकेशन को Play Billing Library (पीबीएल) से कैसे इंटिग्रेट किया जाता है. इस सेक्शन में, इंटिग्रेशन के लिए ज़रूरी चरणों के बारे में बताया गया है. साथ ही, हर चरण के लिए कोड स्निपेट दिया गया है. इन स्निपेट का इस्तेमाल, अपने इंटिग्रेशन को लागू करने के लिए दिशा-निर्देश के तौर पर किया जा सकता है.
अपने ऐप्लिकेशन को PBL के साथ इंटिग्रेट करने के लिए, यह तरीका अपनाएं:
- सैंपल ऐप्लिकेशन में Play Billing Library की डिपेंडेंसी जोड़ें.
dependencies { val billing_version = "8.0.0" implementation("com.android.billingclient:billing-ktx:$billing_version") }
- BillingClient को शुरू करें. BillingClient, क्लाइंट SDK टूल है. यह आपके ऐप्लिकेशन पर मौजूद होता है और Play Billing Library से कम्यूनिकेट करता है. यहां दिए गए कोड स्निपेट में, बिलिंग क्लाइंट को शुरू करने का तरीका बताया गया है.
protected BillingClient createBillingClient() { return BillingClient.newBuilder(activity) .setListener(purchasesUpdatedListener) .enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()) .enableAutoServiceReconnection() .build(); }
- 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."); } }); }
- वन-टाइम प्रॉडक्ट की जानकारी फ़ेच करें.अपने ऐप्लिकेशन को 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": [] } ] }
- बिलिंग फ़्लो लॉन्च करें.
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); }
- खरीदारी का पता लगाना और उसे प्रोसेस करना. इस चरण के तहत, आपको ये काम करने होंगे:
- खरीदारी की पुष्टि करना
- उपयोगकर्ता को ऐक्सेस देना
- उपयोगकर्ता को सूचना देना
- 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 Billing Library (PBL) से ठीक की जा सकने वाली गड़बड़ियों के लिए, फिर से कोशिश करने की असरदार रणनीतियां, कॉन्टेक्स्ट के हिसाब से अलग-अलग होती हैं. जैसे, सेशन में मौजूद उपयोगकर्ता के इंटरैक्शन (जैसे, खरीदारी के दौरान) बनाम बैकग्राउंड में होने वाली कार्रवाइयां (जैसे, ऐप्लिकेशन फिर से शुरू होने पर खरीदारी के बारे में क्वेरी करना). इन रणनीतियों को लागू करना ज़रूरी है, क्योंकि कुछ BillingResponseCode
वैल्यू से पता चलता है कि कुछ समय के लिए समस्याएं आई हैं. इन्हें फिर से कोशिश करके ठीक किया जा सकता है. वहीं, कुछ वैल्यू से पता चलता है कि समस्याएं हमेशा के लिए हैं और इन्हें ठीक करने के लिए फिर से कोशिश करने की ज़रूरत नहीं है.
जब उपयोगकर्ता सेशन में हो, तब आने वाली गड़बड़ियों के लिए, फिर से कोशिश करने की आसान रणनीति का इस्तेमाल करना चाहिए. साथ ही, कोशिशों की ज़्यादा से ज़्यादा संख्या तय करनी चाहिए, ताकि उपयोगकर्ता अनुभव में रुकावट कम से कम हो. इसके उलट, बैकग्राउंड में होने वाली कार्रवाइयों के लिए एक्सपोनेंशियल बैकऑफ़ का इस्तेमाल करने का सुझाव दिया जाता है. जैसे, नई खरीदारी की पुष्टि करना. इसके लिए, तुरंत कार्रवाई करने की ज़रूरत नहीं होती.
खास रिस्पॉन्स कोड और उनके हिसाब से फिर से कोशिश करने की सुझाई गई रणनीतियों के बारे में ज़्यादा जानने के लिए, BillingResult रिस्पॉन्स कोड मैनेज करना लेख पढ़ें.
6. अगले चरण
- Play की बिलिंग सिस्टम के साथ इंटिग्रेशन का ज़्यादा से ज़्यादा फ़ायदा पाने का तरीका जानें.
- जब उपयोगकर्ता इन प्रॉडक्ट को खरीदना शुरू कर दें, तब अपने सुरक्षित बैकएंड पर खरीदारी की पुष्टि करने और उन्हें प्रोसेस करने के सबसे सही तरीकों का पालन करना न भूलें.
रेफ़रंस दस्तावेज़
7. बधाई हो!
बधाई हो! आपने Google Play Console का इस्तेमाल करके, एक बार इस्तेमाल किया जा सकने वाला नया प्रॉडक्ट बनाया है. साथ ही, बिलिंग के जवाब वाले कोड की जांच की है और खरीदारी में दिलचस्पी दिखाने वाले लोगों की संख्या में आई गिरावट का विश्लेषण किया है.
सर्वे
इस कोडलैब के बारे में आपके सुझाव, शिकायत या राय हमारे लिए बहुत अहम है. कृपया कुछ समय निकालकर, हमारे सर्वे में हिस्सा लें.