Google Play का बिलिंग सिस्टम एक ऐसी सेवा है जिसकी मदद से, आपको अपने Android ऐप्लिकेशन में डिजिटल प्रॉडक्ट और कॉन्टेंट बेचने की सुविधा मिलती है. मई 2022 में रिलीज़ किए गए वर्शन में, हमने सदस्यता वाले प्रॉडक्ट तय करने के तरीके में बदलाव किया है. इससे, इन प्रॉडक्ट को ऐप्लिकेशन में बेचने और आपके बैकएंड पर मैनेज करने के तरीके पर असर पड़ेगा. अगर आपको पहली बार Google Play के बिलिंग सिस्टम के साथ इंटिग्रेट करना है, तो तैयारी करना लेख पढ़ें.
अगर आपने मई 2022 से पहले, Google Play के बिलिंग सिस्टम की मदद से सदस्यताएं बेची थीं, तो अपनी मौजूदा सदस्यताओं को बनाए रखते हुए, नई सुविधाओं को अपनाने का तरीका समझना ज़रूरी है.
सबसे पहले यह जान लें कि आपकी सभी मौजूदा सदस्यताएं, ऐप्लिकेशन, और बैकएंड इंटिग्रेशन, मई 2022 में रिलीज़ होने से पहले की तरह ही काम करेंगे. आपको तुरंत कोई बदलाव करने की ज़रूरत नहीं है. साथ ही, इन नई सुविधाओं को समय के साथ इस्तेमाल किया जा सकता है. Google Play Billing Library की हर मुख्य रिलीज़, रिलीज़ होने के दो साल बाद तक काम करती है. Google Play Developer API के साथ मौजूदा इंटिग्रेशन पहले की तरह ही काम करते रहेंगे.
मई 2022 में किए गए अपडेट के बारे में खास जानकारी यहां दी गई है:
- Google Play Console के नए वर्शन में, सदस्यताएं, बुनियादी प्लान, और ऑफ़र बनाए और मैनेज किए जा सकते हैं. इसमें नई और माइग्रेट की गई सदस्यताएं, दोनों शामिल हैं.
- Play डेवलपर एपीआई में, एपीआई फ़ॉर्म में Google Play Console के नए यूज़र इंटरफ़ेस (यूआई) की सुविधाओं के साथ काम करने के लिए अपडेट शामिल हैं. ध्यान दें कि Subscription Purchases API का एक नया वर्शन है. सदस्यता की स्थिति देखने और सदस्यता की खरीदारी को मैनेज करने के लिए, इस एपीआई का इस्तेमाल करें.
- Play Billing Library के नए वर्शन 5 का इस्तेमाल करके, आपके ऐप्लिकेशन को सदस्यता की सभी नई सुविधाओं का फ़ायदा मिल सकता है. जब आप वर्शन 5 पर अपग्रेड करने के लिए तैयार हों, तो माइग्रेशन गाइड में दिए गए निर्देशों का पालन करें.
सदस्यताओं का कॉन्फ़िगरेशन
Google Play Console से सदस्यताएं मैनेज करना
मई 2022 से, आपको Google Play Console में कुछ बदलाव दिखेंगे.
अब एक ही सदस्यता में कई बुनियादी प्लान और ऑफ़र हो सकते हैं. पहले से बनाए गए सदस्यता SKU, अब Play Console में इन नई सदस्यताओं, बुनियादी प्लान, और ऑफ़र ऑब्जेक्ट के तौर पर दिखते हैं. अगर आपने अब तक ऐसा नहीं किया है, तो नए ऑब्जेक्ट के बारे में जानकारी पाने के लिए, Play Console में, सदस्यताओं से जुड़े हाल ही में किए गए बदलाव देखें. इसमें, इन ऑब्जेक्ट की सुविधाओं और कॉन्फ़िगरेशन के बारे में भी जानकारी दी गई है. आपके सभी मौजूदा सदस्यता वाले प्रॉडक्ट, Google Play Console में इस नए फ़ॉर्मैट में दिखते हैं. अब हर एसकेयू को सदस्यता ऑब्जेक्ट के ज़रिए दिखाया जाता है. इसमें एक बुनियादी प्लान और पुराने सिस्टम के साथ काम करने वाला ऑफ़र होता है. हालांकि, यह ज़रूरी नहीं है कि हर एसकेयू में यह ऑफ़र हो.
पुराने इंटिग्रेशन में, हर सदस्यता में एक ही ऑफ़र शामिल होना चाहिए. इसे SkuDetails
ऑब्जेक्ट से दिखाया जाता है. इसलिए, हर सदस्यता में पुराने सिस्टम के साथ काम करने वाला एक ही बुनियादी प्लान या ऑफ़र शामिल हो सकता है.
पुराने सिस्टम के साथ काम करने वाला बुनियादी प्लान या ऑफ़र, उन ऐप्लिकेशन के लिए SKU के हिस्से के तौर पर दिखाया जाता है जो अब काम नहीं करने वाले querySkuDetailsAsync()
तरीके का इस्तेमाल कर रहे हैं.
पुराने सिस्टम के साथ काम करने वाले ऑफ़र को कॉन्फ़िगर और मैनेज करने के बारे में ज़्यादा जानने के लिए, सदस्यताओं के बारे में जानकारी देखें. जब आपका ऐप्लिकेशन सिर्फ़ queryProductDetailsAsync()
का इस्तेमाल कर रहा हो और आपके ऐप्लिकेशन के पुराने वर्शन से खरीदारी न की जा रही हो, तब आपको पुराने सिस्टम के साथ काम करने वाले ऑफ़र का इस्तेमाल करने की ज़रूरत नहीं है.
Subscriptions Publishing API की मदद से सदस्यताएं मैनेज करना
Play Developer API में, सदस्यताएं खरीदने के लिए नई सुविधाएं शामिल हैं. SKU मैनेजमेंट के लिए, inappproducts
एपीआई पहले की तरह ही काम करता रहेगा. इसमें, एक बार खरीदे जाने वाले प्रॉडक्ट और सदस्यताओं को मैनेज करना भी शामिल है. इसलिए, अपने इंटिग्रेशन को बनाए रखने के लिए, आपको तुरंत कोई बदलाव करने की ज़रूरत नहीं है.
हालांकि, यह ध्यान रखना ज़रूरी है कि Google Play Console सिर्फ़ नई सदस्यता इकाइयों का इस्तेमाल करता है. Console में अपनी सदस्यताओं में बदलाव करने के बाद, inappproducts
एपीआई का इस्तेमाल सदस्यताओं के लिए नहीं किया जा सकता.
अगर आपने मई 2022 से पहले Publishing API का इस्तेमाल किया है, तो किसी भी समस्या से बचने के लिए, अब Google Play Console में मौजूदा सदस्यताएं रीड-ओनली के तौर पर दिखेंगी. अगर आपने बदलाव करने की कोशिश की, तो आपको इस पाबंदी के बारे में बताने वाली चेतावनी मिल सकती है. Console में सदस्यताओं में और बदलाव करने से पहले, आपको सदस्यता पब्लिश करने के नए एंडपॉइंट का इस्तेमाल करने के लिए, अपना बैकएंड इंटिग्रेशन अपडेट करना चाहिए. नए monetization.subscriptions
, monetization.subscriptions.baseplans
, और monetization.subscriptions.offers
एंडपॉइंट की मदद से, सभी उपलब्ध बुनियादी प्लान और ऑफ़र मैनेज किए जा सकते हैं. इस टेबल में, यह देखा जा सकता है कि InAppProduct
इकाई के अलग-अलग फ़ील्ड, monetization.subscriptions
में मौजूद नए ऑब्जेक्ट में कैसे मैप होते हैं:
InAppProduct | सदस्यता |
---|---|
packageName |
packageName |
sku |
productId |
status |
basePlans[0].state |
prices |
basePlans[0].regionalConfigs.price |
listings |
लिस्टिंग |
defaultPrice |
कोई समानता नहीं |
subscriptionPeriod |
basePlans[0].autoRenewingBasePlanType.billingPeriodDuration |
trialPeriod |
basePlans[0].offers[0].phases[0].regionalConfigs[0].free |
gracePeriod |
basePlans[0].autoRenewingBasePlanType.gracePeriodDuration |
subscriptionTaxesAndComplianceSettings |
taxAndComplianceSettings |
एपीआई का यह ज़रूरी अपडेट, सिर्फ़ पब्लिशिंग एपीआई (एसकेयू मैनेजमेंट) पर लागू होता है.
Play Billing Library में हुए बदलाव
धीरे-धीरे माइग्रेट करने के लिए, Play Billing Library में पिछले वर्शन में उपलब्ध सभी तरीकों और ऑब्जेक्ट शामिल हैं.
SkuDetails
querySkuDetailsAsync()
जैसे ऑब्जेक्ट और फ़ंक्शन अब भी मौजूद हैं. इसलिए, नई सुविधा का इस्तेमाल करने के लिए, आपको मौजूदा सदस्यताओं के कोड को तुरंत अपडेट करने की ज़रूरत नहीं है.
इन तरीकों से कौनसे ऑफ़र उपलब्ध कराने हैं, यह भी कंट्रोल किया जा सकता है. इसके लिए, उन्हें 'पुराने वर्शन के साथ काम करने वाला' के तौर पर मार्क करें.
Play Billing Library 5 में, पुराने तरीकों के साथ-साथ, अब एक नया ProductDetails
ऑब्जेक्ट और उससे जुड़ा queryProductDetailsAsync()
तरीका भी शामिल है. इनका इस्तेमाल, नई इकाइयों और सुविधाओं को मैनेज करने के लिए किया जाता है. ProductDetails
पर अब मौजूदा इन-ऐप्लिकेशन प्रॉडक्ट (एक बार खरीदे जाने वाले और एक बार इस्तेमाल किए जा सकने वाले प्रॉडक्ट) भी काम करते हैं.
किसी सदस्यता के लिए, ProductDetails.getSubscriptionOfferDetails()
उन सभी बुनियादी प्लान और ऑफ़र की सूची दिखाता है जिन्हें उपयोगकर्ता खरीद सकता है.
इसका मतलब है कि आपके पास उपयोगकर्ता के लिए उपलब्ध सभी बुनियादी प्लान और ऑफ़र को ऐक्सेस करने का विकल्प है. भले ही, वे पुराने सिस्टम के साथ काम करते हों या नहीं.
सदस्यता के बिना खरीदे गए प्रॉडक्ट के लिए, getSubscriptionOfferDetails()
null
दिखाता है. एक बार की जाने वाली खरीदारी के लिए, getOneTimePurchaseOfferDetails()
का इस्तेमाल किया जा सकता है.
Play Billing Library 5 में, खरीदारी फ़्लो को लॉन्च करने के लिए, नए और लेगसी, दोनों तरीके शामिल हैं. अगर BillingClient.launchBillingFlow()
को पास किया गया BillingFlowParams
ऑब्जेक्ट, SkuDetails
ऑब्जेक्ट का इस्तेमाल करके कॉन्फ़िगर किया गया है, तो सिस्टम, एसकेयू से जुड़े बुनियादी प्लान या ऑफ़र से, बिक्री के लिए ऑफ़र की जानकारी निकालता है. यह प्लान या ऑफ़र, पुराने सिस्टम के साथ काम करता है. अगर BillingClient.launchBillingFlow()
को पास किया गया BillingFlowParams
ऑब्जेक्ट, ProductDetailsParams
ऑब्जेक्ट का इस्तेमाल करके कॉन्फ़िगर किया गया है, तो सिस्टम उस जानकारी का इस्तेमाल करके, उपयोगकर्ता के खरीदे जा रहे प्रॉडक्ट की पहचान करता है. ProductDetailsParams
ऑब्जेक्ट में ProductDetails
और String
शामिल होते हैं. ProductDetails
, खरीदे जा रहे ऑफ़र के लिए खास ऑफ़र टोकन को दिखाता है और String
, ऑफ़र के लिए खास ऑफ़र टोकन को दिखाता है.
queryPurchasesAsync()
, उपयोगकर्ता के मालिकाना हक वाली सभी खरीदारी दिखाता है. अनुरोध किए गए प्रॉडक्ट टाइप को दिखाने के लिए, पुराने वर्शन की तरह ही BillingClient.SkuType
वैल्यू या QueryPurchasesParams
ऑब्जेक्ट को पास किया जा सकता है. इस ऑब्जेक्ट में BillingClient.ProductType
वैल्यू होती है, जो नई सदस्यता इकाइयों को दिखाती है.
हमारा सुझाव है कि आप जल्द ही अपने ऐप्लिकेशन में, लाइब्रेरी के वर्शन 5 पर अपडेट करें, ताकि सदस्यता की इन नई सुविधाओं का फ़ायदा लिया जा सके.
सदस्यता की स्थिति मैनेज करना
इस सेक्शन में, Google Play के बिलिंग सिस्टम के इंटिग्रेशन के बैकएंड कॉम्पोनेंट में हुए मुख्य बदलावों के बारे में बताया गया है. इन्हें वर्शन 5 पर माइग्रेट करने के लिए लागू करना ज़रूरी है.
डेवलपर से जुड़ी रीयल-टाइम सूचनाएं
जल्द ही, SubscriptionNotification
ऑब्जेक्ट में subscriptionId नहीं होगा. अगर सदस्यता वाले प्रॉडक्ट की पहचान करने के लिए, इस फ़ील्ड का इस्तेमाल किया जा रहा है, तो आपको सदस्यता की स्थिति से यह जानकारी पाने के लिए, सूचना मिलने के बाद purchases.subscriptionv2:get
का इस्तेमाल करके इसे अपडेट करना चाहिए. खरीदारी की स्थिति के हिस्से के तौर पर दिखाए गए lineItems कलेक्शन के हर SubscriptionPurchaseLineItem
एलिमेंट में, उससे जुड़ा productId शामिल होगा.
Subscriptions Purchases API: सदस्यता की स्थिति देखना
Subscriptions Purchases API के पिछले वर्शन में, purchases.subscriptions:get
का इस्तेमाल करके, सदस्यता की स्थिति के बारे में जानकारी पाने का विकल्प था.
इस एंडपॉइंट में कोई बदलाव नहीं हुआ है. यह पुराने सिस्टम के साथ काम करने वाली सदस्यता की खरीदारी के लिए काम करता रहेगा. यह एंडपॉइंट, मई 2022 में रिलीज़ की गई किसी भी नई सुविधा के साथ काम नहीं करता.
सदस्यता की खरीदारी की स्थिति जानने के लिए, Subscriptions Purchases API के नए वर्शन में,
purchases.subscriptionsv2:get
का इस्तेमाल करें. यह एपीआई, माइग्रेट की गई सदस्यताओं, नई सदस्यताओं (प्रीपेड और अपने-आप रिन्यू होने वाली, दोनों तरह की), और सभी तरह की खरीदारी के साथ काम करता है. सूचनाएं मिलने पर सदस्यता का स्टेटस देखने के लिए, इस एंडपॉइंट का इस्तेमाल किया जा सकता है. दिखाए गए ऑब्जेक्ट, SubscriptionPurchaseV2
में नए फ़ील्ड शामिल हैं. हालांकि, इसमें अब भी लेगसी डेटा शामिल है. यह डेटा, मौजूदा सदस्यताओं के साथ काम करना जारी रखने के लिए ज़रूरी है.
प्रीपेड प्लान के लिए SubscriptionPurchaseV2 फ़ील्ड
प्रीपेड प्लान के लिए नए फ़ील्ड जोड़े गए हैं. ये प्लान अपने-आप रिन्यू होने के बजाय, उपयोगकर्ता के ज़रिए रिन्यू किए जाते हैं. सभी फ़ील्ड, प्रीपेड प्लान पर लागू होते हैं, जैसे कि अपने-आप रिन्यू होने वाली सदस्यताओं पर लागू होते हैं. हालांकि, इनमें ये अपवाद हैं:
- [नया फ़ील्ड] lineItems[0].prepaid_plan.allowExtendAfterTime: इससे पता चलता है कि उपयोगकर्ता को अपने प्रीपेड प्लान की समयसीमा बढ़ाने के लिए, कब दूसरा टॉप-अप खरीदने की अनुमति दी जाएगी. ऐसा इसलिए, क्योंकि उपयोगकर्ता के पास एक बार में सिर्फ़ एक ऐसा टॉप-अप हो सकता है जिसका इस्तेमाल नहीं किया गया हो.
- [नया फ़ील्ड] SubscriptionState: इससे सदस्यता ऑब्जेक्ट की स्थिति के बारे में पता चलता है.
प्रीपेड प्लान के लिए, यह वैल्यू हमेशा
ACTIVE
,PENDING
याCANCELED
होती है. - lineItems[0].expiryTime: यह फ़ील्ड, प्रीपेड प्लान के लिए हमेशा मौजूद होता है.
- paused_state_context: यह फ़ील्ड कभी मौजूद नहीं होता, क्योंकि प्रीपेड प्लान को रोका नहीं जा सकता.
- lineItems[0].auto_renewing_plan: यह प्रीपेड प्लान के लिए मौजूद नहीं है.
- canceled_state_context: यह फ़ील्ड, रिचार्ज वाले प्लान के लिए मौजूद नहीं होता. ऐसा इसलिए है, क्योंकि यह फ़ील्ड सिर्फ़ उन उपयोगकर्ताओं पर लागू होता है जो सदस्यता को रद्द करते हैं.
- lineItems[0].productId: यह फ़ील्ड, पिछले वर्शन में मौजूद
subscriptionId
की जगह लेता है.
बार-बार रिन्यू होने वाली सदस्यताओं के लिए SubscriptionPurchaseV2 फ़ील्ड
purchases.subscriptionv2
में नए फ़ील्ड होते हैं, जो सदस्यता के नए ऑब्जेक्ट के बारे में ज़्यादा जानकारी देते हैं. नीचे दी गई टेबल से पता चलता है कि सदस्यता के लेगसी एंडपॉइंट के फ़ील्ड, purchases.subscriptionv2
में मौजूद मिलते-जुलते फ़ील्ड से कैसे मैप होते हैं.
SubscriptionPurchase | SubscriptionPurchaseV2 |
---|---|
countryCode |
regionCode |
orderId |
latestOrderId |
(कोई मिलता-जुलता फ़ील्ड नहीं) | lineItems (SubscriptionPurchaseLineItem की सूची), जो खरीदारी के साथ हासिल किए गए प्रॉडक्ट दिखाती है |
(कोई मिलता-जुलता फ़ील्ड नहीं) | lineItems.offerDetails.basePlanId |
(कोई मिलता-जुलता फ़ील्ड नहीं) | lineItems.offerDetails.offerId |
(कोई मिलता-जुलता फ़ील्ड नहीं) | lineItems.offerDetails.offerTags |
startTimeMillis |
startTime |
expiryTimeMillis |
lineItems.expiryTime (खरीदारी में हासिल की गई हर सदस्यता का अपना expiryTime होता है) |
(कोई मिलता-जुलता फ़ील्ड नहीं) | subscriptionState (
सदस्यता की स्थिति के बारे में बताता है) |
(कोई मिलता-जुलता फ़ील्ड नहीं) | pausedStateContext (सिर्फ़ तब दिखता है, जब सदस्यता का
स्टेटस SUBSCRIPTION_STATE_PAUSED हो) |
autoResumeTimeMillis |
pausedStateContext.autoResumeTime |
(कोई मिलता-जुलता फ़ील्ड नहीं) | canceledStateContext (सिर्फ़ तब दिखता है, जब सदस्यता की स्थिति SUBSCRIPTION_STATE_CANCELED हो) |
(कोई मिलता-जुलता फ़ील्ड नहीं) | testPurchase (सिर्फ़ लाइसेंस रखने वाले टेस्टर की खरीदारी में मौजूद है) |
autoRenewing |
lineItems.autoRenewingPlan.autoRenewEnabled |
priceCurrenceCode ,
priceAmountMicros |
lineItems.autoRenewingPlan.recurringPrice |
introductoryPriceInfo |
(कोई मिलता-जुलता फ़ील्ड नहीं) यह जानकारी, खरीदी गई हर सदस्यता के लिए offer में देखी जा सकती है. |
developerPayload | (कोई मिलता-जुलता फ़ील्ड नहीं) डेवलपर के लिए पेलोड का इस्तेमाल बंद कर दिया गया है |
paymentState | (इसका कोई मिलता-जुलता फ़ील्ड नहीं है) पेमेंट की स्थिति का पता subscriptionState से लगाया जा सकता है:
|
cancelReason ,
userCancellationTimeMillis ,
cancelSurveyResult |
canceledStateContext |
linkedPurchaseToken |
linkedPurchaseToken (कोई बदलाव नहीं) |
purchaseType |
जांच करें: testPurchase के ज़रिए प्रमोशन: signupPromotion |
priceChange |
lineItems.autoRenewingPlan.priceChangeDetails |
profileName ,
emailAddress ,
givenName ,
familyName ,
profileId |
subscribeWithGoogleInfo |
acknowledgementState |
acknowledgementState (no change) |
promotionType ,
promotionCode |
signupPromotion |
externalAccountId ,
obfuscatedExternalAccountId ,
obfuscatedExteranlProfileId |
externalAccountIdentifiers |
सदस्यता मैनेज करने से जुड़े अन्य फ़ंक्शन
purchases.subscriptions:get
को purchases.subscriptionsv2:get
पर अपग्रेड कर दिया गया है. हालांकि, purchases.subscriptions
एंडपॉइंट में डेवलपर की सदस्यता मैनेज करने के बाकी फ़ंक्शन अब भी पहले जैसे ही काम करते रहेंगे. इसलिए, पहले की तरह ही purchases.subscriptions:acknowledge
,
purchases.subscriptions:cancel
,
purchases.subscriptions:defer
,
purchases.subscriptions:refund
, और
purchases.subscriptions:revoke
का इस्तेमाल किया जा सकता है.
Pricing API
क्षेत्र के हिसाब से कीमतों का हिसाब लगाने के लिए, monetization.convertRegionPrices
एंडपॉइंट का इस्तेमाल करें. यह ठीक वैसा ही है जैसे Play Console में किया जाता है. इस तरीके से, Play पर काम करने वाली किसी भी मुद्रा में एक कीमत दी जा सकती है. साथ ही, उन सभी इलाकों के लिए बदली गई कीमतें दिखती हैं जहां Google Play से खरीदारी की जा सकती है. इन कीमतों में, लागू होने पर टैक्स की डिफ़ॉल्ट दर भी शामिल होती है.