सदस्यता की खरीदारी, लाइफ़साइकल के दौरान कई अलग-अलग स्थितियों से गुज़र सकती है. यह कई बातों पर निर्भर करता है. जैसे, अपने-आप रिन्यू होने की सुविधा, पेमेंट अस्वीकार होने की स्थितियां, और डेवलपर की ओर से की जाने वाली कार्रवाइयां.
अपने-आप रिन्यू होने वाली सदस्यताओं का लाइफ़साइकल मैनेज करना
जब किसी उपयोगकर्ता की सदस्यता की स्थिति बदलती है, तो आपके बैकएंड सर्वर को SubscriptionNotification
मैसेज मिलता है.
अपने बैकएंड में स्थिति को अपडेट करने के लिए, सूचना में शामिल परचेज़ टोकन के साथ purchases.subscriptionsv2.get
एपीआई को कॉल करें. यह एंडपॉइंट, खरीदारी के टोकन के हिसाब से सदस्यता की मौजूदा स्थिति के बारे में जानकारी देता है. साथ ही, इसे सदस्यता मैनेज करने के लिए भरोसेमंद सोर्स माना जाता है.
खरीदारी का टोकन, सदस्यता के लिए साइन अप करने से लेकर सदस्यता खत्म होने के 60 दिनों तक मान्य होता है. इस तारीख के बाद, Google Play Developer API को कॉल करने के लिए, खरीदारी के टोकन का इस्तेमाल नहीं किया जा सकेगा.
अपने-आप रिन्यू होने वाली नई सदस्यताओं की खरीदारी
जब कोई उपयोगकर्ता सदस्यता खरीदता है, तो आपके आरटीडीएन क्लाइंट को SubscriptionNotification
मैसेज भेजा जाता है. इसका टाइप SUBSCRIPTION_PURCHASED
होता है. आपको यह सूचना मिलती है या आपने PurchasesUpdatedListener
के ज़रिए ऐप्लिकेशन में नई खरीदारी रजिस्टर की है. इसके अलावा, आपके पास ऐप्लिकेशन के onResume()
तरीके में खरीदारी को मैन्युअल तरीके से फ़ेच करने का विकल्प भी होता है. इन सभी मामलों में, आपको नई खरीदारी को अपने सुरक्षित बैकएंड में प्रोसेस करना चाहिए. ऐसा करने के लिए, इन चरणों का अनुसरण करें:
- सदस्यता संसाधन पाने के लिए,
purchases.subscriptionsv2.get
एंडपॉइंट से क्वेरी करें. इसमें सदस्यता की मौजूदा स्थिति की जानकारी होती है. - पक्का करें कि
subscriptionState
फ़ील्ड की वैल्यूSUBSCRIPTION_STATE_ACTIVE
हो. - खरीदारी की पुष्टि करें.
- उपयोगकर्ता को कॉन्टेंट का ऐक्सेस दें. खरीदारी से जुड़े उपयोगकर्ता खाते की पहचान, सदस्यता संसाधन के
ExternalAccountIdentifiers
ऑब्जेक्ट से की जा सकती है. ऐसा तब किया जा सकता है, जब खरीदारी के समयsetObfuscatedAccountId
औरsetObfuscatedProfileId
का इस्तेमाल करके आइडेंटिफ़ायर सेट किए गए हों.
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 के ज़रिए चालू के तौर पर दिखाया जाता है.
सदस्यता की स्थिति को अपने बैकएंड के साथ सिंक करने से, आपको पेमेंट अस्वीकार होने के बारे में ज़्यादा जानकारी मिलती है. साथ ही, इससे आपको उन वजहों के बारे में ज़्यादा जानकारी मिलती है जिनकी वजह से लोग बिना किसी कार्रवाई के सदस्यता छोड़ देते हैं. SubscriptionNotification
मैसेज के लिए सुनो. जब उपयोगकर्ता ग्रेस पीरियड में प्रवेश करे, तब सूचना पाने के लिए SUBSCRIPTION_IN_GRACE_PERIOD
टाइप का इस्तेमाल करो. ग्रेस पीरियड के दौरान, सदस्यता संसाधन में 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 पर पेमेंट के तरीके से जुड़ी समस्या को ठीक करने के लिए, डीप लिंक भी शामिल होता है.
जैसे ही उपयोगकर्ता पेमेंट के तरीके से जुड़ी समस्या को ठीक कर लेता है, सदस्यता रिन्यू हो जाती है. सदस्यता रिन्यू होने की तारीख वही होती है जो पहले थी. रिन्यूअल में बताए गए तरीके से, रिन्यूअल को मैनेज किया जा सकता है.
अगर उपयोगकर्ता ग्रेस पीरियड के दौरान पेमेंट के तरीके को ठीक नहीं करता है, तो सदस्यता पर खाते पर रोक लग जाती है. साथ ही, उपयोगकर्ता को सदस्यता के फ़ायदे नहीं मिलते.
ग्रेस पीरियड के दौरान ऐक्सेस और खाता वापस पाना
दूसरी इमेज में, ग्रेस पीरियड में जाने वाली सदस्यता की टाइमलाइन दिखाई गई है. इसमें यह भी दिखाया गया है कि जब उपयोगकर्ता पेमेंट के तरीके से जुड़ी समस्या को ठीक कर लेता है, तब सदस्यता फिर से शुरू हो जाती है. ग्रेस पीरियड खत्म होने के बाद, उपयोगकर्ता को सदस्यता के फ़ायदे नहीं मिलने चाहिए और उसके खाते पर रोक लग जानी चाहिए.

इन बातों का ध्यान रखना ज़रूरी है:
- ग्रेस पीरियड के दौरान, उपयोगकर्ता के पास सदस्यता के फ़ायदों का ऐक्सेस बना रहना चाहिए.
- ग्रेस पीरियड के दौरान सदस्यता फिर से चालू होने पर, रिन्यूअल की तारीख रीसेट नहीं होती.
- अगर ग्रेस पीरियड को बढ़ाया जाता है—उदाहरण के लिए, 7 दिनों से 14 दिनों तक—तो ग्रेस पीरियड में मौजूद उपयोगकर्ताओं को सदस्यता के फ़ायदे पाने के लिए ज़्यादा समय मिलता है.
- ग्रेस पीरियड कम करने पर, जिन उपयोगकर्ताओं का ग्रेस पीरियड इतना बचा है कि वह नए ग्रेस पीरियड से ज़्यादा है उन्हें सदस्यता के फ़ायदे तुरंत नहीं मिलेंगे. उदाहरण के लिए, अगर आपने छूट की अवधि को 14 दिनों से घटाकर 7 दिन कर दिया है, तो छूट की पुरानी अवधि के 8 से 14 दिनों के बीच के उपयोगकर्ताओं को सदस्यता के फ़ायदे तुरंत नहीं मिलेंगे.
- सदस्यता चालू रहती है. साथ ही, आपको साइलेंट ग्रेस पीरियड खत्म होने तक, ग्रेस पीरियड वाला आरटीडीएन नहीं मिलेगा
साइलेंट ग्रेस पीरियड
आप ग्रेस पीरियड को शून्य दिन पर सेट कर सकते हैं. हालांकि, Play कम से कम एक दिन तक इंतज़ार करेगा, ताकि पेमेंट फिर से करने के लिए ज़रूरी समय मिल सके. इस साइलेंट ग्रेस पीरियड के दौरान, पेमेंट प्रोसेस करने के लिए एक सुरक्षा कवच मिलता है. इस 24 घंटे की अवधि के दौरान, सदस्यता ACTIVE
स्थिति में रहती है.
सदस्यता की स्थिति में होने वाले बदलावों के बारे में अप-टू-डेट रहने के लिए, डेवलपर से जुड़ी रीयल-टाइम सूचनाओं (आरटीडीएन) को सुनें और उन पर प्रतिक्रिया दें. सदस्यता की ज़्यादा सटीक स्थिति पाने के लिए, सदस्यता खत्म होने के समय के बजाय आरटीडीएन के समय पर purchases.subscriptionsv2.get()
तरीके को कॉल करें.
बिना किसी शुल्क के 24 घंटे की अवधि के बाद, सदस्यता की स्थिति के आधार पर आपको इनमें से कोई एक सूचना मिलेगी:
SUBSCRIPTION_ON_HOLD
(अगर चालू है)SUBSCRIPTION_CANCELED
(अगर रद्द किया गया हो)SUBSCRIPTION_EXPIRED
(अगर समयसीमा खत्म हो गई है)SUBSCRIPTION_RENEWED
(अगर सदस्यता रिन्यू हो जाती है)
सदस्यता की मौजूदा स्थिति जानने के लिए, 24 घंटे के ग्रेस पीरियड के बाद किसी भी समय subscriptionV2.get()
तरीके को कॉल किया जा सकता है.
खाते पर रोक लगने की अवधि
अगर सदस्यता के नवीनीकरण के लिए पेमेंट करने में समस्याएं आती हैं, तो ग्रेस पीरियड खत्म होने के बाद, खाते पर रोक की अवधि शुरू हो जाती है. किसी सदस्य के खाते पर रोक लग जाने पर, आपको उसके लिए सदस्यता के तहत मिलने वाले अधिकारों का ऐक्सेस बंद करना पड़ता है.
खाते पर रोक लगने के दौरान, आपको ज़रूरत के मुताबिक सदस्यताएं रद्द करने, उन्हें वापस लाने या फिर से खरीदने की कार्रवाइयां जारी रखनी चाहिए. ऐसा इसलिए, क्योंकि सदस्यता पर रोक लगने के दौरान भी उपयोगकर्ता इन कार्रवाइयों को कर सकता है.
आरटीडीएन से आपको तब सूचना मिलती है, जब उपयोगकर्ता खाते पर रोक लगने की अवधि में प्रवेश करता है. इससे आपको उन्हें यह बताने का मौका मिलता है कि सदस्यता का ऐक्सेस क्यों निलंबित किया गया है. इसके लिए, In-App Messaging API का इस्तेमाल करना सबसे आसान तरीका है. जब आपका उपयोगकर्ता ऐप्लिकेशन खोलता है, तब इस एपीआई को कॉल करने पर, उपयोगकर्ता को कुछ समय के लिए दिखने वाले स्नैकबार में एक मैसेज दिखेगा. इसमें उसे बताया जाएगा कि उसका पेमेंट अस्वीकार कर दिया गया है. इस मैसेज में, 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()
तरीके से सदस्यता को फिर से चालू कर देती है. अगर आपने यह पता लगाने के लिए इस तरीके का इस्तेमाल किया है कि किसी उपयोगकर्ता के पास सदस्यता का एनटाइटलमेंट है या नहीं, तो आपका ऐप्लिकेशन, खाते पर रोक लगने के बाद सदस्यता को अपने-आप वापस चालू कर देगा.
SubscriptionNotification
मैसेज के लिए सुनो. इस मैसेज का टाइप SUBSCRIPTION_RECOVERED
होता है. इससे आपको यह सूचना मिलेगी कि सदस्यता वापस पा ली गई है और उपयोगकर्ता को फिर से ऐक्सेस मिल जाना चाहिए. अगर आपको यह सूचना मिलने के बाद किसी सदस्यता के बारे में क्वेरी करनी है, तो 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.subscriptionsv2.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
तरीके का इस्तेमाल किया जा सकता है. ऐसा करने पर, SUBSCRIPTION_DEFERRED
टाइप का SubscriptionNotification
मैसेज भेजा जाता है. बढ़ाई गई इस अवधि के दौरान, उपयोगकर्ता के पास आपके कॉन्टेंट का पूरा ऐक्सेस बना रहता है. हालांकि, उससे कोई शुल्क नहीं लिया जाता. सदस्यता रिन्यू करने की तारीख को नई तारीख के तौर पर अपडेट कर दिया जाएगा.
प्रीपेड प्लान के लिए, बिलिंग रोकने वाले एपीआई का इस्तेमाल करके, सदस्यता खत्म होने की तारीख को आगे बढ़ाया जा सकता है.
स्थगित की गई सदस्यता के लिए सदस्यता संसाधन, यहां दिए गए उदाहरण की तरह दिखता है:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_future,
...
}
],
}
कुछ समय के लिए रोकी गई सदस्यताएं
उपयोगकर्ताओं को सदस्यता रोकने की सुविधा देकर, सदस्यता छोड़ने वाले लोगों को रोका जा सकता है. सदस्यता रोकने की सुविधा चालू करने पर, उपयोगकर्ता अपनी सदस्यता को रद्द करने के बजाय उसे एक हफ़्ते से लेकर तीन महीने तक रोक सकते हैं. यह सदस्यता के लिए बार-बार पैसे चुकाने की अवधि पर निर्भर करता है.
सदस्यता बार-बार ली जाती है | हर हफ़्ते | हर महीने | तीन महीने | छह महीने | सालाना |
---|---|---|---|---|---|
रोकने की उपलब्ध अवधि* | एक हफ़्ता दो हफ़्ते तीन हफ़्ते चार हफ़्ते |
एक महीना दो महीने तीन महीने |
एक महीना दो महीने तीन महीने |
एक महीना दो महीने तीन महीने |
लागू नहीं |
मौजूदा बिलिंग अवधि खत्म होने के बाद ही आपकी सदस्यता रोकी जाती है. सदस्यता के रोके जाने पर, उपयोगकर्ता के पास कॉन्टेंट का ऐक्सेस नहीं होता. साथ ही, उसे रिन्यूअल के लिए शुल्क नहीं देना पड़ता. सदस्यता रोकने की अवधि खत्म होने पर, सदस्यता फिर से शुरू हो जाती है और Google इसे रिन्यू करने की कोशिश करता है. यह प्रोसेस पूरी होने के बाद, सदस्यता फिर से चालू हो जाती है. अगर पेमेंट से जुड़ी समस्या की वजह से सदस्यता फिर से शुरू नहीं हो पाती है, तो उपयोगकर्ता का खाता होल्ड कर दिया जाता है. जैसा कि पांचवीं और छठी इमेज में दिखाया गया है:


उपयोगकर्ता, सदस्यता को रोकने की अवधि के दौरान किसी भी समय, मैन्युअल तरीके से सदस्यता फिर से शुरू कर सकता है. जैसा कि इमेज 6 में दिखाया गया है. जब कोई उपयोगकर्ता मैन्युअल तरीके से सदस्यता फिर से शुरू करता है, तो बिलिंग की तारीख बदलकर, मैन्युअल तरीके से सदस्यता फिर से शुरू करने की तारीख हो जाती है.
जब किसी उपयोगकर्ता की सदस्यता रोकी जाती है, तो 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
ऑब्जेक्ट को देखकर, यह पता लगाया जा सकता है कि सदस्यता कब रिन्यू होगी.
अगर सदस्यता को रोके जाने की अवधि खत्म होने पर, वह अपने-आप फिर से शुरू हो जाती है या उपयोगकर्ता ने सदस्यता को मैन्युअल तरीके से फिर से शुरू करने का विकल्प चुना है, तो SubscriptionNotification
टाइप वाला SubscriptionNotification
मैसेज भेजा जाता है.SUBSCRIPTION_RENEWED
इसे रिन्यूअल में बताए गए तरीके से हैंडल किया जाना चाहिए.
अगर सदस्यता को कुछ समय के लिए रोकने के बाद फिर से शुरू करते समय पेमेंट नहीं हो पाता है, तो SUBSCRIPTION_ON_HOLD
टाइप वाला SubscriptionNotification
मैसेज भेजा जाता है.
इसे खाते पर रोक सेक्शन में बताए गए तरीके से मैनेज किया जाना चाहिए.
फिर से सदस्यता लें
अपने-आप रिन्यू होने वाली सदस्यता के बुनियादी प्लान के लिए, Google Play Store पर फिर से सदस्यता लें बटन दिख सकता है. इस बटन की मदद से, लोग सदस्यता का ऐक्सेस वापस पा सकते हैं. यह कई वजहों से नहीं दिख सकता. उदाहरण के लिए, जब सदस्यता की समयसीमा बहुत पहले खत्म हो गई हो.

बटन पर हमेशा फिर से सदस्यता लें का लेबल लगा होता है. हालांकि, यह बटन किस तरह काम करेगा, यह सदस्यता की स्थिति पर निर्भर करता है.
जब कोई सदस्यता रद्द कर दी जाती है, लेकिन उसकी समयसीमा खत्म नहीं होती है, तो उपयोगकर्ता को सदस्यता के फ़ायदे मिलते रहते हैं. अगर उपयोगकर्ता 'फिर से सदस्यता लें' पर टैप करता है, तो सदस्यता रद्द करने का फ़ैसला वापस ले लिया जाता है. इसके बाद, सदस्यता अपने-आप रिन्यू होती रहती है. Play के डेवलपर दस्तावेज़ और एपीआई में, इस कार्रवाई को वापस लाना कहा जाता है.
अपने-आप रिन्यू होने वाली सदस्यता की समयसीमा खत्म होने के बाद, उपयोगकर्ताओं को उसी सदस्यता का बुनियादी प्लान खरीदने की अनुमति दी जा सकती है. Play के डेवलपर दस्तावेज़ और एपीआई में, इस कार्रवाई को फिर से सदस्यता लेना कहा जाता है. इस विकल्प को Play Console में जाकर या एपीआई का इस्तेमाल करके, हर बुनियादी प्लान के लिए कॉन्फ़िगर किया जा सकता है.
सदस्यता खत्म होने से पहले वापस लाना
अगर आपका ऐप्लिकेशन, यह तय करने के लिए सिर्फ़ queryPurchasesAsync()
तरीके का इस्तेमाल करता है कि किसी व्यक्ति को सदस्यता का अधिकार है या नहीं, तो आपके ऐप्लिकेशन को सदस्यताएं अपने-आप वापस लानी चाहिए. ऐसा इसलिए, क्योंकि queryPurchasesAsync()
तरीका, रद्द की गई खरीदारी की जानकारी उनकी समयसीमा खत्म होने की तारीखों से पहले दिखाता रहता है. सदस्यता को वापस लाने पर, वह उसी तरह रिन्यू होती है जैसे उसे रद्द नहीं किया गया था.
अगर आपका ऐप्लिकेशन, सदस्यता की स्थिति को बैकएंड के साथ सिंक करता है, तो आपको SubscriptionNotification
टाइप वाले SUBSCRIPTION_RESTARTED
मैसेज के लिए सुनना चाहिए. यह आरटीडीएन मिलने के बाद, आपका ऐप्लिकेशन सूचना का जवाब दे सकता है. साथ ही, यह रिकॉर्ड कर सकता है कि सदस्यता को अब रिन्यू करने के लिए सेट कर दिया गया है. इसके अलावा, यह आपके ऐप्लिकेशन में सदस्यता वापस पाने से जुड़े मैसेज दिखाना बंद कर सकता है. सदस्यता का संसाधन, इस उदाहरण की तरह दिखता है:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date
...
}
],
}
सदस्यता खत्म होने के बाद फिर से सदस्यता लेना
अगर Google Play Console या API का इस्तेमाल करके, अपने-आप रिन्यू होने वाले बुनियादी प्लान को इस तरह कॉन्फ़िगर किया गया है कि उपयोगकर्ता फिर से सदस्यता ले सकें, तो वे 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_CHANGE_UPDATED
आरटीडीएन मिलेगा. purchases.subscriptionsv2.get एंडपॉइंट से क्वेरी करके, सदस्यता संसाधन पाया जा सकता है. इसमें सदस्यता में शामिल हर आइटम के लिए, कीमत में हुए बदलाव की जानकारी होगी.
जब मौजूदा सदस्यों के लिए, शुल्क में बदलावों को ऑप्ट-इन के तौर पर लागू किया जाता है, तब आपको आरटीडीएन मिलेगा. ऐसा तब होगा, जब उपयोगकर्ता नए शुल्क की पुष्टि करने या उसे अस्वीकार करने के लिए कोई कार्रवाई करेगा.
ऑप्ट-इन करने पर कीमत में हुए बदलाव की पुष्टि करने वाले उपयोगकर्ता को मैनेज करना
जब कोई उपयोगकर्ता, सदस्यता के लिए बढ़ी हुई कीमत को स्वीकार करता है, तब आपको SubscriptionNotification मैसेज मिलता है. इसका टाइप SUBSCRIPTION_PRICE_CHANGE_UPDATED
होता है.
कीमत में बदलाव लागू होने के बाद, रिन्यूअल मैनेज करना
कीमत में कमी होने पर या सदस्यता की बढ़ी हुई कीमत पर रिन्यू होने पर, आपको SubscriptionNotification
टाइप वाला SUBSCRIPTION_RENEWED
मैसेज मिलेगा. इस सूचना को किसी अन्य नवीनीकरण की तरह ही समझें.
उन मामलों को मैनेज करना जिनमें ऑप्ट-इन करने पर कीमत में हुई बढ़ोतरी को स्वीकार नहीं किया गया है
अगर कोई व्यक्ति, बढ़ी हुई कीमत पर सदस्यता रिन्यू करने से पहले, ऑप्ट-इन करने के विकल्प के साथ की गई कीमत में बढ़ोतरी को स्वीकार नहीं करता है, तो उसकी सदस्यता अपने-आप रद्द हो जाती है. साथ ही, आपको SUBSCRIPTION_CANCELED
टाइप वाला SubscriptionNotification मैसेज मिलता है. इस इवेंट को रद्द किए गए इवेंट के तौर पर हैंडल करें.
उपयोगकर्ता, कीमत में बढ़ोतरी से ऑप्ट-आउट करने के लिए भी इसी तरीके से अपनी सदस्यताएं रद्द कर सकते हैं.
कीमत में बढ़ोतरी के लिए सहमति (सिर्फ़ दक्षिण कोरिया के लिए लागू)
दक्षिण कोरिया (केआर) के नए कानूनों के मुताबिक, केआर में रहने वाले लोगों को सदस्यता की कीमत में होने वाली किसी भी बढ़ोतरी के लिए सहमति देनी होगी. यह बढ़ोतरी, मुफ़्त में आज़माने की अवधि या शुरुआती अवधि खत्म होने के बाद होगी.
इस कानून का पालन करने में आपकी मदद करने के लिए, Play, कोरिया में रहने वाले उपयोगकर्ताओं को सहमति लेने से जुड़ी ज़रूरी शर्तों के बारे में सूचना देगा. साथ ही, उपयोगकर्ताओं से मिली सहमति की जानकारी को भी सेव करेगा. जिन लोगों ने बढ़ी हुई कीमत लागू होने से पहले सहमति नहीं दी है उनकी सदस्यताएं अपने-आप रद्द हो जाती हैं. Play से भेजी गई सूचनाओं के अलावा, उपयोगकर्ताओं को कीमत में बढ़ोतरी की कस्टम सूचनाएं भी भेजी जा सकती हैं. साथ ही, सूचनाओं में खाता मैनेज करने वाले पेज का लिंक भी दिया जा सकता है.
सहमति की अवधि शुरू होने पर या उपयोगकर्ता की सहमति मिलने पर, आपको SubscriptionNotification मैसेज मिलेगा. इसका टाइप SUBSCRIPTION_PRICE_STEP_UP_CONSENT_UPDATED
होगा.
कीमत में बढ़ोतरी और कीमत में बदलाव के बीच अंतर
price step-up
का मतलब है कि सदस्यता की कीमत में बढ़ोतरी हुई है. ऐसा इसलिए हुआ है, क्योंकि ऑफ़र का एक फ़ेज़ खत्म हो गया है और दूसरा फ़ेज़ शुरू हो गया है. उदाहरण के लिए, बिना शुल्क के आज़माने की अवधि खत्म होने के बाद, सदस्यता की कीमत में बदलाव होना.
हालांकि, price change
का मतलब है कि डेवलपर ने सदस्यता के बुनियादी प्लान की कीमत में बदलाव किया है. उदाहरण के लिए,
ऑप्ट-इन करने पर कीमत लागू करना या ऑप्ट-आउट करने पर कीमत लागू करना.
प्रीपेड प्लान के लाइफ़साइकल को मैनेज करना
अपने-आप रिन्यू होने वाली सदस्यताओं की तरह ही, आपको हर नई खरीदारी के बाद प्रीपेड प्लान की पुष्टि करनी होगी. प्रीपेड प्लान के मामले में, आपको शुरुआती खरीदारी और सभी टॉप-अप को पूरी तरह से प्रोसेस करना होगा. ऐसा इसलिए, क्योंकि उपयोगकर्ता को हर बार खरीदारी की प्रोसेस पूरी करनी होती है.
प्रीपेड प्लान की अवधि कम हो सकती है. इसलिए, खरीदारी की पुष्टि जल्द से जल्द करना ज़रूरी है. एक हफ़्ते या इससे ज़्यादा अवधि वाले प्रीपेड प्लान को तीन दिनों के अंदर स्वीकार करना होगा. एक हफ़्ते से कम अवधि वाले प्रीपेड प्लान के लिए, प्लान की अवधि के आधे समय के अंदर सूचना देनी होगी. उदाहरण के लिए, डेवलपर के पास तीन दिन के प्रीपेड प्लान की खरीदारी की पुष्टि करने के लिए, डेढ़ दिन का समय होता है.
जब भी कोई प्रीपेड प्लान की सदस्यता खरीदी जाती है, तब आपके आरटीडीएन क्लाइंट को SubscriptionNotification
मैसेज भेजा जाता है. इस मैसेज का टाइप SUBSCRIPTION_PURCHASED
होता है. इसमें हर टॉप-अप शामिल होता है. प्रीपेड प्लान की सदस्यता की मौजूदा स्थिति की जानकारी पाने के लिए,
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
फ़ील्ड देखें.
प्रीपेड प्लान अपने-आप रिन्यू नहीं होते. इसलिए, इन्हें रद्द नहीं किया जा सकता. अगर किसी उपयोगकर्ता को प्रीपेड प्लान रद्द करना है, तो वह प्लान के खत्म होने की तारीख तक इंतज़ार कर सकता है.
प्रीपेड प्लान के लिए 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
की जगह लेता है.