Google Play का बिलिंग सिस्टम एक ऐसी सेवा है जिसकी मदद से, आपको अपने Android ऐप्लिकेशन में डिजिटल प्रॉडक्ट और कॉन्टेंट बेचने की सुविधा मिलती है. मई 2022 में रिलीज़ किए गए अपडेट के बाद, हमने सदस्यता वाले प्रॉडक्ट को तय करने के तरीके में बदलाव किया है. इससे, ऐप्लिकेशन में उन्हें बेचने और बैकएंड पर मैनेज करने के तरीके पर असर पड़ता है. अगर आपको Google Play Billing के साथ पहली बार इंटिग्रेट करना है, तो तैयारी करना लेख पढ़कर इंटिग्रेशन शुरू करें.
अगर आपने मई 2022 से पहले Google Play Billing का इस्तेमाल करके सदस्यताएं बेची थीं, तो यह समझना ज़रूरी है कि मौजूदा सदस्यताओं को बनाए रखते हुए, नई सुविधाओं को कैसे अपनाया जाए.
सबसे पहले यह जान लें कि आपकी सभी मौजूदा सदस्यताएं, ऐप्लिकेशन, और बैकएंड इंटिग्रेशन पहले जैसे ही काम करेंगे. इनमें कोई बदलाव नहीं होगा. ये मई 2022 में रिलीज़ हुए वर्शन के हिसाब से काम करेंगे. आपको तुरंत कोई बदलाव करने की ज़रूरत नहीं है. इन नई सुविधाओं को समय के साथ इस्तेमाल किया जा सकता है. Google Play Billing Library की हर मुख्य रिलीज़, रिलीज़ होने के दो साल बाद तक काम करती है. Google Play Developer API के साथ मौजूदा इंटिग्रेशन पहले की तरह काम करते रहेंगे.
मई 2022 में किए गए अपडेट के बारे में खास जानकारी यहां दी गई है:
- Google Play Console के नए वर्शन में, सदस्यताएं, बुनियादी प्लान, और ऑफ़र बनाए और मैनेज किए जा सकते हैं. इसमें नई और माइग्रेट की गई सदस्यताएं, दोनों शामिल हैं.
- Play Developer API में, एपीआई के तौर पर Google Play Console के नए यूज़र इंटरफ़ेस (यूआई) की सुविधाओं को सपोर्ट करने के लिए अपडेट शामिल हैं. खास तौर पर, Subscription Purchases API का नया वर्शन उपलब्ध है. सदस्यता की स्थिति देखने और सदस्यता की खरीदारी को मैनेज करने के लिए, इस एपीआई का इस्तेमाल करें.
- Play Billing Library के नए वर्शन 5 से, आपका ऐप्लिकेशन सदस्यता से जुड़ी सभी नई सुविधाओं का फ़ायदा पा सकता है. वर्शन 5 पर अपग्रेड करने के लिए, माइग्रेशन गाइड में दिए गए निर्देशों का पालन करें.
सदस्यताओं का कॉन्फ़िगरेशन
Google Play Console के ज़रिए सदस्यताएं मैनेज करना
मई 2022 से, आपको Google Play Console में कुछ अंतर दिखेंगे.
अब एक ही सदस्यता में कई बुनियादी प्लान और ऑफ़र हो सकते हैं. पहले बनाए गए सदस्यता एसकेयू अब Play Console में, सदस्यता, बुनियादी प्लान, और ऑफ़र ऑब्जेक्ट के तौर पर दिखते हैं. अगर आपने अब तक ऐसा नहीं किया है, तो Play Console में, सदस्यताओं से जुड़े हाल ही में किए गए बदलाव लेख पढ़ें. इसमें नए ऑब्जेक्ट के बारे में बताया गया है. साथ ही, उनके काम करने के तरीके और कॉन्फ़िगरेशन के बारे में भी जानकारी दी गई है. आपकी सभी मौजूदा सदस्यताएं, Google Play Console में इस नए फ़ॉर्मैट में दिखती हैं. अब हर एसकेयू को सदस्यता ऑब्जेक्ट के तौर पर दिखाया जाता है. इसमें एक बुनियादी प्लान और पुराने सिस्टम के साथ काम करने वाला ऑफ़र शामिल होता है. हालांकि, यह ऑफ़र तब ही शामिल होता है, जब लागू हो.
पुराने इंटिग्रेशन में, हर सदस्यता में एक ही ऑफ़र शामिल होना चाहिए. इसे SkuDetails ऑब्जेक्ट के तौर पर दिखाया जाता है. इसलिए, हर सदस्यता में पुराने सिस्टम के साथ काम करने वाला एक ही बुनियादी प्लान या ऑफ़र हो सकता है.
पुराने सिस्टम के साथ काम करने वाले बुनियादी प्लान या ऑफ़र को, ऐसे ऐप्लिकेशन के लिए एसकेयू के तौर पर दिखाया जाता है जो अब काम नहीं करने वाले querySkuDetailsAsync() तरीके का इस्तेमाल कर रहे हैं.
पुराने सिस्टम के साथ काम करने वाले ऑफ़र को कॉन्फ़िगर करने और मैनेज करने के बारे में ज़्यादा जानने के लिए, सदस्यताओं के बारे में जानकारी लेख पढ़ें. जब आपका ऐप्लिकेशन सिर्फ़ queryProductDetailsAsync() का इस्तेमाल कर रहा हो और आपके ऐप्लिकेशन के पुराने वर्शन से खरीदारी न की जा रही हो, तब आपको पुराने सिस्टम के साथ काम करने वाले ऑफ़र का इस्तेमाल करने की ज़रूरत नहीं होती.
Subscriptions Publishing API की मदद से सदस्यताएं मैनेज करना
Play Developer API में, सदस्यताएं खरीदने के लिए नई सुविधा शामिल की गई है. एसकेयू मैनेजमेंट के लिए inappproducts एपीआई पहले की तरह काम करता रहेगा. इसमें एक बार की जाने वाली खरीदारी के लिए उपलब्ध प्रॉडक्ट और सदस्यताओं को मैनेज करना भी शामिल है. इसलिए, आपको इंटिग्रेशन बनाए रखने के लिए तुरंत कोई बदलाव करने की ज़रूरत नहीं है.
हालांकि, यह ध्यान रखना ज़रूरी है कि Google Play Console सिर्फ़ नई सदस्यता इकाइयों का इस्तेमाल करता है. Console में जाकर सदस्यताएं बदलने की सुविधा चालू करने के बाद, inappproducts API का इस्तेमाल नहीं किया जा सकेगा.
अगर आपने मई 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 |
एपीआई को अपडेट करने की यह ज़रूरी शर्त, सिर्फ़ Publishing API (एसकेयू मैनेजमेंट) पर लागू होती है.
Play Billing Library में बदलाव
धीरे-धीरे माइग्रेट करने की सुविधा देने के लिए, Play Billing Library में वे सभी तरीके और ऑब्जेक्ट शामिल हैं जो पिछले वर्शन में उपलब्ध थे.
SkuDetails
ऑब्जेक्ट और फ़ंक्शन जैसे कि
querySkuDetailsAsync()
अब भी मौजूद हैं, ताकि आप नई सुविधाओं का इस्तेमाल करने के लिए अपग्रेड कर सकें. इसके लिए, आपको मौजूदा सदस्यता के कोड को तुरंत अपडेट करने की ज़रूरत नहीं होगी.
इन तरीकों से उपलब्ध कराए जाने वाले ऑफ़र को भी कंट्रोल किया जा सकता है. इसके लिए, उन्हें बैकवर्ड-कंपैटिबल के तौर पर मार्क करें.
Play Billing Library 5 में, लेगसी वर्शन के तरीकों के साथ-साथ अब एक नया ProductDetails ऑब्जेक्ट और उससे जुड़ा queryProductDetailsAsync() तरीका भी शामिल है. इससे नई इकाइयों और सुविधाओं को मैनेज किया जा सकता है. ProductDetails अब ऐप्लिकेशन में खरीदारी के लिए मौजूद मौजूदा प्रॉडक्ट (वन-टाइम खरीदारी और इस्तेमाल किए जा सकने वाले प्रॉडक्ट) के साथ भी काम करता है.
किसी सदस्यता के लिए, ProductDetails.getSubscriptionOfferDetails(), सभी बुनियादी प्लान और उन ऑफ़र की सूची दिखाता है जिन्हें उपयोगकर्ता खरीद सकता है.
इसका मतलब है कि उपयोगकर्ता के लिए ज़रूरी शर्तें पूरी करने वाले सभी बुनियादी प्लान और ऑफ़र को ऐक्सेस किया जा सकता है. भले ही, वे पुराने सिस्टम के साथ काम करते हों या नहीं.
getSubscriptionOfferDetails() सदस्यता के अलावा अन्य प्रॉडक्ट के लिए null. एक बार की जाने वाली खरीदारी के लिए, getOneTimePurchaseOfferDetails() का इस्तेमाल किया जा सकता है.
Play Billing Library 5 में, खरीदारी की प्रोसेस शुरू करने के नए और पुराने, दोनों तरीके शामिल हैं. अगर BillingFlowParams ऑब्जेक्ट को SkuDetails ऑब्जेक्ट का इस्तेमाल करके कॉन्फ़िगर किया गया है, तो सिस्टम, एसकेयू से जुड़े पुराने सिस्टम के साथ काम करने वाले बुनियादी प्लान या ऑफ़र से, ऑफ़र की जानकारी निकालता है.BillingClient.launchBillingFlow() अगर BillingFlowParams ऑब्जेक्ट को ProductDetailsParams ऑब्जेक्ट का इस्तेमाल करके कॉन्फ़िगर किया जाता है, तो सिस्टम उस जानकारी का इस्तेमाल करके यह पता लगाता है कि उपयोगकर्ता कौनसे प्रॉडक्ट को हासिल कर रहा है. ProductDetailsParams ऑब्जेक्ट में ProductDetails और String शामिल होते हैं. String, खरीदे जा रहे ऑफ़र के लिए खास ऑफ़र टोकन को दिखाता है.BillingClient.launchBillingFlow()
queryPurchasesAsync(), उपयोगकर्ता के मालिकाना हक वाली सभी खरीदारी की जानकारी दिखाता है. अनुरोध किए गए प्रॉडक्ट टाइप को दिखाने के लिए, BillingClient.SkuType वैल्यू पास की जा सकती है. यह पुराने वर्शन की तरह ही है. इसके अलावा, QueryPurchasesParams ऑब्जेक्ट भी पास किया जा सकता है. इसमें BillingClient.ProductType वैल्यू होती है, जो नई सदस्यता इकाइयों को दिखाती है.
हमारा सुझाव है कि आप जल्द ही अपने ऐप्लिकेशन को अपडेट करके लाइब्रेरी के पांचवें वर्शन पर ले जाएं, ताकि सदस्यता से जुड़ी इन नई सुविधाओं का फ़ायदा लिया जा सके.
सदस्यता की स्थिति मैनेज करना
इस सेक्शन में, Google Play के बिलिंग सिस्टम के इंटिग्रेशन के बैकएंड कॉम्पोनेंट में हुए मुख्य बदलावों के बारे में बताया गया है. इन बदलावों को वर्शन 5 पर माइग्रेट करने के लिए लागू करना ज़रूरी है.
डेवलपर से जुड़ी रीयल-टाइम सूचनाएं
जल्द ही, SubscriptionNotification ऑब्जेक्ट में subscriptionId नहीं होगा. अगर आपको सदस्यता वाले प्रॉडक्ट की पहचान करने के लिए इस फ़ील्ड पर भरोसा है, तो आपको इसे अपडेट करना चाहिए. इसके लिए, सूचना मिलने के बाद purchases.subscriptionv2:get का इस्तेमाल करके, सदस्यता की स्थिति से यह जानकारी पाएं. खरीदारी की स्थिति के हिस्से के तौर पर दिखाए गए lineItems कलेक्शन में मौजूद हर SubscriptionPurchaseLineItem एलिमेंट में, उससे जुड़ा productId शामिल होगा.
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.offerPhase (इससे मौजूदा फ़ेज़ का पता चलता है: मुफ़्त में आज़माने की सुविधा, शुरुआती कीमत, आनुपातिक शुल्क, सामान्य कीमत) |
| (कोई मिलता-जुलता फ़ील्ड नहीं है) | lineItems (list of
SubscriptionPurchaseLineItem)
that represents the products acquired with the purchase |
| (कोई मिलता-जुलता फ़ील्ड नहीं है) | 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 |
lineItems.offerPhase.introductoryPriceयह जानकारी, खरीदी गई हर सदस्यता के लिए 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
Play Console की तरह ही, क्षेत्र के हिसाब से कीमतें तय करने के लिए, monetization.convertRegionPrices एंडपॉइंट का इस्तेमाल करें. इस तरीके में, Play पर इस्तेमाल की जा सकने वाली किसी भी मुद्रा में एक कीमत स्वीकार की जाती है. साथ ही, उन सभी देशों/इलाकों के लिए बदली गई कीमतें (जहां लागू हो वहां टैक्स की डिफ़ॉल्ट दर भी शामिल है) दिखाई जाती हैं जहां Google Play पर खरीदारी की जा सकती है.