सदस्यता की खरीदारी, अपने पूरे लाइफ़साइकल के दौरान कई अलग-अलग स्थितियों से गुज़र सकती है. यह कई बातों पर निर्भर करता है. जैसे, अपने-आप रिन्यू होने की सुविधा, पेमेंट अस्वीकार होने की स्थितियां, और डेवलपर की मैनेजमेंट कार्रवाइयां.
अपने-आप रिन्यू होने वाली सदस्यताओं का लाइफ़साइकल मैनेज करना
जब किसी उपयोगकर्ता की सदस्यता की स्थिति बदलती है, तो आपके बैकएंड सर्वर को एक
SubscriptionNotification
मैसेज मिलता है
अपने बैकएंड में स्थिति अपडेट करने के लिए, सूचना में शामिल परचेज़ टोकन के साथ purchases.subscriptionsv2.get
एपीआई को कॉल करें. यह एंडपॉइंट, खरीदारी के टोकन के आधार पर सदस्यता की नई स्थिति दिखाता है. साथ ही, इसे सदस्यता मैनेजमेंट के लिए सटीक जानकारी देने वाला सोर्स माना जाता है.
खरीदारी का टोकन, सदस्यता के साइन अप से लेकर खत्म होने के 60 दिनों बाद तक मान्य होता है. इस तारीख के बाद, Google Play Developer API को कॉल करने के लिए, खरीदारी टोकन का इस्तेमाल नहीं किया जा सकेगा.
अपने-आप रिन्यू होने वाली नई सदस्यताएं खरीदना
जब कोई उपयोगकर्ता सदस्यता खरीदता है, तो आपके RTDN क्लाइंट को SubscriptionNotification
मैसेज भेजा जाता है. इस मैसेज का टाइप SUBSCRIPTION_PURCHASED
होता है. चाहे आपको यह सूचना मिले या आपने PurchasesUpdatedListener
के ज़रिए इन-ऐप्लिकेशन खरीदारी रजिस्टर की हो या फिर आपने अपने ऐप्लिकेशन के onResume()
तरीके से खरीदारी को मैन्युअल तरीके से फ़ेच किया हो, आपको नई खरीदारी को अपने सुरक्षित बैकएंड में प्रोसेस करना चाहिए. ऐसा करने के लिए, इन चरणों का अनुसरण करें:
- सदस्यता का ऐसा संसाधन पाने के लिए,
purchases.subscriptionsv2.get
एंडपॉइंट से क्वेरी करें जिसमें सदस्यता की मौजूदा स्थिति शामिल हो. - पक्का करें कि
subscriptionState
फ़ील्ड की वैल्यूSUBSCRIPTION_STATE_ACTIVE
हो. - खरीदारी की पुष्टि करें.
- उपयोगकर्ता को कॉन्टेंट का ऐक्सेस दें. अगर खरीदारी के समय
setObfuscatedAccountId
औरsetObfuscatedProfileId
का इस्तेमाल करके आइडेंटिफ़ायर सेट किए गए थे, तो सदस्यता संसाधन केExternalAccountIdentifiers
ऑब्जेक्ट की मदद से, खरीदारी से जुड़े उपयोगकर्ता खाते की पहचान की जा सकती है.
Play Billing Library में, सदस्यता की पुष्टि करने का तरीका भी शामिल है,
acknowledgePurchase()
. साथ ही, पुष्टि की स्थिति देखने का तरीका भी शामिल है,
isAcknowledged()
.
हालांकि, हमारा सुझाव है कि बेहतर सुरक्षा के लिए, खरीदारी की प्रोसेस को अपने बैकएंड में मैनेज करें.
नई खरीदारी के लिए सदस्यता का संसाधन, नीचे दिए गए उदाहरण जैसा दिखता है:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
"startTime": "2022-04-22T18:39:58.270Z",
"regionCode": "US",
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"latestOrderId": "GPA.3333-4137-0319-36762",
"acknowledgementState": "ACKNOWLEDGEMENT_STATE_PENDING", // need to acknowledge new purchases
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
],
}
सदस्यता रिन्यू करना
बिना किस्त वाली, अपने-आप रिन्यू होने वाली सदस्यताओं के लिए, सदस्यता रिन्यू होने पर SUBSCRIPTION_RENEWED
सूचना भेजी जाती है. किस्तों में पैसे चुकाकर ली जाने वाली सदस्यताओं के लिए, बिलिंग की तारीख को हर बार पैसे चुकाने पर, आपको SUBSCRIPTION_RENEWED
सूचना भेजी जाती है. पक्का करें कि उपयोगकर्ता के पास अब भी सदस्यता का एनटाइटलमेंट है. इसके बाद, Google Play Developer API से मिले सदस्यता संसाधन में दिए गए नए expiryTime
की मदद से, सदस्यता की स्थिति अपडेट करें. सदस्यता का संसाधन, नीचे दिए गए उदाहरण जैसा दिखता है:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
"startTime": "2022-04-22T18:39:58.270Z",
"regionCode": "US",
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"latestOrderId": "GPA.3333-4137-0319-36762",
"acknowledgementState": "ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED",
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
]
}
आपको सदस्यता के रिन्यूअल की पुष्टि करने की ज़रूरत नहीं है.
ग्रेस पीरियड
अगर सदस्यता रिन्यू करने के दौरान पेमेंट से जुड़ी समस्याएं आती हैं, तो Google उपयोगकर्ता को इसकी सूचना देता है. साथ ही, सदस्यता खत्म होने से कुछ समय पहले, समय-समय पर सदस्यता रिन्यू करने की कोशिश करता है. खाता वापस पाने की इस अवधि में, ग्रेस पीरियड के बाद खाते पर रोक लगाने की अवधि शामिल हो सकती है. ग्रेस पीरियड के दौरान, उपयोगकर्ता के पास सदस्यता के तहत मिलने वाले अधिकारों का ऐक्सेस होना चाहिए.
queryPurchasesAsync()
के हिसाब से, ग्रेस पीरियड के दौरान की गई खरीदारी को लौटाया जा सकता है. अगर आपका ऐप्लिकेशन, किसी उपयोगकर्ता के पास सदस्यता लेने का अधिकार है या नहीं, यह पता लगाने के लिए सिर्फ़ queryPurchasesAsync
पर निर्भर करता है, तो आपका ऐप्लिकेशन ग्रेस पीरियड को अपने-आप मैनेज कर लेगा. ऐसा इसलिए, क्योंकि ये सदस्यताएं Play Billing Library में चालू के तौर पर दिखती हैं.
सदस्यता की स्थिति को अपने बैकएंड के साथ सिंक करने से, आपको पेमेंट अस्वीकार होने के बारे में ज़्यादा जानकारी मिलती है. साथ ही, अनचाहे चर्न आउट को कम करने के लिए, आपको ज़्यादा जानकारी मिलती है. जब उपयोगकर्ता ग्रेस पीरियड में प्रवेश करता है, तब सूचना पाने के लिए, SUBSCRIPTION_IN_GRACE_PERIOD
टाइप वाले SubscriptionNotification
मैसेज सुनें. जब उपयोगकर्ता ग्रेस पीरियड में होता है, तो सदस्यता के संसाधन में autoRenewEnabled = true
होता है. Google Play, ग्रेस पीरियड खत्म होने तक expiryTime
वैल्यू को डाइनैमिक तौर पर बढ़ाता रहता है. ऐसा इसलिए होता है, क्योंकि एनटाइटलमेंट तब तक बना रहना चाहिए, जब तक उपयोगकर्ता उसे रद्द नहीं कर देता या ग्रेस पीरियड की तय अवधि खत्म नहीं हो जाती. इस अवधि के दौरान subscriptionState
फ़ील्ड की वैल्यू SUBSCRIPTION_STATE_IN_GRACE_PERIOD
है. सदस्यता का संसाधन, नीचे दिए गए उदाहरण जैसा दिखता है:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_IN_GRACE_PERIOD",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_future,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
],
}
Play, ग्रेस पीरियड में रहने वाले उपयोगकर्ताओं को बताता है कि उनका पेमेंट अस्वीकार कर दिया गया है. साथ ही, उन्हें Play Store में जाकर, पेमेंट के तरीके से जुड़ी समस्याएं ठीक करने के लिए कहा जाता है. जब कोई उपयोगकर्ता ग्रेस पीरियड में होता है, तो आपको उसे पेमेंट के तरीके को ठीक करने के लिए भी कहना चाहिए. ऐसा तब करना चाहिए, जब पेमेंट न होने की वजह उपयोगकर्ता की गलती न हो. इन-ऐप्लिकेशन मैसेजिंग एपीआई का इस्तेमाल करके, ऐसा आसानी से किया जा सकता है. अगर उपयोगकर्ता आपका ऐप्लिकेशन खोलता है, तो इस एपीआई को कॉल करने पर, उसे स्नैकबार में कुछ समय के लिए Play का एक मैसेज दिखता है. इसमें उपयोगकर्ता को बताया जाता है कि उसका पेमेंट अस्वीकार कर दिया गया है. इस मैसेज में, उपयोगकर्ता के लिए एक डीप लिंक भी शामिल होता है. इसकी मदद से, वह Google Play पर पेमेंट का तरीका ठीक कर सकता है.
उपयोगकर्ता के पेमेंट का तरीका ठीक करने के बाद, सदस्यता रिन्यू हो जाती है. रिन्यूअल की तारीख वही रहती है जो सदस्यता खरीदते समय तय की गई थी. सदस्यता रिन्यू करना सेक्शन में बताए गए तरीके से, रिन्यूअल को मैनेज किया जा सकता है.
अगर उपयोगकर्ता ग्रेस पीरियड के दौरान, पेमेंट का तरीका ठीक नहीं करता है, तो सदस्यता पर खाते पर रोक लगा दी जाएगी. साथ ही, उसके पास सदस्यता का एनटाइटलमेंट नहीं रहेगा.
ग्रेस पीरियड के दौरान खाते का ऐक्सेस और उसे वापस पाना
दूसरी इमेज में, ग्रेस पीरियड में चल रही सदस्यता की टाइमलाइन दिखाई गई है. साथ ही, यह भी दिखाया गया है कि उपयोगकर्ता के पेमेंट का तरीका ठीक करने पर, सदस्यता कैसे वापस मिलती है. ग्रेस पीरियड खत्म होने के बाद, उपयोगकर्ता को सदस्यता के फ़ायदे नहीं मिलेंगे और उसके खाते पर रोक लगा दी जाएगी.

इन बातों का ध्यान रखना ज़रूरी है:
- ग्रेस पीरियड के दौरान, उपयोगकर्ता के पास सदस्यता के फ़ायदों का ऐक्सेस बना रहेगा.
- जब ग्रेस पीरियड के दौरान सदस्यता वापस मिलती है, तो रिन्यूअल की तारीख रीसेट नहीं होती.
- अगर ग्रेस पीरियड को बढ़ाया जाता है, जैसे कि सात दिन से 14 दिन, तो ग्रेस पीरियड के दौरान मौजूद उपयोगकर्ताओं को सदस्यता के फ़ायदों का ऐक्सेस ज़्यादा समय तक मिलता है.
- ग्रेस पीरियड कम करने पर, जिन उपयोगकर्ताओं का ग्रेस पीरियड, नए ग्रेस पीरियड से ज़्यादा है उनकी सदस्यता के फ़ायदे तुरंत रद्द कर दिए जाते हैं. उदाहरण के लिए, अगर ग्रेस पीरियड को 14 दिन से घटाकर 7 दिन कर दिया जाता है, तो पुराने ग्रेस पीरियड के 8 से 14 दिन के बीच के उपयोगकर्ताओं की सदस्यता के फ़ायदे तुरंत रद्द कर दिए जाते हैं.
- सदस्यता चालू रहती है और साइलेंट ग्रेस पीरियड खत्म होने तक, आपको ग्रेस पीरियड का आरटीडीएन नहीं मिलेगा
साइलेंट ग्रेस पीरियड
ग्रेस पीरियड के तौर पर 0 दिन सेट किए जा सकते हैं. हालांकि, Play कम से कम एक दिन तक इंतज़ार करेगा, ताकि पेमेंट दोबारा करने के लिए ज़रूरत के मुताबिक समय मिल सके. इस साइलेंट ग्रेस पीरियड की मदद से, पेमेंट प्रोसेस करने के लिए एक सुरक्षा कवच मिलता है. इस 24‑घंटे की अवधि के दौरान, सदस्यता ACTIVE
स्थिति में बनी रहती है.
सदस्यता की स्थिति में होने वाले बदलावों के बारे में अप-टू-डेट रहने का सबसे अच्छा तरीका यह है कि आप रीयल-टाइम डेवलपर सूचनाओं (आरटीडीएन) को सुनें और उन पर प्रतिक्रिया दें. सदस्यता की ज़्यादा सटीक स्थिति पाने के लिए, सदस्यता खत्म होने के समय के बजाय, आरटीडीएन के समय पर purchases.subscriptionsv2.get()
तरीका आज़माएं.
24 घंटे के साइलेंट ग्रेस पीरियड के बाद, सदस्यता की स्थिति के आधार पर, आपको इनमें से कोई एक सूचना मिलेगी:
SUBSCRIPTION_ON_HOLD
(अगर चालू है)SUBSCRIPTION_CANCELED
(अगर रद्द किया गया है)SUBSCRIPTION_EXPIRED
(अगर समयसीमा खत्म हो गई है)SUBSCRIPTION_RENEWED
(अगर सदस्यता रिन्यू हो गई है)
सदस्यता की नई स्थिति जानने के लिए, 24 घंटे के साइलेंट ग्रेस पीरियड के बाद, किसी भी समय subscriptionV2.get()
का इस्तेमाल किया जा सकता है.
खाते पर रोक लगने की अवधि
अगर सदस्यता रिन्यू करने के दौरान पेमेंट से जुड़ी समस्याएं आती हैं, तो ग्रेस पीरियड खत्म होने के बाद, खाते पर रोक की अवधि शुरू हो जाती है. किसी सदस्य के खाते पर रोक लग जाने पर, आपको सदस्यता के तहत मिलने वाले एनटाइटलमेंट का ऐक्सेस बंद कर देना चाहिए.
खाते पर रोक लगाने के दौरान, आपको ज़रूरत के हिसाब से सदस्यताओं को रद्द करने, फिर से चालू करने या सदस्यताओं को फिर से खरीदने की प्रोसेस को मैनेज करना जारी रखना चाहिए. ऐसा इसलिए, क्योंकि सदस्यता पर रोक लगाने के दौरान भी उपयोगकर्ता ये बदलाव कर सकता है.
जब उपयोगकर्ता के खाते पर रोक लगाई जाती है, तब आरटीडीएन आपको इसकी सूचना देते हैं. इससे, आपके पास जल्द से जल्द उपयोगकर्ता को यह बताने का विकल्प होता है कि सदस्यता का ऐक्सेस निलंबित क्यों किया गया. इन-ऐप्लिकेशन मैसेजिंग एपीआई का इस्तेमाल करके, ऐसा आसानी से किया जा सकता है. जब कोई उपयोगकर्ता आपका ऐप्लिकेशन खोलेगा, तब इस एपीआई को कॉल करने पर, उसे स्नैकबार में एक मैसेज दिखेगा. इसमें उसे बताया जाएगा कि उसका पेमेंट अस्वीकार कर दिया गया है. इस मैसेज में, उपयोगकर्ता के लिए एक डीप लिंक भी शामिल होता है. इसकी मदद से, वह Google Play पर पेमेंट के तरीके से जुड़ी समस्या हल कर सकता है.
अगर आपके उपयोगकर्ता, सदस्यता वाले कॉन्टेंट को आपके ऐप्लिकेशन के बाहर ऐक्सेस कर सकते हैं, तो उन्हें पता चल सकता है कि उनके पास अलग-अलग प्लैटफ़ॉर्म पर कॉन्टेंट का ऐक्सेस नहीं है. उपयोगकर्ता को यह बताने के लिए कि पेमेंट अस्वीकार होने की वजह से उसकी सदस्यता अब चालू नहीं है, आपके पास उसे पुश नोटिफ़िकेशन या ईमेल भेजने का विकल्प है.
खाते पर रोक लगाए जाने के दौरान, queryPurchasesAsync()
के तरीके से सदस्यता वापस नहीं मिलती. इसलिए, अगर आपका ऐप्लिकेशन मौजूदा खरीदारी दिखाने के लिए इस तरीके का इस्तेमाल करता है, तो आपको डिफ़ॉल्ट रूप से खाते पर रोक लगाने की सुविधा देनी चाहिए.
डेवलपर से जुड़ी रीयल-टाइम सूचनाओं की मदद से, आपको SUBSCRIPTION_ON_HOLD
टाइप के साथ SubscriptionNotification
मैसेज मिलता है. यह मैसेज तब मिलता है, जब किसी सदस्य के खाते पर रोक लगाई जाती है. सदस्यता की नई जानकारी पाने के लिए, अपने सुरक्षित बैकएंड सर्वर से purchases.subscriptionsv2.get
तरीका कॉल करें. खाते पर रोक लगाए जाने के दौरान, सदस्यता के संसाधन के expiryTime
फ़ील्ड को किसी पुराने टाइमस्टैंप पर सेट किया जाता है. साथ ही, subscriptionState
फ़ील्ड को SUBSCRIPTION_STATE_ON_HOLD
पर सेट किया जाता है:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ON_HOLD",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_past,
...
}
],
}
ऐक्सेस वापस पाने के लिए, उपयोगकर्ताओं को पेमेंट का तरीका ठीक करना होगा. Play, खाते में रोके गए पैसों के बारे में उपयोगकर्ताओं को बताता है. साथ ही, आपको भी उन्हें पेमेंट के तरीके को ठीक करने के लिए कहना चाहिए.
उपयोगकर्ता के पेमेंट का तरीका ठीक करने के बाद, सदस्यता फिर से चालू हो जाती है. इसके बाद, आपको सदस्यता वाले कॉन्टेंट का ऐक्सेस वापस देना होगा. इस मामले में, खरीदारी का टोकन वही होता है जो खाते पर रोक लगाए जाने से पहले था. ऐसा इसलिए होता है, क्योंकि उसी खरीदारी को वापस लाया जा रहा है. साथ ही, आपको SUBSCRIPTION_RECOVERED
टाइप वाला आरटीडीएन मिलता है.
किस्त में पैसे चुकाकर ली जाने वाली सदस्यताओं के लिए, पेमेंट के हर प्रयास पर पेमेंट अस्वीकार होने और पैसे वापस आने की स्थिति हो सकती है.
सदस्यता वापस मिलने के बाद, Play Billing Library, queryPurchasesAsync()
तरीके से सदस्यता को फिर से दिखाती है. अगर किसी उपयोगकर्ता के पास सदस्यता का एनटाइटलमेंट है या नहीं, यह पता करने के लिए इस तरीके का इस्तेमाल किया जाता है, तो आपका ऐप्लिकेशन खाते के रोके जाने की स्थिति से सदस्यता को अपने-आप वापस ला देगा.
सदस्यता वापस मिलने और उपयोगकर्ता को ऐक्सेस वापस मिलने पर सूचना पाने के लिए, SUBSCRIPTION_RECOVERED
टाइप के SubscriptionNotification
मैसेज को सुनें. अगर इस सूचना के बाद सदस्यता के लिए क्वेरी की जाती है, तो expiryTime
फ़ील्ड को आने वाले समय में टाइमस्टैंप पर सेट किया जाता है और subscriptionState
फ़ील्ड को फिर से SUBSCRIPTION_STATE_ACTIVE
पर सेट किया जाता है:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
...
}
],
}
अगर उपयोगकर्ता, खाते को रोके जाने की अवधि खत्म होने से पहले, पेमेंट का तरीका ठीक नहीं करता है, तो आपको SUBSCRIPTION_CANCELED
टाइप वाला आरटीडीएन मिलेगा. रद्द करने की प्रोसेस को मैनेज करने के बारे में निर्देश पाने के लिए, रद्द करना लेख पढ़ें. इस तरह रद्द की गई सदस्यता के लिए क्वेरी करने पर, दिखाया गया expiryTime
फ़ील्ड किसी पुराने टाइमस्टैंप पर सेट होता है:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_past,
...
}
],
}
खाते पर रोक लगाने के दौरान सदस्यता रद्द होने की सूचना मिलने के तुरंत बाद, आपको SUBSCRIPTION_EXPIRED
टाइप का आरटीडीएन भी मिलेगा. ऐसा इसलिए होगा, क्योंकि उपयोगकर्ता के पास पैसे चुकाकर लिया गया एनटाइटलमेंट नहीं है और सदस्यता रद्द होने के बाद, वह चर्न आउट हो गया है.
समयसीमा खत्म होने की इस समस्या को, हमेशा की तरह ही हल किया जा सकता है.
उपयोगकर्ता, उसी सदस्यता प्लान को फिर से खरीदकर या ऐप्लिकेशन के ज़रिए ऑफ़र किए गए किसी भी दूसरे प्लान को खरीदकर, ऐक्सेस वापस पा सकता है. यह प्लान, खाते के निलंबन की अवधि के दौरान खरीदा जा सकता है. ऐसे में, एक नया परचेज़ टोकन जारी किया जाता है और नई वैल्यू, SUBSCRIPTION_PURCHASED
इवेंट के हिस्से के तौर पर दिखाई जाती है. यह इवेंट, नए इंस्टेंस को दिखाता है.
खाते पर रोक लगने के बाद, उसका ऐक्सेस और उसे वापस पाना
तीसरे चित्र में, खाते को होल्ड में रखने और फिर उपयोगकर्ता के पेमेंट का तरीका ठीक करने पर, सदस्यता वापस पाने की टाइमलाइन दिखाई गई है.

पिछले उदाहरण की तरह ही, चौथे चित्र में एक सदस्यता की टाइमलाइन दिखाई गई है. यह सदस्यता, खाते पर रोक लगने से पहले ग्रेस पीरियड में चलती है. इसके बाद, खाते पर रोक लगने के दौरान सदस्यता फिर से चालू हो जाती है.

इन बातों का ध्यान रखना ज़रूरी है:
- किसी सदस्यता को खाते से रोके जाने से पहले, Google Play 48 घंटों तक पेमेंट के तरीके से शुल्क लेने की कोशिश करता है. इस दौरान, उपयोगकर्ता को सदस्यता के फ़ायदे मिलते रहेंगे. फिर से कोशिश करने की यह अवधि खत्म होने के बाद, सदस्यता को खाते पर रोक लगा दी जाती है. साथ ही, उपयोगकर्ता को सदस्यता के फ़ायदों का ऐक्सेस नहीं मिलता.
- जब सदस्यता को रोके जाने की स्थिति से, पैसे चुकाने के तरीके के काम न करने पर उसे फिर से शुरू किया जाता है, तो सदस्यता सीधे खाते पर रोक लगने की स्थिति में चली जाती है.
- जब खाते पर लगी रोक हट जाती है, तो सदस्यता रिन्यू करने की तारीख रीसेट हो जाती है.
समय सीमा खत्म होना
सदस्यता की समयसीमा खत्म होने के बाद, उपयोगकर्ता के पास सदस्यता का ऐक्सेस नहीं होना चाहिए. ऐसे में, SUBSCRIPTION_EXPIRED
टाइप वाला SubscriptionNotification
मैसेज भेजा जाता है. यह सूचना मिलने पर, सदस्यता से जुड़ा सबसे नया संसाधन पाने के लिए, Google Play Developer API से क्वेरी करें.
subscriptionState
SUBSCRIPTION_STATE_EXPIRED
है, इसकी पुष्टि करने के बाद एनटाइटलमेंट हटाएं और अपने बैकएंड में खरीदारी की स्थिति को अमान्य के तौर पर रजिस्टर करें. सदस्यता का संसाधन, नीचे दिए गए उदाहरण जैसा दिखता है:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_EXPIRED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time_in_past,
...
}
],
}
रद्द की गई सदस्यताएं
कोई उपयोगकर्ता, Play के सदस्यता केंद्र से अपनी सदस्यता को अपनी मर्ज़ी से रद्द कर सकता है. इसके अलावा, अगर खाता रोके जाने के बाद भी खाता वापस नहीं मिलता है, तो उसकी सदस्यता अपने-आप रद्द हो जाएगी. डेवलपर, purchases.subscriptions.cancel
का इस्तेमाल करके भी सदस्यता रद्द करने की प्रोसेस को ट्रिगर कर सकते हैं. सदस्यता रद्द करने के बाद, उपयोगकर्ता के पास मौजूदा बिलिंग साइकल के खत्म होने तक कॉन्टेंट का ऐक्सेस बना रहता है. बिलिंग साइकल खत्म होने पर, ऐक्सेस रद्द कर दिया जाना चाहिए.
अपने-आप रिन्यू होने वाली सदस्यता को रद्द करने पर, SUBSCRIPTION_CANCELED
सूचना ट्रिगर होती है. जब आपको यह सूचना मिलती है, तो Google Play Developer API से मिले सदस्यता संसाधन में subscriptionState
फ़ील्ड को SUBSCRIPTION_STATE_CANCELED
पर सेट किया जाता है. साथ ही, expiryTime
फ़ील्ड में वह तारीख होती है जब उपयोगकर्ता के पास सदस्यता का ऐक्सेस नहीं रहेगा. अगर वह तारीख बीत चुकी है, तो उपयोगकर्ता को एनटाइटलमेंट तुरंत हटा देना चाहिए. उदाहरण के लिए, ऐसा तब हो सकता है, जब पेमेंट अस्वीकार होने की वजह से खाता रोके जाने के दौरान कोई उपयोगकर्ता सदस्यता रद्द कर दे.
रद्द की गई खरीदारी के लिए सदस्यता का संसाधन, नीचे दिए गए उदाहरण जैसा दिखता है:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time,
...
}
],
}
किस्तों में पैसे चुकाकर ली जाने वाली सदस्यताओं के लिए, उपयोगकर्ता के सदस्यता रद्द करने पर SUBSCRIPTION_CANCELLATION_SCHEDULED
सूचना भेजी जाती है. ऐसा तब किया जाता है, जब सदस्यता की अवधि के दौरान पेमेंट बाकी हों. सदस्यता रद्द करने का अनुरोध अभी तक स्वीकार नहीं किया गया है. यह अनुरोध, कमिटमेंट की मौजूदा अवधि खत्म होने के बाद लागू होगा. जब आपको यह सूचना मिलती है, तो Google Play Developer API से मिले सदस्यता संसाधन में, subscriptionState फ़ील्ड को SUBSCRIPTION_STATE_ACTIVE
पर सेट किया जाता है. ऐसा इसलिए होता है, क्योंकि कमिटमेंट की अवधि खत्म होने तक, किस्तों में पैसे चुकाकर ली जाने वाली सदस्यता चालू रहती है.
हालांकि, pendingCancellation ऑब्जेक्ट खाली है.
SUBSCRIPTION_CANCELED
सूचना भेजी जाती है. इसके बाद, कमिटमेंट की अवधि खत्म होने पर SUBSCRIPTION_EXPIRED
सूचना भेजी जाती है.
किस्तों में पैसे चुकाकर ली जाने वाली सदस्यता की खरीदारी, रद्द होने के लिए बाकी है. इस सदस्यता का संसाधन, नीचे दिए गए उदाहरण जैसा दिखता है:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_plan01",
"expiryTime": expiration_time,
"autoRenewingPlan": {
"autoRenewEnabled": true,
"recurringPrice": {
"currencyCode": "USD",
"units": "1",
"nanos": 990000000
},
"installmentDetails": {
"initialCommittedPaymentsCount": 6,
"remainingCommittedPaymentsCount": 5,
"pendingCancellation": {}
...
}
}
}
],
}
सदस्यता रद्द होने की वजह जानने के लिए, सदस्यता संसाधन में canceledStateContext
फ़ील्ड देखें. उदाहरण के लिए, यह जानने के लिए कि सदस्यता को उपयोगकर्ता ने रद्द किया है, सिस्टम ने रद्द किया है या आपने रद्द किया है. अगर सदस्यता को उपयोगकर्ता ने रद्द किया है, तो userInitiatedCancellation
फ़ील्ड में जाकर यह पता लगाया जा सकता है कि उपयोगकर्ता ने सदस्यता क्यों रद्द की. इससे आपको कम्यूनिकेशन की रणनीतियां बनाने में मदद मिल सकती है.
अगर कोई सदस्यता रद्द कर दी गई है, लेकिन उसकी समयसीमा खत्म नहीं हुई है, तो उसे queryPurchasesAsync()
से रिफ़ंड किया जाता है.
आपके पास अपने ऐप्लिकेशन में एक मैसेज दिखाने का विकल्प होता है. इसमें उपयोगकर्ता को यह जानकारी दी जा सकती है कि उसकी सदस्यता रद्द कर दी गई है. साथ ही, सदस्यता खत्म होने की तारीख भी दी जा सकती है.
सहमति रद्द करना
सदस्यता कई वजहों से रद्द की जा सकती है. जैसे, आपका बैकएंड purchases.subscriptionsv2.revoke
का इस्तेमाल करके सदस्यता रद्द कर सकता है या खरीदारी के लिए किया गया शुल्क वापस ले सकता है. इस स्थिति में, उपयोगकर्ता के एनटाइटलमेंट को तुरंत रद्द करें. ऐसा होने पर, SubscriptionNotification
मैसेज टाइप के साथ SUBSCRIPTION_REVOKED
मैसेज भेजा जाता है. यह सूचना मिलने पर, Google Play Developer API से मिले सदस्यता संसाधन में subscriptionState
फ़ील्ड को SUBSCRIPTION_STATE_EXPIRED
पर सेट किया जाता है.
रद्द की गई खरीदारी के लिए सदस्यता का संसाधन, नीचे दिए गए उदाहरण जैसा दिखता है:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_EXPIRED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time,
...
}
]
}
बाद में पैसे चुकाकर ली जाने वाली सदस्यताएं
किसी उपयोगकर्ता के एनटाइटलमेंट को बढ़ाने की कई वजहें हो सकती हैं. उदाहरण के लिए, हो सकता है कि आप उपयोगकर्ताओं को खास प्रमोशन के तौर पर मुफ़्त ऐक्सेस ऑफ़र करना चाहें. जैसे, किसी फ़िल्म को खरीदने पर एक हफ़्ते के लिए मुफ़्त ऐक्सेस देना या खरीदारों को भरोसे के तौर पर मुफ़्त ऐक्सेस देना. अपने-आप रिन्यू होने वाली सदस्यता की अगली बिलिंग की तारीख को आगे बढ़ाने के लिए, Play Developer API के purchases.subscriptions.defer
तरीके का इस्तेमाल किया जा सकता है. ऐसा करने पर, SubscriptionNotification
SUBSCRIPTION_DEFERRED
टाइप का मैसेज भेजा जाता है. सदस्यता शुल्क के लिए तय की गई अवधि के दौरान, उपयोगकर्ता के पास आपके कॉन्टेंट का पूरा ऐक्सेस होता है. हालांकि, उससे कोई शुल्क नहीं लिया जाता. सदस्यता रिन्यू करने की तारीख को नई तारीख के तौर पर अपडेट कर दिया जाएगा.
प्रीपेड प्लान के लिए, सदस्यता खत्म होने का समय टालने के लिए, बिलिंग रोकने की सुविधा देने वाले एपीआई का इस्तेमाल किया जा सकता है.
बाद में शुरू होने वाली सदस्यता के लिए सदस्यता संसाधन, नीचे दिए गए उदाहरण जैसा दिखता है:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_future,
...
}
],
}
रोकी गई सदस्यताएं
उपयोगकर्ताओं को सदस्यता रोकने की सुविधा देकर, सदस्यता छोड़ने वाले लोगों की संख्या को कम किया जा सकता है. सदस्यता रोकने की सुविधा चालू करने पर, उपयोगकर्ता अपनी सदस्यता को एक हफ़्ते से लेकर तीन महीने तक रोक सकते हैं. यह सदस्यता के लिए बार-बार पैसे चुकाने की अवधि पर निर्भर करता है.
बार-बार रिन्यू होने वाली सदस्यता | हर हफ़्ते | हर महीने | तीन महीने | छह महीने | सालाना |
---|---|---|---|---|---|
वीडियो को रोकने के लिए उपलब्ध समय* | एक हफ़्ता दो हफ़्ते तीन हफ़्ते चार हफ़्ते |
एक महीना दो महीने तीन महीने |
एक महीना दो महीने तीन महीने |
एक महीना दो महीने तीन महीने |
लागू नहीं |
मौजूदा बिलिंग अवधि खत्म होने के बाद ही आपकी सदस्यता रोकी जाती है. सदस्यता के रोके जाने पर, उपयोगकर्ता के पास कॉन्टेंट का ऐक्सेस नहीं होता. साथ ही, उसे रिन्यूअल की कीमत नहीं चुकानी पड़ती. सदस्यता रोकने की अवधि खत्म होने पर, सदस्यता फिर से शुरू हो जाती है और Google इसे रिन्यू करने की कोशिश करता है. यह प्रोसेस पूरी होने के बाद, सदस्यता फिर से चालू हो जाती है. अगर पेमेंट से जुड़ी समस्या की वजह से, फिर से शुरू करने की प्रोसेस पूरी नहीं हो पाती है, तो उपयोगकर्ता का खाता, 'खाते पर रोक लगी है' स्थिति में चला जाता है. इस स्थिति के बारे में, पांचवें और छठे चित्र में बताया गया है:


उपयोगकर्ता, रोके जाने की अवधि के दौरान किसी भी समय, मैन्युअल तरीके से सदस्यता को फिर से शुरू करने का विकल्प भी चुन सकता है. जैसा कि छठे चित्र में दिखाया गया है. जब कोई उपयोगकर्ता मैन्युअल तरीके से सदस्यता फिर से शुरू करता है, तो बिलिंग की तारीख, मैन्युअल तरीके से सदस्यता फिर से शुरू करने की तारीख में बदल जाती है.
जब किसी उपयोगकर्ता की सदस्यता रोकी जाती है, तो Play Billing Library, queryPurchasesAsync()
तरीके से सदस्यता वापस नहीं करती. अगर सदस्यता फिर से शुरू की जाती है, तो queryPurchasesAsync()
तरीका इसे फिर से दिखाता है.
आरटीडीएन को सुनें, ताकि यह पता चल सके कि उपयोगकर्ता ने सदस्यता रोकी है या नहीं. इन सूचनाओं की मदद से, अपने ऐप्लिकेशन में उपयोगकर्ताओं को यह सूचना भी दी जा सकती है कि उन्होंने अपनी सदस्यता रोक दी है और उनके पास इसका ऐक्सेस नहीं है. आपको उपयोगकर्ता को Google Play के डीप लिंक का इस्तेमाल करके, अपनी सदस्यता को किसी भी समय मैन्युअल तरीके से फिर से शुरू करने का तरीका भी देना चाहिए.
जब कोई उपयोगकर्ता अपनी सदस्यता रोकने की प्रोसेस शुरू करता है, तब SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED
टाइप वाला SubscriptionNotification
मैसेज भेजा जाता है. इस दौरान, उपयोगकर्ता के पास रिन्यूअल की अगली तारीख तक अपनी सदस्यता का ऐक्सेस रहेगा. साथ ही, सदस्यता के संसाधन में autoRenewEnabled = true
मौजूद होगा. इस समय subscriptionState
फ़ील्ड की वैल्यू SUBSCRIPTION_STATE_ACTIVE
है.
रोक लगने पर, SUBSCRIPTION_PAUSED
टाइप वाला SubscriptionNotification
मैसेज भेजा जाता है. ऐसा होने पर, उपयोगकर्ता को अपनी सदस्यता का ऐक्सेस नहीं मिलना चाहिए. साथ ही, सदस्यता के संसाधन में autoRenewEnabled = true
होना चाहिए और subscriptionState
फ़ील्ड SUBSCRIPTION_STATE_PAUSED
पर सेट होना चाहिए. PausedStateContext
ऑब्जेक्ट की जांच करके, यह देखा जा सकता है कि सदस्यता कब फिर से रिन्यू होगी.
SUBSCRIPTION_RENEWED
टाइप वाला SubscriptionNotification
मैसेज तब भेजा जाता है, जब सदस्यता को रोकने की अवधि खत्म होने पर, वह अपने-आप फिर से शुरू हो जाती है या उपयोगकर्ता ने मैन्युअल तरीके से सदस्यता को फिर से शुरू करने का विकल्प चुना हो. इसे सदस्यताएं रिन्यू करना में बताए गए तरीके से मैनेज किया जाना चाहिए.
अगर सदस्यता को रोकने के बाद, उसे फिर से चालू करने के दौरान पेमेंट करने में कोई समस्या आती है, तो SUBSCRIPTION_ON_HOLD
टाइप वाला SubscriptionNotification
मैसेज भेजा जाता है.
इसे खाते पर रोक में बताए गए तरीके से मैनेज किया जाना चाहिए.
फिर से सदस्यता लें
अपने-आप रिन्यू होने वाले सदस्यता के बुनियादी प्लान के लिए, Google Play Store पर फिर से सदस्यता लें बटन दिख सकता है. इस बटन की मदद से, उपयोगकर्ता अपनी सदस्यता का ऐक्सेस फिर से पा सकते हैं. यह कई वजहों से नहीं दिख सकता. उदाहरण के लिए, जब किसी सदस्यता की समयसीमा बहुत पहले खत्म हो गई हो.

इस बटन पर हमेशा फिर से सदस्यता लें लेबल होता है. हालांकि, यह सदस्यता की स्थिति पर निर्भर करता है कि बटन किस तरह काम करेगा.
अगर सदस्यता रद्द कर दी गई है, लेकिन उसकी समयसीमा खत्म नहीं हुई है, तो इसका मतलब है कि उपयोगकर्ता के पास अब भी सदस्यता है और उसे सदस्यता के फ़ायदे मिल रहे हैं. अगर उपयोगकर्ता 'फिर से सदस्यता लें' पर टैप करता है, तो सदस्यता रद्द करने की प्रोसेस पूरी तरह से रद्द हो जाती है और सदस्यता रिन्यू होती रहती है. Play के डेवलपर दस्तावेज़ और एपीआई में, इस कार्रवाई को वापस लाना कहा जाता है.
अपने-आप रिन्यू होने वाली सदस्यता की समयसीमा खत्म होने के बाद, उपयोगकर्ताओं को सदस्यता का वही बुनियादी प्लान खरीदने की अनुमति दी जा सकती है. Play के डेवलपर दस्तावेज़ और एपीआई में, इस कार्रवाई को फिर से सदस्यता लें कहा जाता है. Play Console में या एपीआई का इस्तेमाल करके, हर बुनियादी प्लान के लिए इस विकल्प को कॉन्फ़िगर किया जा सकता है.
समयसीमा खत्म होने से पहले फ़ाइलें वापस लाना
अगर आपका ऐप्लिकेशन, किसी उपयोगकर्ता के पास सदस्यता लेने का अधिकार है या नहीं, यह तय करने के लिए सिर्फ़ queryPurchasesAsync()
के तरीके पर निर्भर करता है, तो आपके ऐप्लिकेशन को सदस्यताएं अपने-आप वापस लानी चाहिए. ऐसा इसलिए, क्योंकि queryPurchasesAsync()
का तरीका, रद्द की गई खरीदारी को उनकी समयसीमा खत्म होने से पहले वापस लाता रहता है. वापस लाई गई सदस्यता, ठीक वैसे ही रिन्यू होती रहेगी जैसे कि उसे रद्द नहीं किया गया हो.
अगर आपका ऐप्लिकेशन, सदस्यता की स्थिति को बैकएंड के साथ सिंक करता है, तो आपको SUBSCRIPTION_RESTARTED
टाइप वाले SubscriptionNotification
मैसेज के लिए सुनना चाहिए. यह आरटीडीएन मिलने के बाद, आपका ऐप्लिकेशन इस सूचना का जवाब दे सकता है. साथ ही, यह रिकॉर्ड कर सकता है कि सदस्यता अब रिन्यू होने के लिए सेट है. इसके बाद, ऐप्लिकेशन में सदस्यता वापस पाने के मैसेज दिखने बंद हो जाएंगे. सदस्यता का संसाधन, इस उदाहरण जैसा दिखता है:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date
...
}
],
}
सदस्यता खत्म होने के बाद फिर से सदस्यता लेना
अगर Google Play Console या एपीआई का इस्तेमाल करके, अपने-आप रिन्यू होने वाले बुनियादी प्लान को कॉन्फ़िगर किया गया है, ताकि उपयोगकर्ता फिर से सदस्यता ले सकें, तो वे Google Play Store में जाकर, समयसीमा खत्म हो चुकी सदस्यता को फिर से खरीद सकते हैं.
ये नई खरीदारी हैं. Google Play, एक नया खरीदारी टोकन जारी करता है. साथ ही, आपके बैकएंड को SUBSCRIPTION_PURCHASED
टाइप वाला आरटीडीएन मिलता है. इस तरह की आउट-ऑफ़-ऐप्लिकेशन खरीदारी के लिए, खरीदारी की स्थिति में उस मामले में मूल खरीदारी से जुड़ा linkedPurchaseToken
शामिल नहीं होता, क्योंकि मूल सदस्यता की समयसीमा पूरी तरह से खत्म हो गई है. ये नई खरीदारी हैं, जिन्हें आपके बैकएंड को किसी भी अन्य खरीदारी की तरह प्रोसेस करना होगा और उनकी पुष्टि करनी होगी.
सदस्यता को अपग्रेड, डाउनग्रेड, और फिर से सदस्यता लेना
जब कोई उपयोगकर्ता सदस्यता को अपग्रेड या डाउनग्रेड करता है या सदस्यता की समयसीमा खत्म होने से पहले, उसे रद्द करने के बाद साइन अप करता है, तो पुरानी सदस्यता अमान्य हो जाती है और खरीदारी के लिए नए टोकन की मदद से नई सदस्यता बन जाती है.
इसके अलावा, Google Play Developer API से मिले सदस्यता के संसाधन में एक linkedPurchaseToken
फ़ील्ड होता है. इससे उस पुरानी खरीदारी का पता चलता है जिससे उपयोगकर्ता ने सदस्यता को अपग्रेड, डाउनग्रेड या फिर से सदस्यता ली है. उस फ़ील्ड में मौजूद परचेज़ टोकन का इस्तेमाल करके, पुरानी सदस्यता देखी जा सकती है. साथ ही, मौजूदा उपयोगकर्ता खाते की पहचान की जा सकती है, ताकि नई खरीदारी को उसी खाते से जोड़ा जा सके.
अपने ऐप्लिकेशन में किसी उपयोगकर्ता को अपग्रेड, डाउनग्रेड या फिर से सदस्यता लेने के विकल्प देने से पहले, आपको मौजूदा सदस्यता की पुष्टि करनी होगी. अगर मौजूदा सदस्यता की पुष्टि होना बाकी है, तो प्लान में कोई बदलाव करने या फिर से सदस्यता लेने की अनुमति नहीं दी जाती.
अगर उपयोगकर्ता ने अपग्रेड, डाउनग्रेड या फिर से सदस्यता खरीदी है, तो इसे नई खरीदारी माना जाएगा. आपको इसकी पुष्टि करनी होगी. ऐसा करने के लिए, Google Play Developer API का इस्तेमाल करने का सुझाव दिया जाता है. सदस्यता का संसाधन, नीचे दिए गए उदाहरण जैसा दिखता है:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"linkedPurchaseToken": old_purchase_token,
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
],
}
कीमत में बदलाव
अपने-आप रिन्यू होने वाली सदस्यताओं की कीमतों में बदलाव करने और ज़रूरत पड़ने पर, उपयोगकर्ताओं को इसकी सूचना देने के बारे में जानने के लिए, कीमत में बदलाव करने के सबसे सही तरीकों की गाइड देखें.
जब मौजूदा सदस्यों के लिए कीमत में बदलाव, ऑप्ट-इन के तौर पर लागू किए जाते हैं, तो अगर उपयोगकर्ता नई कीमत की पुष्टि करने या उसे अस्वीकार करने के लिए कोई कार्रवाई करता है, तो आपको आरटीडीएन मिलेगा.
ऑप्ट-इन करने पर कीमत में बदलाव करने के लिए, उपयोगकर्ता की पुष्टि को मैनेज करना
जब कोई उपयोगकर्ता सदस्यता की कीमत में बढ़ोतरी स्वीकार करता है, तो आपको SUBSCRIPTION_PRICE_CHANGED_CONFIRMED
टाइप वाला SubscriptionNotification
मैसेज मिलता है. कीमत बढ़ने पर ऑप्ट-आउट करने की सुविधा के तहत कीमत में होने वाली गिरावट या सदस्यता की कीमत में होने वाली बढ़ोतरी के रिन्यू होने पर, आपको SubscriptionNotification
मैसेज मिलेगा. इसमें SUBSCRIPTION_RENEWED
टाइप होगा. इस सूचना को किसी भी अन्य रिन्यूअल की तरह ही समझें.
ऐसे मामलों को मैनेज करना जहां ऑप्ट-इन करने पर कीमत में हुई बढ़ोतरी को स्वीकार नहीं किया गया है
अगर किसी उपयोगकर्ता ने बढ़ी हुई कीमत पर रिन्यूअल करने से पहले, ऑप्ट-इन करके कीमत में बढ़ोतरी को स्वीकार नहीं किया है, तो उसकी सदस्यता अपने-आप रद्द हो जाएगी. साथ ही, आपको SUBSCRIPTION_CANCELED
टाइप वाला SubscriptionNotification
मैसेज मिलेगा. इस इवेंट को रद्द करने के बारे में बताए गए तरीके के मुताबिक मैनेज करें.
सदस्यता की कीमत में होने वाली बढ़ोतरी से ऑप्ट-आउट करने के लिए, उपयोगकर्ता भी इसी तरीके का इस्तेमाल करके अपनी सदस्यताएं रद्द कर सकते हैं.
प्रीपेड प्लान के लाइफ़साइकल को मैनेज करना
अपने-आप रिन्यू होने वाली सदस्यताओं की तरह ही, हर नई खरीदारी के बाद, आपको प्रीपेड प्लान की पुष्टि करनी होगी. प्रीपेड प्लान के मामले में, आपको शुरुआती खरीदारी और टॉप-अप, दोनों को पूरी तरह से प्रोसेस करना होगा. ऐसा इसलिए, क्योंकि उपयोगकर्ता को हर बार खरीदारी के फ़्लो से गुज़रना पड़ता है.
प्रीपेड प्लान की अवधि कम हो सकती है. इसलिए, खरीदारी की पुष्टि जल्द से जल्द करना ज़रूरी है. एक हफ़्ते या उससे ज़्यादा की अवधि वाले प्रीपेड प्लान को तीन दिन के अंदर स्वीकार करना ज़रूरी है. एक हफ़्ते से कम अवधि वाले रिचार्ज प्लान के लिए, प्लान की अवधि के आधे समय के अंदर पुष्टि करनी होगी. उदाहरण के लिए, तीन दिन के प्रीपेड प्लान की खरीदारी स्वीकार करने के लिए, डेवलपर के पास 1.5 दिन का समय होता है.
प्रीपेड प्लान की सदस्यता खरीदने पर, आपके आरटीडीएन क्लाइंट को SUBSCRIPTION_PURCHASED
टाइप वाला SubscriptionNotification
मैसेज भेजा जाता है. इसमें हर टॉप-अप भी शामिल है. प्रीपेड प्लान की सदस्यता की मौजूदा स्थिति देखने के लिए, purchases.subscriptionsv2.get
तरीका अपनाएं.
टॉप-अप खरीदारी के लिए, एक नया परचेज़ टोकन जारी किया जाता है. साथ ही, आपको सदस्यता की खरीदारी की नई स्थिति के हिस्से के तौर पर, linkedPurchaseToken
फ़ील्ड में पिछला परचेज़ टोकन मिलता है. खरीदारी का टोकन, सदस्यता के लिए साइन अप करने की तारीख से लेकर, समयसीमा खत्म होने के 60 दिनों बाद तक मान्य होता है. इस तारीख के बाद, Google Play Developer API को कॉल करने के लिए, खरीदारी टोकन का इस्तेमाल नहीं किया जा सकेगा.
प्रीपेड प्लान की खरीदारी के लिए सदस्यता का संसाधन, नीचे दिए गए उदाहरण जैसा दिखता है:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
"startTime": "2022-04-22T18:39:58.270Z",
"regionCode": "US",
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"latestOrderId": "GPA.3333-4137-0319-36762",
"acknowledgementState": "ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED",
"lineItems": [
{
"productId": "prepaid_plan01",
"expiryTime": expiry_date,
"prepaidPlan": {
"allowExtendAfterTime": timestamp_after_which_topups_are_allowed
}
}
]
}
expiryTime
फ़ील्ड में जाकर, यह देखा जा सकता है कि एनटाइटलमेंट कब खत्म होगा. टॉप-अप खरीदारी करने पर, एनटाइटलमेंट का समय जमा हो जाता है. इसका मतलब है कि अगर उपयोगकर्ता, अपने मूल एनटाइटलमेंट की समयसीमा खत्म होने से पहले टॉप अप करता है, तो नई समयसीमा, खत्म होने की पिछली तारीख के साथ जोड़ दी जाती है.
हो सकता है कि आप अपने ऐप्लिकेशन में एक मैसेज दिखाना चाहें, जिसमें उपयोगकर्ता को यह जानकारी दी गई हो कि टॉप-अप की मदद से, उनकी प्रीपेड सदस्यताएं बढ़ाई जा सकती हैं. यह जानने के लिए कि उपयोगकर्ता कब टॉप-अप कर पाएगा, सदस्यता संसाधन में allowExtendAfterTime
फ़ील्ड देखें.
प्रीपेड प्लान अपने-आप रिन्यू नहीं होते. इसलिए, इन्हें रद्द नहीं किया जा सकता. अगर किसी उपयोगकर्ता को प्रीपेड प्लान रद्द करना है, तो वह प्लान की समयसीमा खत्म होने तक इंतज़ार कर सकता है.