इस दस्तावेज़ में, 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 या उससे पहले के वर्शन) के फ़्लो में उपलब्ध होगा या नहीं. ये फ़्लो, नए मॉडल के साथ काम नहीं करते. पुराने सिस्टम के साथ काम करने के लिए, खरीदारी के कम से कम एक विकल्प को लेगसी वर्शन के साथ काम करने वाले विकल्प के तौर पर मार्क किया जाना चाहिए.
PBL के साथ, खरीदारी और किराये पर लेने, दोनों विकल्पों को इंटिग्रेट करने का तरीका एक ही है. PBL के साथ, खरीदारी के विकल्प को इंटिग्रेट करने का तरीका जानने के लिए, PBL के साथ किराये पर खरीदने का विकल्प इंटिग्रेट करना लेख पढ़ें.
किराये पर लेने का विकल्प
किराये पर खरीदने की सुविधा की मदद से, उपयोगकर्ता एक तय समयावधि के लिए वन-टाइम प्रॉडक्ट ऐक्सेस कर सकते हैं. किराये की अवधि और खत्म होने की तारीख तय की जा सकती है. इस दस्तावेज़ में, Play Billing Library (PBL) के साथ किराये पर खरीदने के विकल्प को इंटिग्रेट करने का तरीका बताया गया है.
किराये पर खरीदने का विकल्प, पीबीएल के साथ इंटिग्रेट करना
इस सेक्शन में, Play Billing Library (PBL) के साथ किराये पर खरीदने के विकल्प को इंटिग्रेट करने का तरीका बताया गया है. यह माना जाता है कि आपको 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 लाइब्रेरी (PBL) के साथ, रिलीज़ से पहले खरीदारी के ऑफ़र को इंटिग्रेट करने का तरीका बताया गया है.
प्री-ऑर्डर ऑफ़र को PBL के साथ इंटिग्रेट करना
इस सेक्शन में, Play Billing Library (PBL) के साथ प्री-ऑर्डर ऑफ़र को इंटिग्रेट करने का तरीका बताया गया है. यह माना जाता है कि आपको PBL के इंटिग्रेशन के शुरुआती चरणों के बारे में पता है. जैसे, अपने ऐप्लिकेशन में PBL डिपेंडेंसी जोड़ना, 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()
method को कॉल करें. यह तरीका,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(); // … } } } });
ऑफ़र टैग का इनहेरिटेंस
प्रॉडक्ट, खरीदारी के विकल्प या छूट के ऑफ़र के लिए, ऑफ़र टैग सेट किए जा सकते हैं. छूट वाले ऑफ़र, खरीदारी के विकल्प वाले ऑफ़र से ऑफ़र टैग इनहेरिट करते हैं. इसी तरह, अगर ऑफ़र टैग प्रॉडक्ट लेवल पर तय किए जाते हैं, तो खरीदारी के विकल्प के ऑफ़र और छूट के ऑफ़र, दोनों को प्रॉडक्ट के ऑफ़र टैग इनहेरिट मिलते हैं.
उदाहरण के लिए, Super screensavers में स्क्रीन सेवर प्रॉडक्ट के लिए दो ऑफ़र हैं: स्क्रीन सेवर खरीदने का विकल्प और स्क्रीन सेवर पर छूट.
- सुपर स्क्रीनसेवर में प्रॉडक्ट ऑफ़र टैग
SSProductTag
है. - खरीदारी के विकल्प वाले स्क्रीनसेवर में, ऑफ़र टैग
SSPurchaseOptionTag
है. - छूट वाले स्क्रीनसेवर में ऑफ़र टैग
SSDiscountOfferTag
है.
इस उदाहरण में, खरीदारी के विकल्प के लिए oneTimePurchaseOfferDetails.getOfferTagsList()
का तरीका, SSProductTag
और SSPurchaseOptionTag
दिखाता है. छूट वाले ऑफ़र के लिए, यह तरीका SSProductTag
, SSPurchaseOptionTag
, और SSDiscountOfferTag
दिखाता है.