इस दस्तावेज़ में, 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 Developer Console के यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करना होगा. इस सेवा का इस्तेमाल करने के लिए, सीधे 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.subscriptionOfferDetails() // 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<ProductDetailsParams> productDetailsParamsList = ImmutableList.of( 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.subscriptionOfferDetails() // 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 की वैल्यू शून्य होती है. साथ ही, छूट वाले स्क्रीनसेवर के लिए बची हुई मात्रा की वैल्यू 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 खाते में दर्ज देश के हिसाब से यह तय करेगा कि उपयोगकर्ता को ऑफ़र मिलेगा या नहीं. किसी ऑफ़र के लिए क्षेत्र के हिसाब से उपलब्धता कॉन्फ़िगर करने पर, उसे 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
दिखाता है.