इस दस्तावेज़ में, Play Billing Library (पीबीएल) के साथ, वन-टाइम प्रॉडक्ट (ओटीपी) को इंटिग्रेट करने के बारे में जानकारी दी गई है. इसमें यह भी बताया गया है कि वन-टाइम प्रॉडक्ट से जुड़े, खरीदारी के अलग-अलग विकल्पों और ऑफ़र को कैसे इंटिग्रेट किया जाए.
वन-टाइम प्रॉडक्ट के लिए, खरीदारी के कई विकल्प और ऑफ़र कॉन्फ़िगर किए जा सकते हैं. उदाहरण के लिए, एक ही वन-टाइम प्रॉडक्ट के लिए, खरीदारी के विकल्प और प्री-ऑर्डर के ऑफ़र को कॉन्फ़िगर किया जा सकता है.
ज़रूरी शर्तें
वन-टाइम प्रॉडक्ट के लिए, एक से ज़्यादा ऑफ़र कॉन्फ़िगर करने के लिए, आपको
queryProductDetailsAsync() एपीआई का इस्तेमाल करना होगा. अब इस्तेमाल में नहीं लाए जाने वाले querySkuDetailsAsync() एपीआई का इस्तेमाल नहीं किया जा सकता.
queryProductDetailsAsync() का इस्तेमाल करने के तरीके और launchBillingFlow()
के उस वर्शन के बारे में जानने के लिए जो इनपुट के तौर पर ProductDetailsParams लेता है, माइग्रेशन के चरण देखें.
प्रॉडक्ट की जानकारी के लिए क्वेरी करना
अगर आपने वन-टाइम प्रॉडक्ट के लिए, एक से ज़्यादा ऑफ़र या खरीदारी के विकल्प कॉन्फ़िगर किए हैं, तो queryProductDetailsAsync() तरीके से दिखाए गए ProductDetails ऑब्जेक्ट में, हर वन-टाइम प्रॉडक्ट के लिए, खरीदारी और (या) किराये के एक से ज़्यादा विकल्प उपलब्ध हो सकते हैं. हर ProductDetails ऑब्जेक्ट के लिए, ज़रूरी शर्तें पूरी करने वाले सभी ऑफ़र की सूची पाने के लिए, getOneTimePurchaseOfferDetailsList() तरीके का इस्तेमाल करें. इस सूची में सिर्फ़ वे ऑफ़र और खरीदारी के विकल्प दिखाए जाएंगे जिनके लिए उपयोगकर्ता ज़रूरी शर्तें पूरी करता है. onProductDetailsResponse() तरीके में मौजूद आपके कोड को, दिखाए गए ऑफ़र मैनेज करने चाहिए.
बिलिंग फ़्लो लॉन्च करना
अपने ऐप्लिकेशन से खरीदारी का अनुरोध शुरू करने के लिए, अपने ऐप्लिकेशन के मुख्य थ्रेड से launchBillingFlow()
तरीके को कॉल करें. यह तरीका, BillingFlowParams ऑब्जेक्ट का रेफ़रंस लेता है जिसमें queryProductDetailsAsync() को कॉल करने से मिला काम का ProductDetails ऑब्जेक्ट होता है. BillingFlowParams ऑब्जेक्ट बनाने के लिए, BillingFlowParams.Builder क्लास का इस्तेमाल करें. ध्यान दें कि BillingFlowParams ऑब्जेक्ट बनाते समय, आपको उपयोगकर्ता के चुने गए ऑफ़र से जुड़ा ऑफ़र टोकन सेट करना होगा.
यहां दिए गए सैंपल में, वन-टाइम प्रॉडक्ट के लिए, कई ऑफ़र के साथ खरीदारी का फ़्लो लॉन्च करने का तरीका बताया गया है:
Java
// An activity reference from which the billing flow will launch. Activity activity = ...; ImmutableList<ProductDetailsParams> productDetailsParamsList = ImmutableList.of( ProductDetailsParams.newBuilder() // retrieve a value for productDetails by calling queryProductDetailsAsync() .setProductDetails(productDetails) // to get an offer token, call // ProductDetails.getOneTimePurchaseOfferDetailsList() for a list of offers // that are available to the user .setOfferToken(selectedOfferToken) .build() ); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsParamsList) .build(); // Launch the billing flow BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
offerToken को OneTimePurchaseOfferDetails के हिस्से के तौर पर देखा जा सकता है. उपयोगकर्ता को ऑफ़र दिखाते समय, पक्का करें कि आपने बिलिंग फ़्लो पैरामीटर को सही ऑफ़र टोकन के साथ कॉन्फ़िगर किया हो. यह टोकन, oneTimePurchaseOfferDetails.getOfferToken() तरीके से मिल सकता है.
खरीदारी के विकल्प और ऑफ़र
खरीदारी के विकल्प की मदद से, यह तय किया जा सकता है कि किसी उपयोगकर्ता को प्रॉडक्ट का ऐक्सेस कैसे दिया जाए, कीमत क्या हो, और प्रॉडक्ट किस इलाके में उपलब्ध होगा. किसी एक प्रॉडक्ट के लिए, खरीदारी के कई विकल्प हो सकते हैं. इनसे यह पता चलता है कि आपका प्रॉडक्ट कहां और कैसे बेचा जाता है.
Google Play पर, वन-टाइम प्रॉडक्ट के लिए खरीदारी के लिए ये विकल्प उपलब्ध हैं:
- खरीदने का विकल्प
- किराये पर लेने का विकल्प
ऑफ़र से, कीमत तय करने की उस योजना का पता चलता है जिसे वन-टाइम प्रॉडक्ट के लिए बनाया जा सकता है. उदाहरण के लिए, वन-टाइम प्रॉडक्ट के लिए छूट का ऑफ़र बनाया जा सकता है.
Google Play पर, वन-टाइम प्रॉडक्ट के लिए खरीदारी के ये ऑफ़र उपलब्ध हैं:
- पहले से ऑर्डर करने का ऑफ़र (सिर्फ़ खरीदा जा सकता है)
- छूट का ऑफ़र (खरीदने और किराये पर लेने, दोनों विकल्पों के लिए उपलब्ध है)
खरीदने का विकल्प
खरीदने के विकल्प का मतलब है कि खरीदार वन-टाइम प्रॉडक्ट को स्टैंडर्ड तरीके से खरीद सकता है. इसमें, legacyCompatible फ़ील्ड मौजूद होता है. हालांकि, यह ज़रूरी नहीं है. इससे यह पता चलता है कि खरीदारी का यह विकल्प, Play Billing Library (वर्शन 7 या इससे पुराने वर्शन) के उन फ़्लो में उपलब्ध होगा या नहीं जो नए मॉडल के साथ काम नहीं करते. पुराने सिस्टम के साथ काम करने की सुविधा के लिए, खरीदारी के कम से कम एक विकल्प को लेगसी वर्शन के साथ काम करने वाला के तौर पर मार्क किया जाना चाहिए.
Play Billing Library (पीबीएल) में, खरीदने और किराये पर लेने, दोनों विकल्पों को इंटिग्रेट करने का तरीका एक ही है. पीबीएल में, खरीदारी के विकल्प को इंटिग्रेट करने का तरीका जानने के लिए, PBL में, किराये पर लेने के विकल्प को इंटिग्रेट करना लेख पढ़ें.
किराये पर लेने का विकल्प
किराये पर लेने की सुविधा से, उपयोगकर्ता एक तय समयावधि के लिए वन-टाइम प्रॉडक्ट ऐक्सेस कर सकते हैं. किराये की अवधि और इसके खत्म होने की समयसीमा तय की जा सकती है. इस दस्तावेज़ में, Play Billing Library (पीबीएल) में किराये पर देने के विकल्प को इंटिग्रेट करने का तरीका बताया गया है.
पीबीएल में किराये पर देने के विकल्प को इंटिग्रेट करना
इस सेक्शन में, Play Billing Library (पीबीएल) में किराये पर देने के विकल्प को इंटिग्रेट करने का तरीका बताया गया है. यह माना जाता है कि आपको PBL के इंटिग्रेशन के शुरुआती चरणों के बारे में पता है. जैसे, अपने ऐप्लिकेशन में PBL डिपेंडेंसी जोड़ना, BillingClient को शुरू करना, और Google Play से कनेक्ट करना. इस सेक्शन में, किराये पर देने के विकल्प के लिए, पीबीएल के उन इंटिग्रेशन पहलुओं पर फ़ोकस किया गया है जो खास तौर पर इन विकल्पों के लिए हैं.
किराये पर उपलब्ध प्रॉडक्ट कॉन्फ़िगर करने के लिए, आपको Play Developer API की नई monetization.onetimeproducts सेवा या Play कंसोल के यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करना होगा. इस सेवा का इस्तेमाल करने के लिए, REST API को सीधे तौर पर कॉल किया जा सकता है या
Java क्लाइंट लाइब्रेरी का इस्तेमाल किया जा सकता है.
किराये पर देने के विकल्प के लिए खरीदारी का फ़्लो लॉन्च करना
किराये पर देने के ऑफ़र के लिए, खरीदारी का फ़्लो लॉन्च करने के लिए, यह तरीका अपनाएं:
ProductDetails.oneTimePurchaseOfferDetails.getRentalDetails()तरीके का इस्तेमाल करके, किराये पर देन के विकल्प का मेटाडेटा फ़ेच करें.यहां दिए गए सैंपल में, किराये पर देने कॉन्टेंट का मेटाडेटा पाने का तरीका बताया गया है:
Java
billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResult) { // check billingResult // … // process productDetailsList returned by QueryProductDetailsResult for (ProductDetails productDetails : productDetailsResult.getProductDetailsList()) { for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails : productDetails.getOneTimePurchaseOfferDetailsList()) { // Checks if the offer is a rent purchase option. if (oneTimePurchaseOfferDetails.getRentalDetails() != null) { // process the returned RentalDetails OneTimePurchaseOfferDetails.RentalDetails rentalDetails = oneTimePurchaseOfferDetails.getRentalDetails(); // Get rental period in ISO 8601 format. String rentalPeriod = rentalDetails.getRentalPeriod(); // Get rental expiration period in ISO 8601 format, if present. if (rentalDetails.getRentalExpirationPeriod() != null) { String rentalExpirationPeriod = rentalDetails.getRentalExpirationPeriod(); } // Get offer token String offerToken = oneTimePurchaseOfferDetails.getOfferToken(); // Get the associated purchase option ID if (oneTimePurchaseOfferDetails.getPurchaseOptionId() != null) { String purchaseOptionId = oneTimePurchaseOfferDetails.getPurchaseOptionId(); } } } } } });
बिलिंग फ़्लो लॉन्च करें.
अपने ऐप्लिकेशन से खरीदारी का अनुरोध शुरू करने के लिए, अपने ऐप्लिकेशन के मुख्य थ्रेड से
launchBillingFlow()तरीका कॉल करें. यह तरीका,BillingFlowParamsऑब्जेक्ट का रेफ़रंस लेता है. इस ऑब्जेक्ट में,queryProductDetailsAsync()को कॉल करने से मिला काम काProductDetailsऑब्जेक्ट होता है.BillingFlowParamsऑब्जेक्ट बनाने के लिए,BillingFlowParams.Builderक्लास का इस्तेमाल करें. ध्यान दें किBillingFlowParamsऑब्जेक्ट बनाते समय, आपको उपयोगकर्ता के चुने गए ऑफ़र से जुड़ा ऑफ़र टोकन सेट करना होगा. अगर कोई उपयोगकर्ता किराये पर लेने के विकल्प की ज़रूरी शर्तें पूरी करता है, तो उसेqueryProductDetailsAsync()में RentalDetails और offerId के साथ एक ऑफ़र मिलेगा.यहां दिए गए सैंपल में, बिलिंग फ़्लो लॉन्च करने का तरीका बताया गया है:
Kotlin
// 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) // Get the offer token: // a. For one-time products, call ProductDetails.getOneTimePurchaseOfferDetailsList() // for a list of offers that are available to the user. // b. For subscriptions, call ProductDetails.getSubscriptionOfferDetails() // for a list of offers that are available to the user. .setOfferToken(selectedOfferToken) .build() ) val billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsParamsList) .build() // Launch the billing flow val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)
Java
// An activity reference from which the billing flow will be launched. Activity activity = ...; ImmutableList<BillingFlowParams.ProductDetailsParams> productDetailsParamsList = ImmutableList.of( BillingFlowParams.ProductDetailsParams.newBuilder() // retrieve a value for "productDetails" by calling queryProductDetailsAsync() .setProductDetails(productDetails) // Get the offer token: // a. For one-time products, call ProductDetails.getOneTimePurchaseOfferDetailsList() // for a list of offers that are available to the user. // b. For subscriptions, call ProductDetails.getSubscriptionOfferDetails() // for a list of offers that are available to the user. .setOfferToken(selectedOfferToken) .build() ); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsParamsList) .build(); // Launch the billing flow BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
offerTokenकोOneTimePurchaseOfferDetailsके हिस्से के तौर पर देखा जा सकता है. उपयोगकर्ता को ऑफ़र दिखाते समय, पक्का करें कि आपने बिलिंग फ़्लो पैरामीटर को सही ऑफ़र टोकन के साथ कॉन्फ़िगर किया हो. यह टोकन,oneTimePurchaseOfferDetails.getOfferToken()तरीके से मिल सकता है.
पहले से ऑर्डर करने का ऑफ़र
पहले से ऑर्डर करने की सुविधा की मदद से, किसी प्रॉडक्ट के रिलीज़ होने से पहले ही, उसे वन-टाइम प्रॉडक्ट के लिए सेट अप किया जा सकता है. जब कोई उपयोगकर्ता आपके प्रॉडक्ट को पहले से ऑर्डर करता है, तो वह प्रॉडक्ट रिलीज़ होने पर उसके लिए पैसे चुकाने के लिए सहमत होता है. ऐसा तब तक होता है, जब तक कि उपयोगकर्ता रिलीज़ की तारीख से पहले, ऑर्डर को रद्द न कर दे. रिलीज़ की तारीख पर, खरीदार से शुल्क लिया जाता है. साथ ही, Play उसे ईमेल से सूचना देता है कि आइटम रिलीज़ हो गया है.
इस दस्तावेज़ में, Play Billing Library (पीबीएल) में, रिलीज़ से पहले खरीदारी के ऑफ़र को इंटिग्रेट करने का तरीका बताया गया है.
प्री-ऑर्डर ऑफ़र को पीबीएल में इंटिग्रेट करना
इस सेक्शन में, पीबीएल में प्री-ऑर्डर ऑफ़र को इंटिग्रेट करने का तरीका बताया गया है. यह माना जाता है कि आपको पीबीएल के इंटिग्रेशन के शुरुआती चरणों के बारे में पता है. जैसे, अपने ऐप्लिकेशन में पीबीएल डिपेंडेंसी जोड़ना, BillingClient को शुरू करना, और Google Play से कनेक्ट करना. इस सेक्शन में, प्री-ऑर्डर ऑफ़र के लिए ज़रूरी पीबीएल इंटिग्रेशन के पहलुओं पर फ़ोकस किया गया है.
पहले से ऑर्डर करने के ऑफ़र के लिए खरीदारी का फ़्लो लॉन्च करना
पहले से ऑर्डर करने के ऑफ़र के लिए, खरीदारी का फ़्लो लॉन्च करने के लिए, यह तरीका अपनाएं:
ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails()तरीके का इस्तेमाल करके, पहले से ऑर्डर करने के ऑफ़र का मेटाडेटा फ़ेच करें. यहां दिए गए सैंपल में, पहले से ऑर्डर करने के ऑफ़र का मेटाडेटा पाने का तरीका बताया गया है:Java
billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResult) { // check billingResult // … // process productDetailsList returned by QueryProductDetailsResult for (ProductDetails productDetails : productDetailsResult.getProductDetailsList()) { for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails : productDetails.getOneTimePurchaseOfferDetailsList()) { // Checks if the offer is a preorder offer. if (oneTimePurchaseOfferDetails.getPreorderDetails() != null) { // process the returned PreorderDetails OneTimePurchaseOfferDetails.PreorderDetails preorderDetails = oneTimePurchaseOfferDetails.getPreorderDetails(); // Get preorder release time in millis. long preorderReleaseTimeMillis = preorderDetails.getPreorderReleaseTimeMillis(); // Get preorder presale end time in millis. long preorderPresaleEndTimeMillis = preorderDetails.getPreorderPresaleEndTimeMillis(); // Get offer ID String offerId = oneTimePurchaseOfferDetails.getOfferId(); // Get the associated purchase option ID if (oneTimePurchaseOfferDetails.getPurchaseOptionId() != null) { String purchaseOptionId = oneTimePurchaseOfferDetails.getPurchaseOptionId(); } } } } } });
बिलिंग फ़्लो लॉन्च करें.
अपने ऐप्लिकेशन से खरीदारी का अनुरोध शुरू करने के लिए, अपने ऐप्लिकेशन के मुख्य थ्रेड से
launchBillingFlow()तरीका कॉल करें. यह तरीका,BillingFlowParamsऑब्जेक्ट का रेफ़रंस लेता है जिसमें queryProductDetailsAsync() को कॉल करने से मिला काम काProductDetailsऑब्जेक्ट होता है.BillingFlowParamsऑब्जेक्ट बनाने के लिए,BillingFlowParams.Builder classका इस्तेमाल करें. ध्यान दें कि ऑब्जेक्ट बनाते समय, आपको उपयोगकर्ता के चुने गए ऑफ़र से जुड़ा ऑफ़र टोकन सेट करना होगा.BillingFlowParamsअगर कोई उपयोगकर्ता प्री-ऑर्डर ऑफ़र की ज़रूरी शर्तें पूरी करता है, तो उसेqueryProductDetailsAsync()तरीके में PreorderDetails और offerId के साथ एक ऑफ़र मिलेगा.यहां दिए गए सैंपल में, बिलिंग फ़्लो लॉन्च करने का तरीका बताया गया है:
Java
// An activity reference from which the billing flow will launch. Activity activity = ...; ImmutableList productDetailsParamsList = ImmutableList.of( ProductDetailsParams.newBuilder() // retrieve a value for productDetails by calling queryProductDetailsAsync() .setProductDetails(productDetails) // to get an offer token, call // ProductDetails.getOneTimePurchaseOfferDetailsList() for a list of offers // that are available to the user .setOfferToken(selectedOfferToken) .build() ); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsParamsList) .build(); // Launch the billing flow BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
offerTokenकोOneTimePurchaseOfferDetailsके हिस्से के तौर पर देखा जा सकता है. उपयोगकर्ता को ऑफ़र दिखाते समय, पक्का करें कि आपने बिलिंग फ़्लो पैरामीटर को सही ऑफ़र टोकन के साथ कॉन्फ़िगर किया हो. यह टोकन,oneTimePurchaseOfferDetails.getOfferToken()तरीके से मिल सकता है.
छूट का ऑफ़र
इस सेक्शन में, वन-टाइम प्रॉडक्ट के लिए, छूट के ऑफ़र कॉन्फ़िगर करने का तरीका बताया गया है.
वन-टाइम प्रॉडक्ट पर मिलने वाली छूट के ऑफ़र में, चार अलग-अलग पैरामीटर कॉन्फ़िगर किए जा सकते हैं:
छूट वाले ऑफ़र की कीमत: इसमें, मूल कीमत पर मिलने वाली छूट के प्रतिशत या छूट की कुल राशि की जानकारी दी जाती है.
देश या इलाके की ज़रूरी शर्तें: इसमें, किसी देश या इलाके में वन-टाइम प्रॉडक्ट के ऑफ़र की उपलब्धता के बारे में जानकारी दी जाती है.
खरीदारी की सीमा (ज़रूरी नहीं): इससे यह तय किया जा सकता है कि कोई उपयोगकर्ता एक ही ऑफ़र को कितनी बार रिडीम कर सकता है. अगर कोई उपयोगकर्ता खरीदारी की सीमा से ज़्यादा खरीदारी करता है, तो उसे ऑफ़र के लिए अयोग्य माना जाएगा.
सीमित समय (ज़रूरी नहीं): इसमें, वह समयावधि तय की जाती है जिसके दौरान ऑफ़र उपलब्ध होता है. इस समयावधि के बाद, ऑफ़र खरीदारी के लिए उपलब्ध नहीं होता.
छूट वाले ऑफ़र की कीमत की जानकारी पाना
छूट वाले ऑफ़र के लिए, ऑफ़र की गई छूट का प्रतिशत या कुल छूट वापस पाई जा सकती है.
पहला उदाहरण: छूट वाले ऑफ़र पर मिलने वाली छूट का प्रतिशत वापस पाना
यहां दिए गए सैंपल में, छूट वाले ऑफ़र की मूल कीमत और उस पर मिलने वाली छूट का प्रतिशत पता करने का तरीका बताया गया है. ध्यान दें कि छूट के प्रतिशत की जानकारी, सिर्फ़ छूट वाले ऑफ़र के लिए दिखती है.
Java
billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResult){ // check billingResult // … // process productDetailsList returned by QueryProductDetailsResult for (ProductDetails productDetails : productDetailsResult.getProductDetailsList()) { for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails : productDetails.getOneTimePurchaseOfferDetailsList()) { long discountedOfferPriceMicros = oneTimePurchaseOfferDetails.getPriceAmountMicros(); // process the returned fullPriceMicros and percentageDiscount. if (oneTimePurchaseOfferDetails.getFullPriceMicros() != null) { long fullPriceMicros = oneTimePurchaseOfferDetails.getFullPriceMicros(); } if (oneTimePurchaseOfferDetails.getDiscountDisplayInfo() != null) { long percentageDiscount = oneTimePurchaseOfferDetails .getDiscountDisplayInfo() .getPercentageDiscount(); } // … } } } });
दूसरा उदाहरण: छूट वाले ऑफ़र पर मिलने वाली कुल छूट वापस पाना
इस उदाहरण में, छूट वाले ऑफ़र की मूल कीमत और माइक्रो में दी गई छूट का पता लगाने का तरीका बताया गया है. ध्यान दें कि माइक्रो की जानकारी में, पूरी छूट सिर्फ़ छूट वाले ऑफ़र के लिए दिखती है. छूट के ऑफ़र के लिए, तय रकम या प्रतिशत में छूट की जानकारी देना ज़रूरी है.
Java
billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResult) { // check billingResult // … // process productDetailsList returned by QueryProductDetailsResult for (ProductDetails productDetails : productDetailsResult.getProductDetailsList()) { for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails : productDetails.getOneTimePurchaseOfferDetailsList()) { long discountedOfferPriceMicros = oneTimePurchaseOfferDetails.getPriceAmountMicros(); // process the returned fullPriceMicros and absolute DiscountAmountMicros. if (oneTimePurchaseOfferDetails.getFullPriceMicros() != null) { long fullPriceMicros = oneTimePurchaseOfferDetails.getFullPriceMicros(); } if (oneTimePurchaseOfferDetails.getDiscountDisplayInfo() != null) { long discountAmountMicros = oneTimePurchaseOfferDetails .getDiscountDisplayInfo() .getDiscountAmount() .getDiscountAmountMicros(); } // … } } } });
किसी ऑफ़र के लिए मान्य समयावधि की जानकारी पाना
किसी ऑफ़र के लिए मान्य समयावधि की जानकारी पाने के लिए, OneTimePurchaseOfferDetails.getValidTimeWindow() तरीके का इस्तेमाल किया जा सकता है. इस ऑब्जेक्ट में, मिलीसेकंड में समयावधि की शुरुआत और खत्म होने का समय शामिल होता है.
यहां दिए गए सैंपल में, किसी ऑफ़र के लिए मान्य समयावधि की जानकारी पाने का तरीका बताया गया है:
Java
billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResult) { // check billingResult // … // process productDetailsList returned by QueryProductDetailsResult for (ProductDetails productDetails : productDetailsResult.getProductDetailsList()) { for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails : productDetails.getOneTimePurchaseOfferDetailsList()) { if (oneTimePurchaseOfferDetails.getValidTimeWindow() != null) { // process the returned startTimeMillis and endTimeMillis. ValidTimeWindow validTimeWindow = oneTimePurchaseOfferDetails.getValidTimeWindow(); long startTimeMillis = validTimeWindow.getStartTimeMillis(); long endTimeMillis = validTimeWindow.getEndTimeMillis(); // … } } } } });
छूट वाले ऑफ़र के लेवल पर सीमित संख्या में प्रॉडक्ट दिखाना
छूट वाले ऑफ़र के लेवल पर, ज़्यादा से ज़्यादा संख्या की सीमा तय की जा सकती है. यह सीमा, सिर्फ़ ऑफ़र के लेवल पर लागू होती है. यहां एक उदाहरण दिया गया है:
- सुपर स्क्रीनसेवर में स्क्रीन सेवर प्रॉडक्ट के लिए दो ऑफ़र हैं: स्क्रीन सेवर खरीदने का विकल्प और स्क्रीन सेवर पर छूट.
- स्क्रीन सेवर खरीदने के विकल्प के लिए, सीमित संख्या सेट अप नहीं की गई है.
- छूट वाले स्क्रीन सेवर के लिए, ऑफ़र के लेवल पर ज़्यादा से ज़्यादा तीन प्रॉडक्ट खरीदने की सीमा सेट की गई है.
- स्क्रीन सेवर प्रॉडक्ट के लिए, प्रॉडक्ट के लेवल पर ज़्यादा से ज़्यादा संख्या की सीमा सेट नहीं की गई है. इसलिए, उपयोगकर्ता इस प्रॉडक्ट को असीमित संख्या में खरीद सकते हैं.
- उपयोगकर्ता के पास, छूट वाला एक स्क्रीन सेवर है. साथ ही, वह छूट वाले स्क्रीन सेवर के साथ एक और स्क्रीन सेवर खरीदने की योजना बना रहा है.
- उपलब्ध ऑफ़र वापस पाने पर, स्क्रीन सेवर खरीदने के विकल्प के लिए LimitedQuantityInfo की वैल्यू null होती है. वहीं, छूट वाले स्क्रीन सेवर के लिए, बचे हुए प्रॉडक्ट की संख्या की वैल्यू 2 होती है.
यहां दिए गए उदाहरण में, छूट वाले ऑफ़र के लेवल पर सीमित संख्या में प्रॉडक्ट दिखाने का तरीका बताया गया है:
Java
billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResult) { // check billingResult // … // process productDetailsList returned by QueryProductDetailsResult for (ProductDetails productDetails : productDetailsResult.getProductDetailsList()) { for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails : productDetails.getOneTimePurchaseOfferDetailsList()) { if (oneTimePurchaseOfferDetails.getLimitedQuantityInfo() != null) { // process the returned maximumQuantity and remainingQuantity. LimitedQuantityInfo limitedQuantityInfo = oneTimePurchaseOfferDetails.getLimitedQuantityInfo(); int maximumQuantity = limitedQuantityInfo.getMaximumQuantity(); int remainingQuantity = limitedQuantityInfo.getRemainingQuantity(); // … } } } } });
जब उपयोगकर्ता, किसी ऑफ़र के लिए ज़्यादा से ज़्यादा संख्या में प्रॉडक्ट रिडीम कर लेते हैं, तो getOneTimePurchaseOfferDetailsList() तरीके से वह ऑफ़र नहीं दिखाया जाता.
रिडीम करने की तय सीमा का हिसाब लगाना
यहां दिए गए उदाहरण में, छूट वाले किसी ऑफ़र के लिए, सीमित संख्या की जानकारी पाने का तरीका बताया गया है. मौजूदा उपयोगकर्ता के लिए, ज़्यादा से ज़्यादा संख्या और बचे हुए प्रॉडक्ट की संख्या की जानकारी पाई जा सकती है. ध्यान दें कि सीमित संख्या की सुविधा, इस्तेमाल किए जा सकने वाले और इस्तेमाल नहीं किए जा सकने वाले, दोनों तरह के वन-टाइम प्रॉडक्ट के ऑफ़र के लिए लागू होती है. यह सुविधा, सिर्फ़ ऑफ़र के लेवल पर उपलब्ध है.
Google Play, उपयोगकर्ता के पास मौजूद आइटम की संख्या को, आपकी ओर से सेट अप की गई ज़्यादा से ज़्यादा संख्या से घटाकर, बचे हुए आइटम की संख्या का हिसाब लगाता है. Google Play, उपयोगकर्ता के पास मौजूद आइटम की संख्या की गिनती करते समय, उन आइटम को भी शामिल करता है जिन्हें इस्तेमाल किया जा चुका है या जिन्हें अभी तक इस्तेमाल नहीं किया गया है. रद्द की गई, रिफ़ंड की गई या चार्ज-बैक की गई खरीदारी को, उपयोगकर्ता के मालिकाना हक वाली संख्या में शामिल नहीं किया जाता. उदाहरण के लिए:
सुपर स्क्रीनसेवर ने छूट वाला एक ऑफ़र सेट अप किया है. इसके लिए, ज़्यादा से ज़्यादा एक प्रॉडक्ट खरीदने की सीमा तय की गई है. इसलिए, उपयोगकर्ता छूट वाला एक स्क्रीन सेवर खरीद सकते हैं.
उपयोगकर्ता, छूट वाले स्क्रीन सेवर में से एक को खरीदता है. अगर उपयोगकर्ता, छूट वाला दूसरा स्क्रीन सेवर खरीदने की कोशिश करता है, तो गड़बड़ी होगी. साथ ही,
PurchasesUpdatedListenerको ITEM_UNAVAILABLE रिस्पॉन्स कोड मिलेगा.उपयोगकर्ता, छूट पर खरीदे गए स्क्रीनसेवर का रिफ़ंड मांगता है और उसे रिफ़ंड मिल जाता है. उपयोगकर्ता, छूट वाले स्क्रीन सेवर में से किसी एक को खरीदने की कोशिश करता है और खरीदारी पूरी हो जाती है.
देश और इलाके की ज़रूरी शर्तें
आपके पास उन देशों या इलाकों को चुनने का विकल्प होता है जहां खरीदारी के विकल्प का ऑफ़र या छूट का ऑफ़र, उपयोगकर्ताओं के लिए उपलब्ध होगा. Google Play, Play Store में सेट किए गए देश के हिसाब से, उपयोगकर्ता की ज़रूरी शर्तें पूरी करने की स्थिति का आकलन करेगा. किसी ऑफ़र के लिए, देश या इलाके के हिसाब से उपलब्धता कॉन्फ़िगर करने पर, वह ऑफ़र सिर्फ़ getOneTimePurchaseOfferDetailsList() के हिस्से के तौर पर दिखाया जाएगा. ऐसा तब होगा, जब उपयोगकर्ता टारगेट किए गए देश या इलाके में होगा. इसके अलावा, queryProductDetailsAsync() को कॉल करने पर, ऑफ़र की सूची में वह ऑफ़र नहीं दिखेगा.
ऑफ़र टैग
यहां दिए गए सैंपल में, किसी ऑफ़र से जुड़े ऑफ़र टैग को वापस पाने का तरीका बताया गया है.
Java
billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResult) { // check billingResult // … // process productDetailsList returned by QueryProductDetailsResult for (ProductDetails productDetails : productDetailsResult.getProductDetailsList()) { for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails : productDetails.getOneTimePurchaseOfferDetailsList()) { // process the returned offer tags. ImmutableList<String> offerTags = oneTimePurchaseOfferDetails.getOfferTagsList(); // … } } } });
ऑफ़र टैग की इनहेरिटेंस
प्रॉडक्ट, खरीदारी के विकल्प या छूट वाले ऑफ़र के लिए, ऑफ़र टैग सेट किए जा सकते हैं. छूट वाले ऑफ़र, खरीदारी के विकल्प के ऑफ़र से ऑफ़र टैग इनहेरिट करते हैं. इसी तरह, अगर प्रॉडक्ट के लेवल पर ऑफ़र टैग तय किए जाते हैं, तो खरीदारी के विकल्प का ऑफ़र और छूट वाले ऑफ़र, दोनों प्रॉडक्ट के ऑफ़र टैग इनहेरिट करते हैं.
उदाहरण के लिए, सुपर स्क्रीनसेवर में स्क्रीन सेवर प्रॉडक्ट के लिए दो ऑफ़र हैं: स्क्रीन सेवर खरीदने का विकल्प और स्क्रीन सेवर पर छूट.
- सुपर स्क्रीनसेवर के लिए, प्रॉडक्ट का ऑफ़र टैग
SSProductTagहै. - स्क्रीन सेवर खरीदने के विकल्प के लिए, ऑफ़र टैग
SSPurchaseOptionTagहै. - छूट वाले स्क्रीन सेवर के लिए, ऑफ़र टैग
SSDiscountOfferTagहै.
इस उदाहरण में, खरीदारी के विकल्प के ऑफ़र के लिए, oneTimePurchaseOfferDetails.getOfferTagsList() तरीका, SSProductTag और SSPurchaseOptionTag दिखाता है. छूट वाले ऑफ़र के लिए, यह तरीका SSProductTag, SSPurchaseOptionTag, और SSDiscountOfferTag दिखाता है.