सदस्यताओं के बारे में जानकारी

इस दस्तावेज़ में, सदस्यता के लाइफ़साइकल इवेंट मैनेज करने का तरीका बताया गया है. जैसे, रिन्यूअल और समयसीमा खत्म होना. इसमें सदस्यता से जुड़ी अन्य सुविधाओं के बारे में भी बताया गया है. जैसे, प्रमोशन ऑफ़र करना और उपयोगकर्ताओं को अपनी सदस्यताएं मैनेज करने की अनुमति देना.

अगर आपने अपने ऐप्लिकेशन के लिए सदस्यता वाले प्रॉडक्ट कॉन्फ़िगर नहीं किए हैं, तो अपने प्रॉडक्ट बनाएं और उन्हें कॉन्फ़िगर करें लेख पढ़ें.

सदस्यता अवलोकन

सदस्यता एक ऐसा लेन-देन है जो बार-बार होता है. इससे लोगों को कुछ खास फ़ायदे मिलते हैं. एनटाइटलमेंट, फ़ायदों का एक ऐसा सेट होता है जिसे उपयोगकर्ता तय समयावधि के दौरान ऐक्सेस कर सकते हैं. उदाहरण के लिए, सदस्यता लेने पर उपयोगकर्ता को प्रीमियम ऐक्सेस मिल सकता है.

बुनियादी प्लान और ऑफ़र की मदद से, एक ही सदस्यता प्रॉडक्ट के लिए कई कॉन्फ़िगरेशन बनाए जा सकते हैं. उदाहरण के लिए, उन लोगों के लिए शुरुआती ऑफ़र बनाया जा सकता है जिन्होंने कभी आपके ऐप्लिकेशन की सदस्यता नहीं ली है. इसी तरह, उन लोगों के लिए अपग्रेड ऑफ़र बनाया जा सकता है जिन्होंने पहले से ही सदस्यता ली हुई है.

सदस्यता वाले प्रॉडक्ट, बुनियादी प्लान, और ऑफ़र के बारे में ज़्यादा जानकारी के लिए, Play Console के सहायता केंद्र में मौजूद दस्तावेज़ देखें.

Play Billing Library, इन सदस्यता टाइप के साथ काम करती है:

  • सदस्यता - इस तरह के फ़ीड में, एक एनटाइटलमेंट के लिए एक आइटम होता है. उदाहरण के लिए, संगीत स्ट्रीम करने वाली सेवा की सदस्यता.

  • ऐड-ऑन के साथ सदस्यता - इस तरह की सदस्यता में, एक खरीदारी में कई अलग-अलग एनटाइटलमेंट बंडल किए जा सकते हैं. उदाहरण के लिए, संगीत स्ट्रीमिंग सेवा और वीडियो स्ट्रीमिंग सेवा, दोनों की सदस्यता. ऐड-ऑन वाली सदस्यता के बारे में खास जानकारी के लिए, ऐड-ऑन वाली सदस्यताएं लेख पढ़ें.

प्रीपेड प्लान इंटिग्रेशन

प्रीपेड प्लान की समयसीमा खत्म होने पर, ये अपने-आप रिन्यू नहीं होते. सदस्यता के फ़ायदे बिना किसी रुकावट के जारी रखने के लिए, उपयोगकर्ता को उसी सदस्यता के लिए प्रीपेड प्लान को टॉप-अप करना होगा.

टॉप-अप के लिए, बिलिंग फ़्लो को उसी तरह लॉन्च करें जिस तरह मूल खरीदारी के लिए किया जाता है. आपको यह बताने की ज़रूरत नहीं है कि खरीदारी टॉप-अप है.

प्रीपेड प्लान के टॉप-अप के लिए, हमेशा CHARGE_FULL_PRICE रिप्लेसमेंट मोड का इस्तेमाल किया जाता है. आपको इस मोड को अलग से सेट करने की ज़रूरत नहीं होती. उपयोगकर्ता से, पूरी बिलिंग अवधि का शुल्क तुरंत ले लिया जाता है. साथ ही, टॉप-अप में बताई गई अवधि के लिए, उसके एनटाइटलमेंट की अवधि बढ़ा दी जाती है.

टॉप-अप के बाद, Purchase नतीजे वाले ऑब्जेक्ट में मौजूद इन फ़ील्ड को अपडेट किया जाता है, ताकि हाल ही में किए गए टॉप-अप की जानकारी दिख सके:

  • ऑर्डर आईडी
  • खरीदारी का समय
  • हस्ताक्षर
  • खरीदी टोकन
  • स्वीकृत

नीचे दिए गए Purchase फ़ील्ड में हमेशा वही डेटा होता है जो मूल खरीदारी में मौजूद होता है:

  • पैकेज का नाम
  • खरीदारी की स्थिति
  • प्रॉडक्ट
  • अपने-आप रिन्यू होने वाली सदस्यता

पैसे पहले चुकाकर की गई खरीदारी की पुष्टि

अपने-आप रिन्यू होने वाली सदस्यताओं की तरह ही, आपको प्रीपेड प्लान खरीदने के बाद उनकी पुष्टि करनी होगी. पहली बार की गई खरीदारी और किसी भी टॉप-अप को स्वीकार करना ज़रूरी है. ज़्यादा जानकारी के लिए, खरीदारी प्रोसेस करना लेख पढ़ें.

प्रीपेड प्लान की अवधि कम हो सकती है. इसलिए, यह ज़रूरी है कि खरीदारी की पुष्टि जल्द से जल्द की जाए.

एक हफ़्ते या इससे ज़्यादा अवधि वाले प्रीपेड प्लान के लिए, तीन दिनों के अंदर सूचना देनी होगी.

अगर प्रीपेड प्लान की अवधि एक हफ़्ते से कम है, तो उसे प्लान की अवधि के आधे समय में स्वीकार करना होगा. उदाहरण के लिए, डेवलपर के पास तीन दिन के प्रीपेड प्लान को स्वीकार करने के लिए, डेढ़ दिन का समय होता है.

किस्तों में सदस्यता लेने की सुविधा का इंटिग्रेशन

किस्तों में सदस्यता लेने की सुविधा, सदस्यता का एक ऐसा तरीका है जिसमें उपयोगकर्ता, सदस्यता के लिए एक बार में पूरा शुल्क चुकाने के बजाय, तय समयावधि में कई किस्तों में शुल्क चुकाते हैं.

किस्तों में सदस्यता लेने के लिए, इन बातों का ध्यान रखें:

  • देश के हिसाब से उपलब्धता: किस्तों में सदस्यता लेने की सुविधा सिर्फ़ ब्राज़ील, फ़्रांस, इटली, और स्पेन में उपलब्ध है. इस सुविधा की उपलब्धता के बारे में अप-टू-डेट जानकारी के लिए, Console देखें.
  • कीमत सेट करना: Console पर किस्तों में सदस्यता लेने की सुविधा के लिए कीमत सेट करते समय, कीमत का मतलब हर महीने चुकाई जाने वाली रकम से होता है. यह, सदस्यता की अवधि के साथ मिलकर, खरीदारी वाली स्क्रीन पर सदस्यता के लिए कुल रकम जनरेट करता है.
  • वह अवधि जिसमें सदस्यता रद्द नहीं की जा सकती: यह वह अवधि होती है जिसके दौरान सदस्यता रद्द नहीं की जा सकती. इस दौरान, हर महीने पेमेंट करना ज़रूरी होता है. उदाहरण के लिए, अगर बुनियादी प्लान के लिए 15 महीने की प्रतिबद्धता अवधि है, तो उपयोगकर्ता इस अवधि के दौरान हर महीने 15 बार पेमेंट करेगा.
  • रिन्यूअल: किस्तों में सदस्यता लेने के मामले में, "रिन्यूअल" का मतलब है कि बिना शुल्क आज़माने की अवधि खत्म हो गई है. यह अवधि, बिना शुल्क आज़माने की शुरुआती अवधि या बिना शुल्क आज़माने की बाद की अवधि हो सकती है. पहली बार साइन अप करने के बाद, पहली बार रिन्यूअल तब होता है, जब शुरुआती अवधि पूरी हो जाती है. अगले रिन्यूअल, प्रतिबद्धता की अवधि पूरी होने के बाद होते हैं. किस्तों में सदस्यता लेने के लिए, रिन्यूअल के टाइप ये हो सकते हैं: "हर महीने अपने-आप रिन्यू हो" या "उसी अवधि के लिए अपने-आप रिन्यू हो". "हर महीने अपने-आप रिन्यू होने वाली सदस्यता" के लिए, कोई और प्रतिबद्धता नहीं होती है. यह प्लान, महीने के हिसाब से ली जाने वाली सदस्यता की तरह काम करता है. इसमें हर महीने के सदस्यता शुल्क को रिन्यूअल माना जाता है.
  • बिलिंग अवधि: किस्तों में सदस्यता लेने के मामले में, इसका मतलब उस तय समय से है जब अलग-अलग पेमेंट किए जाते हैं. यह समय, बुनियादी प्लान में बताया जाता है.
  • प्लान में बदलाव करने और कीमत में बदलाव करने के तरीके: कीमत में बदलाव करने और सदस्यता रद्द करने के लिए, खरीदार को पक्का वादा करना होता है. इसका मतलब है कि अगर कोई उपयोगकर्ता सदस्यता रद्द करना चाहता है या कोई डेवलपर कीमत में बदलाव करना चाहता है, तो ये बदलाव उस अवधि के बाद लागू होंगे जिसमें सदस्यता रद्द नहीं की जा सकती. प्लान बदलने पर, तय समय के लिए सदस्यता लेने की शर्त लागू नहीं होती. इसका मतलब है कि प्लान बदलने के लिए, कमिटमेंट पीरियड के खत्म होने का इंतज़ार नहीं करना पड़ता. यह बदलाव, सेट किए गए रिप्लेसमेंट मोड के आधार पर, तुरंत या पेमेंट की अगली तारीख पर लागू होता है.
  • एक ही शुल्क लेकर सदस्यता देने वाले प्रॉडक्ट के प्लान में बदलाव: किस्तों में पेमेंट करने वाले बुनियादी प्लान से, उसी शुल्क लेकर सदस्यता देने वाले प्रॉडक्ट के ऐसे बुनियादी प्लान पर स्विच नहीं किया जा सकता जिसमें किस्तों में पेमेंट करने की सुविधा नहीं है.
  • डेवलपर से जुड़ी रीयल-टाइम सूचनाएं (आरटीडीएन): अगर बिना किसी शुल्क के आज़माने की अवधि के दौरान सदस्यता रद्द की जाती है, तो SUBSCRIPTION_CANCELLATION_SCHEDULED आरटीडीएन तुरंत भेजी जाती है. सदस्यता रद्द करने का अनुरोध अभी पूरा नहीं हुआ है. यह अनुरोध, बिना किसी शुल्क के सदस्यता इस्तेमाल करने की अवधि खत्म होने के बाद ही लागू होगा. इसके बाद, अगर उपयोगकर्ता ने सदस्यता वापस नहीं लाई है, तो कमिटमेंट की अवधि खत्म होने पर SUBSCRIPTION_CANCELED और SUBSCRIPTION_EXPIRED आरटीडीएन भेजे जाते हैं.

  • पेमेंट / रेवेन्यू: हर महीने उपयोगकर्ता के पेमेंट करने के बाद, डेवलपर को पेमेंट किया जाता है. हालांकि, इसके लिए वही शर्तें लागू होंगी जो अन्य सभी सदस्यताओं पर लागू होती हैं. जब उपयोगकर्ता किस्तों में सदस्यता लेने के लिए साइन अप करता है, तब डेवलपर को ऐडवांस में पेमेंट नहीं किया जाता.

  • किस्त का पेमेंट न मिलने पर: अगर कोई उपयोगकर्ता सदस्यता के लिए किस्त का पेमेंट नहीं करता है, तो Google और डेवलपर, दोनों ही उस उपयोगकर्ता से बकाया पेमेंट नहीं मांगेंगे. हालांकि, Google, पेमेंट फिर से करने की सामान्य प्रक्रिया के तहत, ग्रेस पीरियड या खाते पर रोक लगने की अवधि के दौरान, समय-समय पर पेमेंट फिर से करने की कोशिश कर सकता है. Google, डेवलपर को बकाया किस्तों का पेमेंट करने के लिए ज़िम्मेदार नहीं होगा.

  • Play Billing Library की उपलब्धता: installmentDetails फ़ील्ड, सिर्फ़ PBL 7 या उसके बाद के वर्शन के लिए उपलब्ध है. PBL 5 और इसके बाद के वर्शन के लिए, किस्त वाली सदस्यता को queryProductDetails() का इस्तेमाल करके वापस किया जाता है. हालांकि, सदस्यता में किस्त की पूरी जानकारी शामिल नहीं होगी. जैसे, प्लान के लिए किए गए पेमेंट की संख्या.

उपयोगकर्ताओं को सदस्यता मैनेज करने की अनुमति देने के लिए डीप लिंक का इस्तेमाल करना

आपके ऐप्लिकेशन में सेटिंग या प्राथमिकताओं वाली स्क्रीन पर एक लिंक होना चाहिए. इससे लोग अपनी सदस्यताएं मैनेज कर पाएंगे. इस लिंक को अपने ऐप्लिकेशन के नैचुरल लुक और फ़ील में शामिल किया जा सकता है.

अपने ऐप्लिकेशन में, Google Play के सदस्यता केंद्र का डीप लिंक शामिल किया जा सकता है. इससे उपयोगकर्ता, उन सदस्यताओं को मैनेज कर पाएंगे जिनकी समयसीमा खत्म नहीं हुई है. यह पता लगाने के लिए कि किसी सदस्यता की समयसीमा खत्म हुई है या नहीं, सदस्यता संसाधन के subscriptionState फ़ील्ड का इस्तेमाल करें. इसके आधार पर, Play Store के सदस्यता केंद्र में डीप लिंक करने के कई तरीके हैं.

उपयोगकर्ताओं को उस पेज पर भेजने के लिए इस यूआरएल का इस्तेमाल करें जहां उनकी सभी सदस्यताएं दिखती हैं. जैसा कि पहली और दूसरी इमेज में दिखाया गया है:

https://play.google.com/store/account/subscriptions
Play Store की सदस्यताएं स्क्रीन पर, Google Play के ज़रिए बिल की जाने वाली सभी सदस्यताओं की स्थिति दिखती है.
पहली इमेज. Play Store की सदस्यताएं स्क्रीन पर, Google Play के ज़रिए बिल की जाने वाली सभी सदस्यताओं की स्थिति दिखती है.


ज़्यादा जानकारी देखने के लिए, किसी सदस्यता पर टैप करें.
दूसरी इमेज. ज़्यादा जानकारी देखने के लिए, किसी सदस्यता पर टैप करें.

यह डीप लिंक, किसी उपयोगकर्ता को Play Store के सदस्यता केंद्र से रद्द की गई सदस्यता को बहाल करने में मदद कर सकता है.

अगर आपको बिना किसी रुकावट के चालू सदस्यता के मैनेजमेंट पेज से सीधे लिंक करना है, तो खरीदे गए पैकेज का नाम और productId बताएं. किसी मौजूदा सदस्यता के लिए, प्रोग्राम के हिसाब से productId तय करने के लिए, अपने ऐप्लिकेशन के बैकएंड से क्वेरी करें. इसके अलावा, किसी उपयोगकर्ता से जुड़ी सदस्यताओं की सूची पाने के लिए, BillingClient.queryPurchasesAsync() को कॉल करें. हर सदस्यता में, सदस्यता की स्थिति की जानकारी के तौर पर उससे जुड़ा productId शामिल होता है. सदस्यता की खरीदारी से जुड़े हर SubscriptionPurchaseLineItem ऑब्जेक्ट में, productId वैल्यू होती है. यह वैल्यू, उस सदस्यता से जुड़ी होती है जिसे उपयोगकर्ता ने उस लाइन आइटम में खरीदा है.

लोगों को सदस्यता मैनेज करने की किसी खास स्क्रीन पर ले जाने के लिए, इस यूआरएल का इस्तेमाल करें. साथ ही, "your-sub-product-id" और "your-app-package" को क्रमशः productId और ऐप्लिकेशन पैकेज के नाम से बदलें:

https://play.google.com/store/account/subscriptions?sku=your-sub-product-id&package=your-app-package

इसके बाद, उपयोगकर्ता पेमेंट के तरीकों को मैनेज कर सकता है. साथ ही, सदस्यता रद्द करने, फिर से सदस्यता लेने, और सदस्यता रोकने जैसी सुविधाओं को ऐक्सेस कर सकता है.

उपयोगकर्ताओं को अपनी सदस्यता अपग्रेड, डाउनग्रेड या बदलने की अनुमति दें

मौजूदा सदस्यों को उनकी ज़रूरतों के हिसाब से सदस्यता प्लान बदलने के लिए, ये विकल्प दिए जा सकते हैं:

  • अगर आपने सदस्यता के कई टियर बेचे हैं, जैसे कि "बुनियादी" और "प्रीमियम" सदस्यता, तो उपयोगकर्ताओं को टियर बदलने की अनुमति दी जा सकती है. इसके लिए, उन्हें किसी दूसरी सदस्यता का बुनियादी प्लान या ऑफ़र खरीदना होगा.
  • उपयोगकर्ताओं को बिलिंग की मौजूदा अवधि बदलने की अनुमति दी जा सकती है. जैसे, हर महीने वाले प्लान से सालाना प्लान पर स्विच करना.
  • आपके पास उपयोगकर्ताओं को, अपने-आप रिन्यू होने वाले और प्रीपेड प्लान के बीच स्विच करने की अनुमति देने का विकल्प भी होता है.

इनमें से किसी भी बदलाव को बढ़ावा देने के लिए, सदस्यता के ऑफ़र दिए जा सकते हैं. इससे ज़रूरी शर्तें पूरी करने वाले लोगों को छूट दी जा सकती है. उदाहरण के लिए, आप एक ऐसा ऑफ़र बना सकते हैं जिसमें हर महीने के प्लान से सालाना प्लान पर स्विच करने पर पहले साल के लिए 50% की छूट दी जाए. साथ ही, इस ऑफ़र को सिर्फ़ उन लोगों के लिए उपलब्ध कराया जा सकता है जिन्होंने हर महीने के प्लान की सदस्यता ली है और इस ऑफ़र को नहीं खरीदा है. ऑफ़र पाने की ज़रूरी शर्तों के बारे में ज़्यादा जानकारी सहायता केंद्र में उपलब्ध है

तीसरी इमेज में, एक ऐप्लिकेशन का उदाहरण दिखाया गया है. इसमें तीन अलग-अलग प्लान दिए गए हैं:

इस ऐप्लिकेशन में सदस्यता के तीन टियर हैं..
तीसरी इमेज. इस ऐप्लिकेशन में सदस्यता के तीन टियर हैं.

आपका ऐप्लिकेशन, उपयोगकर्ताओं को सदस्यता बदलने के विकल्प देने के लिए, तीसरे फ़िगर जैसी स्क्रीन दिखा सकता है. सभी मामलों में, उपयोगकर्ताओं को यह साफ़ तौर पर पता होना चाहिए कि उनका मौजूदा सदस्यता प्लान क्या है और उनके पास इसे बदलने के कौनसे विकल्प हैं.

जब उपयोगकर्ता अपनी सदस्यता को अपग्रेड, डाउनग्रेड या बदल देते हैं, तब आपको बदलाव का तरीका तय करना होता है. इससे यह तय होता है कि पैसे चुकाकर ली गई मौजूदा सदस्यता की बिलिंग अवधि के बचे हुए दिनों का शुल्क कैसे लागू किया जाएगा. साथ ही, यह भी तय होता है कि एनटाइटलमेंट में बदलाव कब होगा.

बदले जा सकने वाले मोड

यहां दी गई टेबल में, उपलब्ध रिप्लेसमेंट मोड और उनके इस्तेमाल के उदाहरण दिए गए हैं. साथ ही, यह भी बताया गया है कि किन पेमेंट को 'पेड' माना जाता है.

बदलाव का मोड

ब्यौरा

उदाहरण उपयोग

किस्तों में सदस्यता लेने की सुविधा को बदलने के लिए, किए गए पेमेंट को 'चुका दिया गया' के तौर पर रिकॉर्ड किया गया

WITH_TIME_PRORATION

सदस्यता वाले आइटम को तुरंत अपग्रेड या डाउनग्रेड कर दिया जाता है. बचे हुए समय को कीमत के अंतर के हिसाब से अडजस्ट किया जाता है. साथ ही, अगली बिलिंग की तारीख को आगे बढ़ाकर, नई सदस्यता के लिए क्रेडिट कर दिया जाता है. यह डिफ़ॉल्ट व्यवहार है.

बिना किसी अतिरिक्त शुल्क के, ज़्यादा कीमत वाले टियर पर अपग्रेड करें.

0

CHARGE_PRORATED_PRICE

सदस्यता वाले आइटम को तुरंत अपग्रेड कर दिया जाता है. हालांकि, बिलिंग साइकल में कोई बदलाव नहीं होता. इसके बाद, उपयोगकर्ता से बचे हुए समय के लिए कीमत का अंतर लिया जाता है.

ध्यान दें: यह विकल्प सिर्फ़ सदस्यता वाले आइटम को अपग्रेड करने के लिए उपलब्ध है. अपग्रेड करने पर, समय की हर यूनिट के लिए कीमत बढ़ जाती है.

बिलिंग की तारीख बदले बिना, ज़्यादा कीमत वाले टियर पर अपग्रेड करें.

1

CHARGE_FULL_PRICE

सदस्यता वाले आइटम को तुरंत अपग्रेड या डाउनग्रेड कर दिया जाता है. साथ ही, उपयोगकर्ता से नए एनटाइटलमेंट के लिए पूरा शुल्क तुरंत ले लिया जाता है. पिछली सदस्यता की बची हुई वैल्यू को उसी एनटाइटलमेंट के लिए आगे बढ़ाया जाता है. इसके अलावा, किसी दूसरे एनटाइटलमेंट पर स्विच करने पर, बची हुई वैल्यू को समय के हिसाब से बांटा जाता है.

ध्यान दें: अगर नई सदस्यता को मुफ़्त में आज़माने की सुविधा या शुरुआती ऑफ़र मिलता है, तो अपग्रेड या डाउनग्रेड करते समय उपयोगकर्ता से कोई शुल्क नहीं लिया जाता. इसके अलावा, उससे शुरुआती ऑफ़र के लिए तय की गई कीमत ली जाती है.

बिलिंग की कम अवधि से ज़्यादा अवधि पर अपग्रेड करें.

1 (ध्यान दें: अगर नई सदस्यता को बिना किसी शुल्क के आज़माया जा सकता है, तो 0)

WITHOUT_PRORATION

सदस्यता को तुरंत अपग्रेड या डाउनग्रेड कर दिया जाता है. साथ ही, सदस्यता रिन्यू होने पर नया शुल्क लिया जाता है. बिलिंग साइकल में कोई बदलाव नहीं होता.

बिना किसी शुल्क के सदस्यता इस्तेमाल करने की बची हुई अवधि के दौरान, सदस्यता के किसी अपग्रेड किए गए टियर पर अपग्रेड करें.

0

DEFERRED

सदस्यता रिन्यू होने पर ही, सदस्यता वाले आइटम को अपग्रेड या डाउनग्रेड किया जाता है. हालांकि, नई खरीदारी के लिए ये दो आइटम तुरंत जारी किए जाते हैं:

  • मौजूदा आइटम के लिए, अपने-आप रिन्यू होने की सुविधा बंद है. साथ ही, इसके खत्म होने का समय, मौजूदा बिलिंग साइकल के खत्म होने का समय है.
  • नया एनटाइटलमेंट, जो मौजूदा आइटम की समयसीमा खत्म होने के बाद शुरू होता है. अगर उपयोगकर्ता चाहें, तो उन्हें अतिरिक्त बदलाव करने की अनुमति दी जा सकती है. उदाहरण के लिए, उपयोगकर्ता, मूल प्लान पर वापस जा सकते हैं या प्लान बदलने की नई सुविधा का इस्तेमाल कर सकते हैं.

ध्यान दें: किस्तों में सदस्यता लेने पर, प्लान में बदलाव अगले पेमेंट की तारीख से लागू होता है.

कम कीमत वाले टियर पर डाउनग्रेड करें.

1

KEEP_EXISTING

सदस्यता आइटम के लिए पैसे चुकाने का शेड्यूल, सदस्यता बदलने पर भी नहीं बदलता.

जब किसी आइटम में बदलाव नहीं करना हो, तब ऐड-ऑन वाली सदस्यता में सदस्यता आइटम जोड़ना या हटाना.

लागू नहीं

अपग्रेड या डाउनग्रेड करने के ऑफ़र के अलग-अलग अपसेल और विनबैक ऐप्लिकेशन के बारे में ज़्यादा जानने के लिए, ऑफ़र और प्रमोशन से जुड़ी गाइड पढ़ें.

किसी खरीदारी के लिए, रिप्लेसमेंट मोड सेट करना

अपनी प्राथमिकताओं और कारोबारी नियमों के आधार पर, अलग-अलग तरह की सदस्यता ट्रांज़िशन के लिए, अलग-अलग रिप्लेसमेंट मोड का इस्तेमाल किया जा सकता है. इस सेक्शन में, सदस्यता में बदलाव होने पर, सदस्यता बदलने का मोड सेट करने का तरीका बताया गया है. साथ ही, इस पर लागू होने वाली सीमाओं के बारे में भी बताया गया है.

फिर से सदस्यता लेना या एक ही सदस्यता के तहत प्लान बदलना

Google Play Console में, डिफ़ॉल्ट रूप से बदलने का मोड तय किया जा सकता है. इस सेटिंग की मदद से, यह चुना जा सकता है कि अगर मौजूदा सदस्य, उसी सदस्यता के लिए कोई और बुनियादी प्लान या ऑफ़र खरीदते हैं या सदस्यता रद्द करने के बाद फिर से सदस्यता लेते हैं, तो उनसे शुल्क कब लेना है. उपलब्ध विकल्प ये हैं: तुरंत शुल्क लें, जो CHARGE_FULL_PRICE के बराबर है. इसके अलावा, बिलिंग की अगली तारीख पर शुल्क लें, जो WITHOUT_PRORATION के बराबर है. एक ही सदस्यता के बुनियादी प्लान के बीच स्विच करते समय, सिर्फ़ ये दो मोड काम के होते हैं.

उदाहरण के लिए, अगर किसी उपयोगकर्ता के सदस्यता रद्द करने के बाद, लेकिन सदस्यता खत्म होने से पहले, उसी प्लान के लिए विनबैक ऑफ़र लागू किया जा रहा है, तो नई खरीदारी को सामान्य खरीदारी के तौर पर प्रोसेस किया जा सकता है. इसके लिए, SubscriptionUpdateParams में कोई वैल्यू डालने की ज़रूरत नहीं है. सिस्टम, सदस्यता में कॉन्फ़िगर किए गए डिफ़ॉल्ट रिप्लेसमेंट मोड का इस्तेमाल करता है. साथ ही, पुरानी खरीदारी से नई खरीदारी में प्लान के ट्रांज़िशन को अपने-आप मैनेज करता है.

सदस्यताओं के बीच प्लान स्विच करना या डिफ़ॉल्ट रिप्लेसमेंट मोड को बदलना

अगर उपयोगकर्ता सदस्यता वाले प्रॉडक्ट बदल रहा है—कोई दूसरी सदस्यता खरीद रहा है—या अगर आपको किसी भी वजह से, सदस्यता बदलने के डिफ़ॉल्ट मोड को बदलना है, तो खरीदारी के फ़्लो के पैरामीटर के तौर पर, रनटाइम पर प्रोरेट की गई दर तय करें.

रनटाइम खरीदारी के फ़्लो के कॉन्फ़िगरेशन के हिस्से के तौर पर, SubscriptionProductReplacementParams या SubscriptionUpdateParams में ReplacementMode को सही तरीके से उपलब्ध कराने के लिए, इन पाबंदियों का ध्यान रखें:

  • अपग्रेड, डाउनग्रेड या एक ही सदस्यता को प्रीपेड प्लान में प्रीपेड प्लान, अपने-आप रिन्यू होने वाले प्लान या किस्त वाले प्लान से स्विच करने के दौरान, सिर्फ़ CHARGE_FULL_PRICE को पेमेंट के तरीके के तौर पर इस्तेमाल किया जा सकता है. अगर आपने कोई दूसरा रिप्लेसमेंट मोड तय किया है, तो खरीदारी नहीं हो पाएगी और उपयोगकर्ता को गड़बड़ी का मैसेज दिखेगा.
  • एक ही सदस्यता के तहत, प्रीपेड प्लान या अपने-आप रिन्यू होने वाले प्लान से अपने-आप रिन्यू होने वाले प्लान पर स्विच करने पर, प्रो-रेटिंग के मान्य मोड CHARGE_FULL_PRICE और WITHOUT_PRORATION होते हैं. अगर आपने कोई दूसरा प्रोरेशन मोड चुना है, तो खरीदारी नहीं हो पाएगी और उपयोगकर्ता को गड़बड़ी का मैसेज दिखेगा.
  • एक ही शुल्क लेकर सदस्यता देने वाले प्रॉडक्ट के लिए, किस्तों में पैसे चुकाने वाले बुनियादी प्लान से बिना किस्तों वाले बुनियादी प्लान पर स्विच करने की अनुमति नहीं है.
  • SubscriptionProductReplacementParams में KEEP_EXISTING रिप्लेसमेंट मोड का इस्तेमाल करके, किसी सामान को बदलते समय उसके पेमेंट को पहले जैसा ही रखने के लिए, पुराने प्रॉडक्ट का आईडी नए प्रॉडक्ट के आईडी के जैसा ही होना चाहिए. SubscriptionUpdateParams में KEEP_EXISTING मोड काम नहीं करता.

बदलाव के उदाहरण और व्यवहार

हर प्रोरेशन मोड के काम करने का तरीका समझने के लिए, यहां दिया गया उदाहरण देखें:

सैमवाइज़ ने Country Gardener ऐप्लिकेशन से ऑनलाइन कॉन्टेंट की सदस्यता ली है. उसने कॉन्टेंट के टियर 1 वर्शन की सदस्यता ली है. इसके लिए, वह हर महीने पैसे चुकाता है. इस वर्शन में सिर्फ़ टेक्स्ट होता है. इस सदस्यता के लिए, उसे हर महीने 2 डॉलर चुकाने पड़ते हैं. यह सदस्यता हर महीने की पहली तारीख को रिन्यू होती है.

सैमवाइज़ ने 15 अप्रैल को, टियर 2 की सालाना सदस्यता को अपग्रेड करने का विकल्प चुना. इसमें वीडियो अपडेट शामिल हैं और इसकी कीमत 36 डॉलर प्रति साल है.

सदस्यता अपग्रेड करते समय, डेवलपर को प्रोरेटिंग मोड चुनना होता है. यहां दी गई सूची में बताया गया है कि हर प्रोरेशन मोड, सैमवाइज़ की सदस्यता पर कैसे असर डालता है:

WITH_TIME_PRORATION

सैमवाइज़ की टियर 1 सदस्यता तुरंत खत्म हो जाएगी. ऐसा इसलिए हुआ, क्योंकि उसने पूरे महीने (1 से 30 अप्रैल) के लिए सदस्यता का शुल्क चुकाया था. हालांकि, उसने सदस्यता की अवधि के बीच में ही अपग्रेड कर लिया था. इसलिए, आधे महीने की सदस्यता (1 डॉलर) का शुल्क उसकी नई सदस्यता पर लागू किया गया. हालांकि, नई सदस्यता के लिए सालाना 36 डॉलर चुकाने होते हैं. इसलिए, 1 डॉलर के क्रेडिट बैलेंस से सिर्फ़ 10 दिनों (16 से 25 अप्रैल) के लिए सदस्यता ली जा सकती है. इसलिए, 26 अप्रैल को उससे नई सदस्यता के लिए 36 डॉलर लिए जाते हैं. इसके बाद, हर साल 26 अप्रैल को उससे 36 डॉलर लिए जाते हैं.

खरीदारी पूरी होने के तुरंत बाद, आपको अपने ऐप्लिकेशन के PurchasesUpdatedListener को कॉल करना चाहिए. साथ ही, queryPurchasesAsync() कॉल के हिस्से के तौर पर, नई खरीदारी को वापस पाने में सक्षम होना चाहिए. आपके बैकएंड को तुरंत SUBSCRIPTION_PURCHASED डेवलपर से जुड़ी रीयल टाइम सूचना मिलती है.

CHARGE_PRORATED_PRICE

इस मोड का इस्तेमाल किया जा सकता है, क्योंकि टियर 2 की सदस्यता की कीमत, टियर 1 की सदस्यता की कीमत से ज़्यादा है. टियर 2 की सदस्यता की कीमत 36 डॉलर/साल = 3 डॉलर/महीना है, जबकि टियर 1 की सदस्यता की कीमत 2 डॉलर/महीना है. सैमवाइज़ की टियर 1 सदस्यता तुरंत खत्म हो जाएगी. क्योंकि उसने पूरे महीने के लिए सदस्यता ली थी, लेकिन सिर्फ़ आधे महीने के लिए इसका इस्तेमाल किया था. इसलिए, उसकी नई सदस्यता पर आधे महीने की सदस्यता (1 डॉलर) लागू की गई है. हालांकि, नई सदस्यता का शुल्क 36 डॉलर/साल है. इसलिए, बचे हुए 15 दिनों के लिए 1.50 डॉलर का शुल्क लिया जाएगा. इस तरह, नई सदस्यता के लिए उससे 0.50 डॉलर का अंतर लिया जाएगा. सैमवाइज़ से 1 मई को, सदस्यता के नए टियर के लिए 36 डॉलर का शुल्क लिया जाता है. इसके बाद, हर साल 1 मई को 36 डॉलर का शुल्क लिया जाता है.

खरीदारी पूरी होने के तुरंत बाद, आपको अपने ऐप्लिकेशन के PurchasesUpdatedListener को कॉल करना चाहिए. साथ ही, queryPurchasesAsync() कॉल के हिस्से के तौर पर, नई खरीदारी को वापस पाने में सक्षम होना चाहिए. आपके बैकएंड को तुरंत SUBSCRIPTION_PURCHASED डेवलपर से जुड़ी रीयल-टाइम सूचना मिलती है.

WITHOUT_PRORATION

सैमवाइज़ की टियर 1 सदस्यता को बिना किसी अतिरिक्त शुल्क के तुरंत टियर 2 में अपग्रेड कर दिया जाता है. इसके बाद, 1 मई को उससे सदस्यता के नए टियर के लिए 36 डॉलर का शुल्क लिया जाता है. साथ ही, अगले साल से हर साल 1 मई को उससे 36 डॉलर का शुल्क लिया जाता है.

खरीदारी पूरी होने के तुरंत बाद, आपको अपने ऐप्लिकेशन के PurchasesUpdatedListener को कॉल करना चाहिए. साथ ही, queryPurchasesAsync() कॉल के हिस्से के तौर पर, नई खरीदारी को वापस पाने में सक्षम होना चाहिए. आपके बैकएंड को तुरंत SUBSCRIPTION_PURCHASED डेवलपर से जुड़ी रीयल-टाइम सूचना मिलती है.

DEFERRED

सैमवाइज़ की टियर 1 सदस्यता 30 अप्रैल को खत्म होगी. सैमवाइज़ ने 1 मई को टियर 2 की सदस्यता ली. इसके लिए, उससे 36 डॉलर का शुल्क लिया गया.

खरीदारी पूरी होने के तुरंत बाद, आपको अपने ऐप्लिकेशन के PurchasesUpdatedListener को कॉल करना चाहिए. साथ ही, queryPurchasesAsync() कॉल के हिस्से के तौर पर, नई खरीदारी को वापस पाने में सक्षम होना चाहिए. आपके बैकएंड को तुरंत SUBSCRIPTION_PURCHASED डेवलपर से जुड़ी रीयल-टाइम सूचना मिलती है. आपको खरीदारी को उसी तरह प्रोसेस करना चाहिए जिस तरह उस समय की गई किसी अन्य नई खरीदारी को प्रोसेस किया जाता है. खास तौर पर, पक्का करें कि आपने नई खरीदारी की पुष्टि कर दी हो. ध्यान दें कि नई सदस्यता का startTime, सदस्यता बदलने की प्रोसेस पूरी होने पर दिखता है. यह प्रोसेस तब पूरी होती है, जब पुरानी सदस्यता की समयसीमा खत्म हो जाती है. इस समय, आपको नए सदस्यता प्लान के लिए SUBSCRIPTION_RENEWED RTDN मिलता है. Handle deferred replacement में ReplacementMode.DEFERRED के काम करने के तरीके के बारे में ज़्यादा जानें.

CHARGE_FULL_PRICE

सैमवाइज़ की टियर 1 सदस्यता तुरंत खत्म हो जाएगी. उसकी टियर 2 सदस्यता आज से शुरू हो गई है और उससे 36 डॉलर का शुल्क लिया गया है. क्योंकि उसने पूरे महीने के लिए पेमेंट किया था, लेकिन सिर्फ़ आधे महीने के लिए सदस्यता का इस्तेमाल किया. इसलिए, आधे महीने की सदस्यता (1 डॉलर) को उसकी नई सदस्यता पर लागू कर दिया गया है. नई सदस्यता की कीमत 36 डॉलर/साल है. इसलिए, उसे अपनी सदस्यता की अवधि में एक साल का 1/36वां हिस्सा (~10 दिन) जोड़ दिया जाएगा. इसलिए, सैमवाइज़ से अगली बार 36 डॉलर का शुल्क लिया जाएगा. यह शुल्क, आज से एक साल और 10 दिन बाद लिया जाएगा. इसके बाद, उनसे हर साल 36 डॉलर का शुल्क लिया जाता है.

प्रोरेशन मोड चुनते समय, बदलाव से जुड़े हमारे सुझाव ज़रूर देखें.

KEEP_EXISTING

सैमवाइज़ ने Country Gardener ऐप्लिकेशन से ऑनलाइन कॉन्टेंट की सदस्यता ली है. उसने बुनियादी कॉन्टेंट के लिए, प्लान 1 की सदस्यता ली है. यह सदस्यता हर महीने रिन्यू होती है. इस सदस्यता के लिए, शुरुआती कीमत के तौर पर तीन महीनों तक हर महीने दो डॉलर चुकाने होंगे. इसके बाद, हर महीने चार डॉलर चुकाने होंगे. सैमवाइज़ ने इसे 1 अप्रैल को खरीदा था. Country Gardener ऐप्लिकेशन, प्लान 2 को ऐड-ऑन के तौर पर खास कॉन्टेंट के साथ उपलब्ध कराता है. इसके लिए, हर महीने तीन डॉलर चुकाने होते हैं. सैमवाइज़ ने 15 अप्रैल को Country Gardener ऐप्लिकेशन की सदस्यता में प्लान 2 जोड़ा. हालाँकि, उसने प्लान 1 को चालू रखा. सैमवाइज़ का पैसे चुकाने का शेड्यूल यहां दिया गया है:

  • प्लान 2 के लिए, 1.50 डॉलर का शुल्क 15 अप्रैल को चुकाना होगा. यह शुल्क, प्लान की अवधि के हिसाब से तय किया गया है.
  • अगले दो महीनों के लिए, हर महीने 5.00 डॉलर का शुल्क लिया जाएगा. इसमें प्लान 1 के लिए शुरुआती कीमत और प्लान 2 के लिए सामान्य कीमत शामिल है.
  • इसके बाद, हर महीने 7.00 डॉलर का पेमेंट करना होगा.

ऐप्लिकेशन में सदस्यता में बदलाव करने की सुविधा चालू करना

आपका ऐप्लिकेशन, उपयोगकर्ताओं को अपग्रेड या डाउनग्रेड करने का विकल्प दे सकता है. इसके लिए, उसे वही तरीका अपनाना होगा जो खरीदारी का फ़्लो शुरू करने के लिए इस्तेमाल किया जाता है. हालांकि, अपग्रेड या डाउनग्रेड करते समय, आपको मौजूदा सदस्यता, आने वाले समय में (अपग्रेड या डाउनग्रेड की गई) सदस्यता, और इस्तेमाल किए जाने वाले मोड की जानकारी देनी होगी.

बदलाव के लिए, SubscriptionProductReplacementParams का इस्तेमाल करें (सुझाया गया)

यहां दिए गए उदाहरण में, SubscriptionProductReplacementParams का इस्तेमाल करके सदस्यता अपडेट करने का तरीका बताया गया है.

  • BillingFlowParams.ProductDetailsParams ऑब्जेक्ट में अब setSubscriptionProductReplacementParams() तरीका उपलब्ध है. इससे प्रॉडक्ट के लेवल पर, रिप्लेसमेंट की जानकारी दी जा सकती है.

  • SubscriptionProductReplacementParams में दो सेटर तरीके होते हैं:

    • setOldProductId:यह वह पुराना प्रॉडक्ट है जिसे मौजूदा ProductDetails. में मौजूद प्रॉडक्ट से बदला जाना है
    • setReplacementMode:यह आइटम लेवल पर, सामान बदलने का मोड है. ये मोड, SubscriptionUpdateParams की तरह ही होते हैं. हालांकि, वैल्यू मैपिंग को अपडेट कर दिया गया है.
  • मौजूदा खरीदारी के लेवल के अपडेट पैरामीटर BillingFlowParams.setSubscriptionUpdateParams() को setOldPurchaseToken() के साथ बनाया जाना चाहिए.

  • setSubscriptionProductReplacementParams() को कॉल करने के बाद, ProductDetailsParams पर SubscriptionUpdateParams.setSubscriptionReplacementMode() का कोई असर नहीं होगा.

यहां दिए गए कोड सैंपल में, सदस्यता प्लान को (old_product_1, old_product_2) से (product_1, product_2, product_3) में बदलने का तरीका बताया गया है. इस उदाहरण में, product_1, old_product_1 की जगह लेता है, product_2, old_product_2 की जगह लेता है, और product_3 को सदस्यता में तुरंत जोड़ दिया जाता है.

Kotlin

val billingClient: BillingClient = this.billingClient
val replacementModeForBasePlan: Int = 1
val replacementModeForAddon: Int = 1

val purchaseTokenOfExistingSubscription: String = "your_old_purchase_token"

// ProductDetails instances obtained from queryProductDetailsAsync();

val productDetailsParams1 =
    ProductDetailsParams.newBuilder()
        .setProductDetails(productDetails1) // Required: Set the ProductDetails object
        .setSubscriptionProductReplacementParams(
            SubscriptionProductReplacementParams.newBuilder()
                .setOldProductId("old_product_id_1")
                .setReplacementMode(replacementModeForBasePlan)
                .build()
        )
        .build()

val productDetailsParams2 =
    ProductDetailsParams.newBuilder()
        .setProductDetails(productDetails2) // Required: Set the ProductDetails object
        .setSubscriptionProductReplacementParams(
            SubscriptionProductReplacementParams.newBuilder()
                .setOldProductId("old_product_id_2")
                .setReplacementMode(replacementModeForAddon)
                .build()
        )
        .build()

// Example for a third item without replacement params
val productDetailsParams3 =
    ProductDetailsParams.newBuilder()
        .setProductDetails(productDetails3) // Required: Set the ProductDetails object
        .build()

val newProductDetailsList = listOf(
    productDetailsParams1,
    productDetailsParams2,
    productDetailsParams3
)

val billingFlowParams =
    BillingFlowParams.newBuilder()
        .setSubscriptionUpdateParams(
            SubscriptionUpdateParams.newBuilder()
                .setOldPurchaseToken(purchaseTokenOfExistingSubscription)
                .build()
        )
        .setProductDetailsParamsList(newProductDetailsList)
        .build()

// To launch the billing flow:
// billingClient.launchBillingFlow(activity, billingFlowParams)

Java

BillingClient billingClient = ;

int replacementModeForBasePlan =;
int replacementModeForAddon =;
// ProductDetails obtained from queryProductDetailsAsync().
ProductDetailsParams productDetails1 =
  ProductDetailsParams.newBuilder()
      .setSubscriptionProductReplacementParams(
           SubscriptionProductReplacementParams.newBuilder()
               .setOldProductId("old_product_id_1")
               .setReplacementMode(replacementModeForBasePlan))
               .build();
ProductDetailsParams productDetails2 =
  ProductDetailsParams.newBuilder()
      .setSubscriptionProductReplacementParams(
           SubscriptionProductReplacementParams.newBuilder()
               .setOldProductId("old_product_id_2")
               .setReplacementMode(replacementModeForAddon))
               .build();
ProductDetailsParams productDetails3 = ...;

ArrayList newProductDetailsList = new ArrayList<>();
newProductDetailsList.add(productDetails1);
newProductDetailsList.add(productDetails2);
newProductDetailsList.add(productDetails3);

BillingFlowParams billingFlowParams =
    BillingFlowParams.newBuilder()
        .setSubscriptionUpdateParams(
          SubscriptionUpdateParams.newBuilder()
              .setOldPurchaseToken(purchaseTokenOfExistingSubscription)
             .build())
        .setProductDetailsParamsList(productDetailsList)
        .build();

billingClient.launchBillingFlow(billingFlowParams);

सदस्यता बदलने के लिए, SubscriptionUpdateParams सेट करें (अब इस्तेमाल के लिए उपलब्ध नहीं है)

यहां दिए गए उदाहरण में, SubscriptionUpdateParams का इस्तेमाल करके सदस्यता अपडेट करने का तरीका बताया गया है.

Kotlin

val offerToken = productDetails
        .getSubscriptionOfferDetails(selectedOfferIndex)
        .getOfferToken()

val billingParams = BillingFlowParams.newBuilder().setProductDetailsParamsList(
       listOf(
           BillingFlowParams.ProductDetailsParams.newBuilder()
               .setProductDetails(productDetails)
               .setOfferToken(offerToken)
               .build()
       )
       ).setSubscriptionUpdateParams(
           BillingFlowParams.SubscriptionUpdateParams.newBuilder()
               .setOldPurchaseToken("old_purchase_token")
               .setSubscriptionReplacementMode(
                 BillingFlowParams.ReplacementMode.CHARGE_FULL_PRICE
               )
               .build()
       ).build()

billingClient.launchBillingFlow(
    activity,
    billingParams
   )
// ...

Java

String offerToken = productDetails
    .getSubscriptionOfferDetails(selectedOfferIndex)
    .getOfferToken();

BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
    .setProductDetailsParamsList(
        ImmuableList.of(
            ProductDetailsParams.newBuilder()
                // fetched via queryProductDetailsAsync
                .setProductDetails(productDetails)
                // offerToken can be found in
                // ProductDetails=>SubscriptionOfferDetails
                .setOfferToken(offerToken)
                .build()))
    .setSubscriptionUpdateParams(
        SubscriptionUpdateParams.newBuilder()
            // purchaseToken can be found in Purchase#getPurchaseToken
            .setOldPurchaseToken("old_purchase_token")
            .setSubscriptionReplacementMode(ReplacementMode.CHARGE_FULL_PRICE)
            .build())
    .build();

BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
// ...

बैटरी बदलने के सुझाव

यहां दी गई टेबल में, प्रोरैटिंग के अलग-अलग उदाहरण दिए गए हैं. साथ ही, हर उदाहरण के लिए हमारा सुझाव भी दिया गया है:

परिदृश्य बदलाव करने का सुझाया गया तरीका नतीजा
ज़्यादा कीमत वाले टियर पर अपग्रेड करना CHARGE_PRORATED_PRICE उपयोगकर्ता को तुरंत ऐक्सेस मिल जाता है. हालांकि, बिलिंग की अवधि वही रहती है.
कम कीमत वाले टियर पर डाउनग्रेड करना DEFERRED उपयोगकर्ता ने पहले ही ज़्यादा कीमत वाले टियर के लिए पेमेंट कर दिया है. इसलिए, उसे बिलिंग की अगली तारीख तक ऐक्सेस मिलता रहेगा.
मुफ़्त में आज़माने की सुविधा के दौरान अपग्रेड करना और ट्रायल जारी रखना WITHOUT_PRORATION उपयोगकर्ता, बिना किसी अतिरिक्त शुल्क के, आज़माने की अवधि के बचे हुए समय के लिए, बेहतर टियर में अपग्रेड करता है.
मुफ़्त में आज़माने की अवधि के दौरान अपग्रेड करने पर, मुफ़्त में आज़माने की सुविधा का ऐक्सेस खत्म हो जाता है CHARGE_PRORATED_PRICE उपयोगकर्ता को नए टियर का ऐक्सेस तुरंत मिल जाता है. साथ ही, बिना शुल्क आज़माने की सुविधा की बची हुई अवधि को भी नए टियर में जोड़ दिया जाता है. बची हुई वैल्यू का हिसाब, बुनियादी प्लान की कीमत के आधार पर लगाया जाता है.
ऐड-ऑन के साथ सदस्यता में, सदस्यता के कुछ आइटम को जोड़ने या हटाने के दौरान, सदस्यता के कुछ आइटम के पैसे चुकाने का शेड्यूल में कोई बदलाव न करना. KEEP_EXISTING उपयोगकर्ता, बिना बदलाव वाले आइटम के लिए पुराना शुल्क ही चुकाता रहेगा. नए आइटम तुरंत जोड़ दिए जाते हैं. बदले जाने वाले आइटम का मोड तय करके, अन्य पुराने आइटम बदले जा सकते हैं या उन्हें हटाया जा सकता है.

सदस्यता बदलने से जुड़ी खरीदारी को मैनेज करना

प्लान में बदलाव करने का मतलब है कि सभी शर्तों और मकसद के लिए, नई खरीदारी की जा रही है. बिलिंग फ़्लो पूरा होने के बाद, इन बदलावों को प्रोसेस किया जाना चाहिए और इस बात की पुष्टि की जानी चाहिए. नई खरीदारी को सही तरीके से प्रोसेस करने के साथ-साथ, आपको उस खरीदारी को बंद करना होगा जिसे बदला जा रहा है.

ऐप्लिकेशन में, इसका व्यवहार किसी नई खरीदारी की तरह ही होता है. आपके ऐप्लिकेशन को PurchasesUpdatedListener में नई खरीदारी का नतीजा मिलता है. साथ ही, नई खरीदारी queryPurchasesAsync में उपलब्ध होती है.

जब कोई खरीदारी, मौजूदा खरीदारी की जगह ले लेती है, तब Google Play Developer API, सदस्यता संसाधन में linkedPurchaseToken दिखाता है. आइटम लेवल पर रिप्लेसमेंट की जानकारी देखने के लिए, खरीदारी के नए इवेंट में SubscriptionPurchaseLineItem में जाकर itemReplacement देखें. इसके अलावा, offerPhase फ़ील्ड का इस्तेमाल करके, नई सदस्यता के लिए मौजूदा ऑफ़र के फ़ेज़ (जैसे कि प्रोरेटेड अवधि या बिना शुल्क आज़माने की अवधि) की पहचान की जा सकती है. इससे, उपयोगकर्ताओं को उनकी पसंद के मुताबिक अनुभव दिया जा सकता है. linkedPurchaseToken में दिए गए टोकन को अमान्य करना न भूलें, ताकि यह पक्का किया जा सके कि आपकी सेवाओं को ऐक्सेस करने के लिए पुराने टोकन का इस्तेमाल न किया जाए. अपग्रेड और डाउनग्रेड की खरीदारी को मैनेज करने के बारे में जानकारी पाने के लिए, अपग्रेड, डाउनग्रेड, और फिर से साइन अप करना लेख पढ़ें.

नया परचेज़ टोकन मिलने पर, पुष्टि करने की उसी प्रोसेस का पालन करें जिसका इस्तेमाल नए परचेज़ टोकन की पुष्टि करने के लिए किया जाता है. Google Play Billing Library से BillingClient.acknowledgePurchase() या Google Play Developer API से Purchases.subscriptions:acknowledge का इस्तेमाल करके, इन खरीदारी की पुष्टि करना न भूलें.

बदले गए डिवाइस को डिलीवर करने में लगने वाले समय को मैनेज करना

बदलाव को कुछ समय के लिए रोकने की सुविधा का इस्तेमाल करके, किसी उपयोगकर्ता को नए प्लान पर स्विच करने से पहले, पुराने प्लान के बचे हुए फ़ायदे इस्तेमाल करने की अनुमति दी जा सकती है.

नई खरीदारी के लिए ReplacementMode.DEFERRED का इस्तेमाल करने पर, queryPurchasesAsync() खरीदारी के बाद एक नया परचेज़ टोकन दिखाता है. यह टोकन, पुराने प्रॉडक्ट से तब तक जुड़ा रहता है, जब तक कि अगले रिन्यूअल की तारीख पर, सदस्यता को तुरंत बदलने की सुविधा लागू नहीं हो जाती. इसके बाद, नया प्रॉडक्ट वापस कर दिया जाता है.

पहले, इस तरह का उपयोगकर्ता अनुभव, बंद किए गए ProrationMode.DEFERRED की मदद से दिया जा सकता था. हालांकि, Play Billing Library 6 के साथ ProrationMode.DEFERRED को बंद कर दिया गया है. नीचे दी गई टेबल से जानें कि व्यवहार में कहां अंतर है:

समय

ProrationMode.DEFERRED (अब सेवा में नहीं है)

ReplacementMode.DEFERRED

खरीदारी का फ़्लो पूरा होने के तुरंत बाद (ऐप्लिकेशन)

PurchasesUpdatedListener को खरीदारी के बाद शुरू किया जाता है. इससे यह पता चलता है कि अपग्रेड या डाउनग्रेड की प्रोसेस पूरी हुई या नहीं.

अगले रिन्यूअल की तारीख तक, आपको पुराने प्लान का फ़ायदा मिलता रहेगा. यह पक्का करने के लिए कि ऐप्लिकेशन सही एनटाइटलमेंट दे रहा है, queryPurchasesAsync(), खरीदारी का एक ऐसा ऑब्जेक्ट दिखाता है जिसमें ओरिजनल खरीदारी का टोकन और ओरिजनल एनटाइटलमेंट होता है. यह तब तक दिखता है, जब तक कि खरीदारी को बदला नहीं जाता.

नया परचेज़ टोकन नहीं दिख रहा है. इसलिए, इसे अभी प्रोसेस नहीं किया जा सकता.

PurchasesUpdatedListener को खरीदारी के बाद शुरू किया जाता है. इससे यह पता चलता है कि अपग्रेड या डाउनग्रेड की प्रोसेस पूरी हुई या नहीं.

queryPurchasesAsync(), नए परचेज़ टोकन और उससे जुड़े ओरिजनल एनटाइटलमेंट के साथ खरीदारी वापस कर देता है.

नया परचेज़ टोकन दिखता है. इसलिए, इस समय इसे प्रोसेस किया जाना चाहिए. साथ ही, यह भी ध्यान में रखना चाहिए कि टोकन को कब बदला जाना है.

खरीदारी का फ़्लो पूरा होने के तुरंत बाद (बैकएंड)

खरीदारी के फ़्लो के बाद, SUBSCRIPTION_PURCHASED आरटीडीएन नहीं भेजा जाता है. बैकएंड को अब तक नई खरीदारी के बारे में पता नहीं चला है.

SUBSCRIPTION_PURCHASED आरटीडीएन, पुराने product_id के साथ भेजा जाता है. यह नए परचेज़ टोकन के लिए खरीदारी का फ़्लो पूरा होने के तुरंत बाद भेजा जाता है.

नए परचेज़ टोकन के साथ purchases.subscriptionsv2.get तरीके को कॉल करने पर, 'startTime' वाला एक परचेज़ दिखता है. इससे दो लाइन आइटम के साथ खरीदारी का समय पता चलता है:

  • एक पुराने एनटाइटलमेंट को दिखाता है और इसमें 'expiryTime' की वैल्यू आने वाले समय की होती है. पुराने एनटाइटलमेंट को रिन्यू नहीं किया जाएगा. साथ ही, इसमें DeferredItemReplacement होगा, जिसमें नए एनटाइटलमेंट का प्रॉडक्ट शामिल होगा. इससे पता चलता है कि सदस्यता खत्म होने पर, नई सदस्यता को बदलने का अनुरोध किया गया है.
  • एक हाल ही में खरीदे गए एनटाइटलमेंट को दिखाता है. इसके लिए, 'expiryTime' की कोई वैल्यू सेट नहीं की गई है.

पुराने परचेज़ टोकन के लिए, SUBSCRIPTION_EXPIRED इवेंट भेजा गया. old खरीदारी टोकन के साथ purchases.subscriptionsv2.get तरीके को कॉल करने पर, यह 'समयसीमा खत्म हो गई' के तौर पर दिखता है. ऐसा इसलिए होता है, क्योंकि पुराने प्लान का एनटाइटलमेंट, बचे हुए समय के लिए नई खरीदारी में ट्रांसफ़र कर दिया जाता है.

बदले जाने पर - खरीदारी के फ़्लो के बाद पहला रिन्यूअल (ऐप्लिकेशन)

queryPurchasesAsync(), नया परचेज़ टोकन और एनटाइटलमेंट के साथ एक नया Purchase ऑब्जेक्ट दिखाता है.

अब नया परचेज़ टोकन दिख रहा है, इसलिए इसे प्रोसेस किया जाना चाहिए.

queryPurchasesAsync() नए परचेज़ टोकन और उससे जुड़े नए एनटाइटलमेंट के साथ, खरीदारी को तुरंत वापस कर देता है.

खरीदारी का फ़्लो पूरा होने पर, नई खरीदारी को पहले ही प्रोसेस कर दिया जाना चाहिए. इसलिए, ऐप्लिकेशन को यह पक्का करने के अलावा कोई खास कार्रवाई नहीं करनी चाहिए कि सही एनटाइटलमेंट दिया गया है.

डिवाइस बदलने पर - खरीदारी के फ़्लो (बैकएंड) के बाद पहला रिन्यूअल

जब पहला SUBSCRIPTION_RENEWED RTDN भेजा जाता है, तब नई खरीदारी को प्रोसेस किया जा सकता है और उसकी पुष्टि की जा सकती है.

सदस्यता संसाधन में मौजूद linkedPurchaseToken का इस्तेमाल यह तय करने के लिए किया जा सकता है कि सदस्यता के बैकएंड में मौजूद किस उपयोगकर्ता को नए एनटाइटलमेंट के बारे में सूचना दी जानी चाहिए. हालांकि, यह सिर्फ़ तब लागू होता है, जब ऐसा करना ज़रूरी हो.

नई खरीदारी को प्रोसेस किया गया और इसकी पुष्टि तब की गई, जब नए परचेज़ टोकन के लिए SUBSCRIPTION_PURCHASED RTDN भेजा गया. इसे 'startTime' के तौर पर रिकॉर्ड किया गया.

ReplacementMode.DEFERRED के साथ, पहले रिन्यूअल के लिए वही तरीका अपनाया जाता है जो किसी अन्य रिन्यूअल के लिए अपनाया जाता है. साथ ही, जब यह इवेंट होता है, तब आपको रिप्लेसमेंट के लिए खास लॉजिक को मैनेज करने की ज़रूरत नहीं होती.

जब नए परचेज़ टोकन के साथ purchases.subscriptionsv2.get तरीके को कॉल करने पर, दो लाइन आइटम वाली खरीदारी दिखती है:

  • एक एनटाइटलमेंट पुराने एनटाइटलमेंट को दिखाता है. इसकी `expiryTime` आज से पहले की तारीख है और DeferredItemReplacement के लिए कोई वैल्यू सेट नहीं की गई है.
  • एक एनटाइटलमेंट नया एनटाइटलमेंट दिखाता है. इसमें `expiryTime` की वैल्यू आने वाले समय की होती है और auto_renewing_enabled फ़्लैग चालू होता है.

अब से, डेप्रिकेट किए गए ProrationMode.DEFERRED के बजाय ReplacementMode.DEFERRED का इस्तेमाल किया जाना चाहिए. ऐसा इसलिए, क्योंकि यह एनटाइटलमेंट में होने वाले बदलावों के बारे में एक जैसा व्यवहार दिखाता है. हालांकि, यह खरीदारी को मैनेज करने का एक ऐसा तरीका उपलब्ध कराता है जो अन्य नई खरीदारी के व्यवहारों के साथ ज़्यादा मेल खाता है.

ग्राहक मैनेजमेंट

डेवलपर से जुड़ी रीयल-टाइम सूचनाओं का इस्तेमाल करके, यह पता लगाया जा सकता है कि किसी उपयोगकर्ता ने सदस्यता रद्द करने का फ़ैसला कब लिया. जब कोई उपयोगकर्ता सदस्यता रद्द कर देता है, लेकिन उसकी सदस्यता की समयसीमा खत्म नहीं हुई होती है, तब उसे पुश नोटिफ़िकेशन या इन-ऐप्लिकेशन मैसेज भेजे जा सकते हैं. इनमें उसे फिर से सदस्यता लेने के लिए कहा जा सकता है.

जब कोई व्यक्ति अपनी सदस्यता रद्द कर देता है, तो आपके पास उसे वापस लाने का विकल्प होता है. इसके लिए, आपके पास अपने ऐप्लिकेशन या Play Store का इस्तेमाल करने का विकल्प होता है. यहां दी गई टेबल में, सदस्यता से जुड़ी अलग-अलग स्थितियों के बारे में बताया गया है. साथ ही, इसमें सदस्यता वापस पाने से जुड़ी कार्रवाइयों और ऐप्लिकेशन से जुड़ी ज़रूरी शर्तों के बारे में भी बताया गया है.

सदस्यता खत्म होने से पहले सदस्यता खत्म होने के बाद
इन-ऐप्लिकेशन Play Store में इन-ऐप्लिकेशन Play Store में
विनबैक सुविधा इन-ऐप्लिकेशन सदस्यता वापस लाएं इन-ऐप्लिकेशन सदस्यता फिर से सदस्यता लें
उपयोगकर्ता चेकआउट प्रोसेस पूरी करता है हां नहीं हां हां
उपयोगकर्ता की सदस्यता, उसी एसकेयू से जुड़ी रहती है उपयोगकर्ता, एक ही या अलग-अलग एसकेयू के लिए साइन अप कर सकता है हां उपयोगकर्ता, एक ही या अलग-अलग एसकेयू के लिए साइन अप कर सकता है हां
यह कुकी, खरीदारी के लिए नया टोकन बनाती है हां नहीं हां हां
डिफ़ॉल्ट रूप से चालू नहीं हां, सभी डेवलपर के लिए सहायता ज़रूरी है नहीं

ऐसे ऐप्लिकेशन जिनमें Play Billing Library 2.0 या इसके बाद का वर्शन नहीं है: नहीं

Play Billing Library 2.0 या इसके बाद के वर्शन का इस्तेमाल करने वाले ऐप्लिकेशन: हां. डेवलपर, Console में जाकर ऑप्ट-आउट कर सकते हैं.

उपयोगकर्ता से शुल्क कब लिया जाता है

एक ही एसकेयू का इस्तेमाल करने पर: मौजूदा बिलिंग अवधि खत्म होने पर.

अलग-अलग एसकेयू का इस्तेमाल करने पर: यह प्रोरेशन मोड पर निर्भर करता है.

मौजूदा बिलिंग अवधि खत्म होने पर तुरंत तुरंत
लागू करना ज़रूरी है अपने ऐप्लिकेशन में, फिर से साइन अप करने के लिए यूज़र इंटरफ़ेस (यूआई) उपलब्ध कराएं

सदस्यता की स्थिति में हुए बदलाव का पता लगाना

Play Store पर डीप-लिंक

अपने ऐप्लिकेशन में, फिर से साइन अप करने के लिए यूज़र इंटरफ़ेस (यूआई) उपलब्ध कराएं ऐप्लिकेशन के बाहर जाकर की जाने वाली खरीदारी मैनेज करना

सदस्यता खत्म होने से पहले - ऐप्लिकेशन में

जिन सदस्यताओं को रद्द कर दिया गया है, लेकिन उनकी अवधि अभी खत्म नहीं हुई है उनके लिए, सदस्यों को अपने ऐप्लिकेशन में सदस्यता बहाल करने की अनुमति दी जा सकती है. इसके लिए, आपको इन-ऐप्लिकेशन प्रॉडक्ट की खरीदारी का वही फ़्लो लागू करना होगा जो नए सदस्यों के लिए होता है. पक्का करें कि आपके यूज़र इंटरफ़ेस (यूआई) में यह दिखे कि उपयोगकर्ता के पास पहले से कोई सदस्यता है. उदाहरण के लिए, आपको फिर से चालू करें बटन के साथ, उपयोगकर्ता की सदस्यता के खत्म होने की मौजूदा तारीख और बार-बार ली जाने वाली कीमत दिखानी हो सकती है.

ज़्यादातर मामलों में, आपको उपयोगकर्ता को वही कीमत और एसकेयू ऑफ़र करना होगा जिसके लिए उसने पहले से सदस्यता ली हुई है. जैसे:

  • उसी एसकेयू का इस्तेमाल करके, सदस्यता खरीदने की नई प्रोसेस शुरू करें.
  • नई सदस्यता, पुरानी सदस्यता की जगह ले लेती है. साथ ही, यह सदस्यता खत्म होने की उसी तारीख को रिन्यू होती है. पुरानी सदस्यता को तुरंत 'समयसीमा खत्म हो गई' के तौर पर मार्क कर दिया जाता है.
  • उदाहरण के लिए, अकिलिस ने Example Music App की सदस्यता ली है और यह 1 अगस्त को खत्म होने वाली है. इसके बाद, 10 जुलाई को वह उसी कीमत पर एक महीने की सदस्यता फिर से लेता है. नई सदस्यता के लिए, बचे हुए क्रेडिट के हिसाब से शुल्क लिया जाता है. यह तुरंत चालू हो जाती है और इसका रिन्यूअल 1 अगस्त को होता है.

अगर आपको अलग कीमत ऑफ़र करनी है, जैसे कि मुफ़्त में आज़माने की नई सुविधा या वापस आने वाले लोगों के लिए छूट, तो उपयोगकर्ता को कोई दूसरा एसकेयू ऑफ़र करें:

  • बदलाव मोड WITHOUT_PRORATION का इस्तेमाल करके, अलग एसकेयू के साथ अपग्रेड या डाउनग्रेड करें.
  • नई सदस्यता, पुरानी सदस्यता की जगह ले लेती है और उसी तारीख को रिन्यू होती है जिस तारीख को पुरानी सदस्यता खत्म होती है. उपयोगकर्ता से, नई सदस्यता के एसकेयू की कीमत ली जाती है. इसमें शुरुआती कीमत भी शामिल होती है. यह कीमत, सदस्यता खत्म होने की मूल तारीख पर ली जाती है. अगर पुरानी सदस्यता को धुंधले किए गए खाते के आईडी का इस्तेमाल करके बनाया गया था, तो अपग्रेड और डाउनग्रेड के लिए, उसी आईडी को BillingFlowParams में पास किया जाना चाहिए.
  • उदाहरण के लिए, अकिलिस ने Example Music App की सदस्यता ली है और यह 1 अगस्त को खत्म होने वाली है. इसके बाद, 10 जुलाई को वह सालाना सदस्यता को शुरुआती कीमत पर फिर से खरीदता है. नई सदस्यता तुरंत चालू हो जाती है. साथ ही, उपयोगकर्ता से 1 अगस्त को शुरुआती कीमत ली जाती है.
  • अगर आपको विनबैक एसकेयू में मुफ़्त में आज़माने की सुविधा या शुरुआती कीमत शामिल करनी है, तो पक्का करें कि उपयोगकर्ता इसके लिए ज़रूरी शर्तें पूरी करता हो. इसके लिए, Google Play Console में हर ऐप्लिकेशन के लिए एक बार मुफ़्त में आज़माने की सुविधा दें बॉक्स से सही का निशान हटाएं. इससे उपयोगकर्ता को हर ऐप्लिकेशन के लिए एक बार मुफ़्त में आज़माने की सुविधा मिलती है.

खरीदारी का टोकन मिलने पर, खरीदारी को उसी तरह प्रोसेस करें जिस तरह नई सदस्यता के लिए किया जाता है. इसके अलावा, Google Play Developer API, सदस्यता संसाधन में linkedPurchaseToken दिखाता है. पक्का करें कि आपने linkedPurchaseToken में दिए गए टोकन को अमान्य कर दिया हो, ताकि आपकी सेवाओं को ऐक्सेस करने के लिए पुराने टोकन का इस्तेमाल न किया जा सके.

सदस्यता खत्म होने से पहले - Play Store में

सदस्यता रद्द होने के बाद भी चालू रहने पर, उपयोगकर्ता Google Play सदस्यता केंद्र में जाकर सदस्यता को बहाल कर सकते हैं. इसके लिए, उन्हें फिर से सदस्यता लें (पहले बहाल करें) पर क्लिक करना होगा. इससे सदस्यता और खरीदारी का टोकन एक जैसा रहता है.

Google Play Store ऐप्लिकेशन में सदस्यता सेक्शन. इसमें रद्द की गई सदस्यता और फिर से सदस्यता लेने का बटन दिखाया गया है
आठवीं इमेज. Google Play Store ऐप्लिकेशन में खाता > सदस्यताएं सेक्शन में, रद्द की गई सदस्यता को दिखाया गया है. साथ ही, फिर से सदस्यता लें बटन दिखाया गया है.

सदस्यताएं वापस लाने के बारे में ज़्यादा जानने के लिए, सदस्यताएं वापस लाना लेख पढ़ें.

सदस्यता खत्म होने के बाद - इन-ऐप्लिकेशन

सदस्यता की अवधि खत्म होने के बाद, सदस्यों को फिर से सदस्यता लेने की अनुमति दी जा सकती है. इसके लिए, आपको ऐप्लिकेशन में खरीदने के लिए प्रॉडक्ट की खरीदारी का फ़्लो अपनाना होगा जो नए सदस्यों के लिए इस्तेमाल किया जाता है. यहां दी गई बातों का ध्यान रखें:

  • उपयोगकर्ताओं को छूट देने के लिए, आपको सदस्यता के लिए खास कीमत वाला प्रॉडक्ट आईडी ऑफ़र करना पड़ सकता है. इसे वापस लाने वाला एसकेयू भी कहा जाता है. आपके पास अपने ऐप्लिकेशन में ऑफ़र देने का विकल्प होता है. इसके अलावा, ऐप्लिकेशन के बाहर भी उपयोगकर्ता को ऑफ़र के बारे में सूचना दी जा सकती है. जैसे, ईमेल में.
  • सदस्यता वापस पाने के लिए, Google Play Billing Library का इस्तेमाल करके अपने Android ऐप्लिकेशन में खरीदारी की प्रोसेस शुरू करें. यह नई सदस्यता लेने की प्रोसेस की तरह ही है. हालांकि, इसमें यह तय किया जा सकता है कि उपयोगकर्ता के लिए कौन-सा एसकेयू उपलब्ध है.
  • अगर आपको विनबैक एसकेयू में मुफ़्त में आज़माने की सुविधा या शुरुआती कीमत शामिल करनी है, तो पक्का करें कि उपयोगकर्ता इसके लिए ज़रूरी शर्तें पूरी करता हो. इसके लिए, Google Play Console में जाकर, हर ऐप्लिकेशन के लिए एक बार मुफ़्त में आज़माने की सुविधा दें बॉक्स से सही का निशान हटाएं. इससे उपयोगकर्ता को हर ऐप्लिकेशन के लिए, एक बार मुफ़्त में आज़माने की सुविधा मिलती है.
  • अगर कोई उपयोगकर्ता उसी एसकेयू की सदस्यता फिर से लेता है, तो वह मुफ़्त में आज़माने की सुविधा या शुरुआती कीमत वाले ऑफ़र का फ़ायदा नहीं ले पाएगा. पक्का करें कि आपके यूज़र इंटरफ़ेस (यूआई) में यह जानकारी दिख रही हो.

खरीदारी का टोकन मिलने पर, खरीदारी को उसी तरह प्रोसेस करें जिस तरह नई सदस्यता के लिए किया जाता है. आपको सदस्यता संसाधन में linkedPurchaseToken नहीं मिलेगा.

सदस्यता खत्म होने के बाद - Play Store में

अगर यह सुविधा चालू है, तो उपयोगकर्ता सदस्यता की समयसीमा खत्म होने के बाद, एक साल तक उसी एसकेयू की सदस्यता फिर से ले सकते हैं. इसके लिए, उन्हें Google Play के सदस्यता केंद्र में जाकर, फिर से सदस्यता लें पर क्लिक करना होगा. इससे सदस्यता और खरीदारी का नया टोकन जनरेट होता है.

Google Play Store ऐप्लिकेशन में सदस्यता सेक्शन की इमेज. इसमें रद्द की गई और खत्म हो चुकी सदस्यता दिखाई गई है. साथ ही, फिर से सदस्यता लेने और हटाने के बटन दिखाए गए हैं
नौवीं इमेज. खाता > सदस्यताएं Google Play Store ऐप के सेक्शन में, रद्द की गई और खत्म हो चुकी सदस्यता दिखाई गई है. इसमें फिर से सदस्यता लें और हटाएं बटन दिख रहे हैं.

फिर से सदस्यता लेने को ऐप्लिकेशन के बाहर जाकर की जाने वाली खरीदारी माना जाता है. इसलिए, अपने बैकएंड से इसकी सूचना सही तरीके से देने के लिए, सबसे सही तरीकों का पालन करना न भूलें.

अपनी सदस्यता को प्रमोट करें

चुनिंदा उपयोगकर्ताओं को मौजूदा सदस्यता के लिए, मुफ़्त में आज़माने की अवधि बढ़ाने का विकल्प देने के लिए, प्रोमो कोड बनाए जा सकते हैं. ज़्यादा जानने के लिए, प्रमोशन कोड देखें.

मुफ़्त में आज़माने की सुविधा के लिए, Google Play यह पुष्टि करता है कि उपयोगकर्ता के पास, पैसे चुकाने का मान्य तरीका है. यह पुष्टि, मुफ़्त में आज़माने की सुविधा शुरू करने से पहले की जाती है. कुछ उपयोगकर्ताओं को, पुष्टि की इस प्रक्रिया के दौरान पेमेंट के तरीके पर कुछ समय के लिए रोक लगी हुई दिख सकती है या उनसे शुल्क लिया जा सकता है. यह रोक या शुल्क कुछ समय के लिए लगाया जाता है. बाद में, इसे वापस कर दिया जाता है या इसका रिफ़ंड दे दिया जाता है.

मुफ़्त में आज़माने की अवधि खत्म होने के बाद, उपयोगकर्ता के पेमेंट के तरीके से सदस्यता का पूरा शुल्क ले लिया जाता है.

अगर कोई उपयोगकर्ता मुफ़्त में आज़माने की अवधि के दौरान सदस्यता रद्द करता है, तो भी मुफ़्त में आज़माने की अवधि खत्म होने तक उसकी सदस्यता चालू रहती है. इसके लिए, उपयोगकर्ता से कोई शुल्क नहीं लिया जाता.

किसी सदस्य के लिए बिलिंग को कुछ समय के लिए रोकना

subscriptionsv2.defer तरीके का इस्तेमाल करके, किसी सदस्यता के एनटाइटलमेंट की अवधि बढ़ाई जा सकती है. ऐड-ऑन वाली सदस्यता को कुछ समय के लिए रोकने पर, सदस्यता में शामिल सभी आइटम को एक ही अवधि के लिए रोक दिया जाता है. शुल्क न लेने की अवधि के दौरान, उपयोगकर्ता के पास आपके कॉन्टेंट का पूरा ऐक्सेस होता है. हालांकि, उससे कोई शुल्क नहीं लिया जाता. सदस्यता रिन्यू करने की तारीख को नई तारीख के तौर पर अपडेट कर दिया जाता है.

प्रीपेड प्लान के लिए, बिलिंग रोकने वाले एपीआई का इस्तेमाल करके, सदस्यता खत्म होने की तारीख को आगे बढ़ाया जा सकता है.

डिफ़र्ड बिलिंग की सुविधा से ये काम किए जा सकते हैं:

  • उपयोगकर्ताओं को खास ऑफ़र के तौर पर, बिना किसी शुल्क के ऐक्सेस दें. जैसे, फ़िल्म खरीदने पर एक हफ़्ते के लिए बिना किसी शुल्क के ऐक्सेस देना.
  • सद्भावना के तौर पर, ग्राहकों को बिना किसी शुल्क के ऐक्सेस दें.

बिलिंग को हर एपीआई कॉल के लिए, कम से कम एक दिन और ज़्यादा से ज़्यादा एक साल तक के लिए टाला जा सकता है. बिलिंग को और आगे बढ़ाने के लिए, बिलिंग की नई तारीख से पहले एपीआई को फिर से कॉल किया जा सकता है.

उदाहरण के लिए, डार्सी ने Fishing Quarterly ऐप्लिकेशन पर ऑनलाइन कॉन्टेंट की सदस्यता ली है. आम तौर पर, उसे हर महीने की पहली तारीख को 1.25 पाउंड का बिल भेजा जाता है. मार्च में, उन्होंने ऐप्लिकेशन पब्लिशर के लिए ऑनलाइन सर्वे में हिस्सा लिया था. पब्लिशर ने उसे छह हफ़्तों तक बिना किसी शुल्क के सदस्यता देने का फ़ैसला किया है. इसके लिए, उसने अगली पेमेंट की तारीख को 15 मई तक के लिए टाल दिया है. यह तारीख, बिलिंग की पिछली तारीख 1 अप्रैल के छह हफ़्ते बाद की है

  1. डार्सी से अप्रैल या मई की शुरुआत में कोई शुल्क नहीं लिया जाता. साथ ही, उसके पास अब भी कॉन्टेंट का ऐक्सेस है. उसे 15 मई को, सदस्यता के लिए सामान्य शुल्क 1.25 पाउंड चुकाने होंगे. अब उसके खाते के रिन्यूअल की अगली तारीख 15 जून है.

बिलिंग की तारीख बदलने पर, उपयोगकर्ता को ईमेल या ऐप्लिकेशन में सूचना भेजें. इससे उन्हें पता चलेगा कि बिलिंग की तारीख बदल गई है.

पेमेंट अस्वीकार होने की समस्या हल करना

अगर सदस्यता रिन्यू करने के लिए पेमेंट करने में समस्याएं आती हैं, तो Google सदस्यता रद्द करने से पहले, कुछ समय तक उसे रिन्यू करने की कोशिश करेगा. खाता वापस पाने की इस अवधि में, ग्रेस पीरियड और खाते पर रोक लगाने की अवधि शामिल हो सकती है. इस दौरान, Google उपयोगकर्ता को ईमेल और सूचनाएं भेजता है. इनमें, उसे पेमेंट का तरीका अपडेट करने के लिए कहा जाता है.

पेमेंट अस्वीकार होने पर, सदस्यता के लिए ग्रेस पीरियड शुरू हो जाता है. हालांकि, ऐसा तब होता है, जब ग्रेस पीरियड कॉन्फ़िगर किया गया हो. ग्रेस पीरियड के दौरान, आपको यह पक्का करना होगा कि उपयोगकर्ता के पास सदस्यता के एनटाइटलमेंट का ऐक्सेस बना रहे.

ग्रेस पीरियड खत्म होने के बाद, सदस्यता पर खाते पर रोक की अवधि शुरू हो जाती है. खाते पर रोक की अवधि में, आपको यह पक्का करना होगा कि उपयोगकर्ता के पास सदस्यता के तहत मिलने वाले अधिकारों का ऐक्सेस न हो.

Google Play Console में जाकर, अपने-आप रिन्यू होने वाले हर बुनियादी प्लान के ग्रेस पीरियड और खाते पर रोक लगने की अवधि सेट की जा सकती है. सदस्यता की अवधि को डिफ़ॉल्ट वैल्यू से कम बताने पर, पेमेंट अस्वीकार होने की वजह से सदस्यता न ले पाने के मामलों में कमी आ सकती है.

पेमेंट अस्वीकार होने पर, सदस्यता वापस पाने की संभावना को ज़्यादा से ज़्यादा बढ़ाने के लिए, अपने उपयोगकर्ता को पेमेंट से जुड़ी समस्या के बारे में बताएं और उसे ठीक करने के लिए कहें.

ग्रेस पीरियड और खाता होल्ड करना सेक्शन में बताए गए तरीके से, इस सुविधा को खुद चालू किया जा सकता है. इसके अलावा, ऐप्लिकेशन में मैसेज भेजने वाले एपीआई को लागू किया जा सकता है. इससे Google, आपके ऐप्लिकेशन के उपयोगकर्ताओं को एक मैसेज दिखाएगा.

पेमेंट से जुड़ी समस्या होने पर, Google Play आपके उपयोगकर्ताओं को सूचना दिखा सकता है. इसके लिए, ऐप्लिकेशन में मौजूद मैसेज भेजने की सुविधा का इस्तेमाल करके, उन्हें किसी भी लंबित पेमेंट के बारे में सूचना दी जा सकती है. अगर आपने ऐप्लिकेशन में मैसेज भेजने की सुविधा चालू की है, तो पेमेंट से जुड़ी समस्याओं के बारे में मैसेज, ग्रेस पीरियड और खाते पर रोक लगने के दौरान हर दिन एक बार दिखाया जाता है. इससे उपयोगकर्ताओं को ऐप्लिकेशन छोड़े बिना, पेमेंट से जुड़ी समस्या को ठीक करने का मौका मिलता है. ज़्यादा जानकारी के लिए, ऐप्लिकेशन में मैसेज भेजने की सुविधा देखें.

इन-ऐप्लिकेशन मैसेजिंग

अगर आपने InAppMessageCategoryId.TRANSACTIONAL की मदद से, इन-ऐप्लिकेशन मैसेज भेजने की सुविधा चालू की है, तो Google Play उपयोगकर्ताओं को एक मैसेज दिखाएगा. यह मैसेज तब दिखेगा, जब पेमेंट से जुड़ी कोई समस्या होगी या बढ़ी हुई कीमत के लिए मंज़ूरी देनी होगी.

स्नैकबार में उपयोगकर्ता को पेमेंट से जुड़ी समस्या हल करने की सूचना दी गई है
20वीं इमेज. स्नैकबार में उपयोगकर्ता को पेमेंट से जुड़ी समस्या हल करने के लिए सूचना दी गई है.

हमारा सुझाव है कि जब भी उपयोगकर्ता ऐप्लिकेशन खोले, तब इस एपीआई को कॉल करें. इससे यह तय किया जा सकेगा कि मैसेज दिखाना है या नहीं.

अगर उपयोगकर्ता ने अपनी सदस्यता वापस पा ली है या कीमत में हुई बढ़ोतरी की पुष्टि कर दी है, तो आपको खरीदारी के टोकन के साथ SUBSCRIPTION_STATUS_UPDATED रिस्पॉन्स कोड मिलेगा. इसके बाद, आपको इस खरीदारी टोकन का इस्तेमाल करके Google Play Developer API को कॉल करना चाहिए. साथ ही, अपने ऐप्लिकेशन में सदस्यता की स्थिति को रीफ़्रेश करना चाहिए.

इन-ऐप्लिकेशन मैसेजिंग की सुविधा इंटिग्रेट करना

उपयोगकर्ता को इन-ऐप्लिकेशन मैसेज दिखाने के लिए, BillingClient.showInAppMessages() का इस्तेमाल करें.

यहां ऐप्लिकेशन में मैसेज भेजने की सुविधा को ट्रिगर करने का एक उदाहरण दिया गया है:

Kotlin

val inAppMessageParams = InAppMessageParams.newBuilder()
    .addInAppMessageCategoryToShow(InAppMessageCategoryId.TRANSACTIONAL)
    .build()

// Note: To display the in-app message, PBL requires an activity instance that
// can provide a valid window token. This token is necessary for the Play Store
// to display the message overlay correctly on top of the application's window.
// The passed Activity must be in a state where its window is created and
// attached to the WindowManager.
billingClient.showInAppMessages(
    activity,
    inAppMessageParams,
    object : InAppMessageResponseListener {
        override fun onInAppMessageResponse(inAppMessageResult: InAppMessageResult) {
            if (inAppMessageResult.responseCode == InAppMessageResponseCode.NO_ACTION_NEEDED) {
                // The flow has finished and there is no action needed from developers.
            } else if (inAppMessageResult.responseCode
                == InAppMessageResponseCode.SUBSCRIPTION_STATUS_UPDATED
            ) {
                // The subscription status changed. For example, a subscription
                // is recovered from a suspended state, or a user confirms a
                // price increase. Developers should expect the purchase
                // token to be returned with this response code and use
                // the purchase token with the Google Play Developer API.
            }
        }
    }
)

Java

InAppMessageParams inAppMessageParams = InAppMessageParams.newBuilder()
        .addInAppMessageCategoryToShow(InAppMessageCategoryId.TRANSACTIONAL)
        .build();

// Note: To display the in-app message, PBL requires an activity instance that
// can provide a valid window token. This token is necessary for the Play Store
// to display the message overlay correctly on top of the application's window.
// The passed Activity must be in a state where its window is created and
// attached to the WindowManager.
billingClient.showInAppMessages(activity,
        inAppMessageParams,
        new InAppMessageResponseListener() {
            @Override
            public void onInAppMessageResponse(InAppMessageResult inAppMessageResult) {
                if (inAppMessageResult.responseCode
                        == InAppMessageResponseCode.NO_ACTION_NEEDED) {
                    // The flow has finished and there is no action needed from developers.
                } else if (inAppMessageResult.responseCode
                        == InAppMessageResponseCode.SUBSCRIPTION_STATUS_UPDATED) {
                    // The subscription status changed. For example, a subscription
                    // is recovered from a suspended state, or a user confirms a
                    // price increase. Developers should expect the purchase
                    // token to be returned with this response code and use
                    // the purchase token with the Google Play Developer API.
                }
            }
        });

सदस्यता रद्द करने और सदस्यता की मंज़ूरी मिलने का इंतज़ार करने की स्थितियों को मैनेज करना

इस सेक्शन में, रद्द की गई या वापस ली गई सदस्यताओं को मैनेज करने का तरीका बताया गया है. साथ ही, इसमें उन सदस्यताओं को मैनेज करने का तरीका भी बताया गया है जो खरीदारी की प्रोसेस के दौरान 'लंबित' स्थिति में चली जाती हैं.

रद्द करना या निरस्त करना

किसी सदस्यता को रद्द या वापस लेना के लिए, Google Play Developer API का इस्तेमाल किया जा सकता है. यह सुविधा Google Play Console में भी उपलब्ध है.

  • रद्द करें: उपयोगकर्ता, Google Play पर सदस्यता रद्द कर सकते हैं. आपके पास अपने ऐप्लिकेशन या वेबसाइट पर, उपयोगकर्ताओं को सदस्यता रद्द करने का विकल्प देने का भी विकल्प होता है. आपका ऐप्लिकेशन, इन रद्द किए गए टिकट को रद्द किए गए टिकट सेक्शन में बताए गए तरीके से मैनेज करेगा.

  • निरस्त करना: सदस्यता निरस्त करने पर, उपयोगकर्ता के पास से सदस्यता का ऐक्सेस तुरंत हट जाता है. इसका इस्तेमाल तब किया जा सकता है, जब तकनीकी समस्या की वजह से कोई उपयोगकर्ता आपके प्रॉडक्ट को ऐक्सेस न कर पा रहा हो और उसे प्रॉडक्ट का इस्तेमाल जारी नहीं रखना हो. आपका ऐप्लिकेशन, इन रद्द किए गए लेन-देन को रद्द किए गए लेन-देन में बताए गए तरीके से हैंडल करे.

यहां दी गई टेबल में, रद्द करने और वापस लेने के बीच के अंतर को दिखाया गया है.

रिन्यूअल बंद कर देता है ऐक्सेस हटाएं
रद्द करें हां नहीं
सहमति रद्द करें हां हां

सदस्यता के ऐसे लेन-देन मैनेज करना जिन्हें मंज़ूरी नहीं मिली है

लंबित लेन-देन, शुरुआती खरीदारी, टॉप-अप, अपग्रेड या डाउनग्रेड के दौरान हो सकते हैं. सदस्यता खरीदने की प्रोसेस, SUBSCRIPTION_STATE_ACTIVE स्थिति से शुरू होती है. इसके बाद, यह SUBSCRIPTION_STATE_PENDING स्थिति में बदल जाती है. अगर लेन-देन की समयसीमा खत्म हो गई है या उपयोगकर्ता ने इसे रद्द कर दिया है, तो यह SUBSCRIPTION_STATE_PENDING_PURCHASE_EXPIRED पर चला जाता है. लेन-देन पूरा होने के बाद ही, उपयोगकर्ता के एनटाइटलमेंट को अपडेट किया जाना चाहिए.

जिन लेन-देन को मंज़ूरी मिलना बाकी है उनके लिए, सदस्यता की स्थिति में बदलाव करना आसान है. जब उपयोगकर्ता कोई ऐसा लेन-देन शुरू करता है जो पूरा नहीं हुआ है, तब आपके ऐप्लिकेशन को PENDING स्थिति के साथ Purchase मिलता है. लेन-देन पूरा होने पर, आपके ऐप्लिकेशन को Purchase फिर से मिलता है. इसमें स्थिति को PURCHASED के तौर पर अपडेट किया जाता है. SUBSCRIPTION_PURCHASED टाइप वाला SubscriptionNotification मैसेज, आपके आरटीडीएन क्लाइंट को भेजा जाता है. खरीदारी की पुष्टि करने के लिए, सामान्य प्रोसेस का पालन करें. साथ ही, उपयोगकर्ता को कॉन्टेंट का ऐक्सेस दें और खरीदारी की पुष्टि करें. अगर लेन-देन की समयसीमा खत्म हो जाती है या उसे रद्द कर दिया जाता है, तो आपके आरटीडीएन क्लाइंट को टाइप SUBSCRIPTION_PENDING_PURCHASE_CANCELED वाला SubscriptionNotification मैसेज भेजा जाता है. ऐसे मामलों में, उपयोगकर्ता को कभी भी कॉन्टेंट का ऐक्सेस नहीं मिलना चाहिए.

जिन लेन-देन की मंज़ूरी बाकी है उनके ज़रिए टॉप-अप करने, अपग्रेड करने या डाउनग्रेड करने पर, पुरानी और नई, दोनों तरह की सदस्यताओं की स्थिति में बदलाव होता है. जब उपयोगकर्ता, टॉप-अप, अपग्रेड या डाउनग्रेड करने के लिए कोई ऐसा लेन-देन शुरू करता है जो अभी पूरा नहीं हुआ है, तो आपके ऐप्लिकेशन को पुरानी सदस्यता के लिए Purchase मिलता है. इसमें PendingPurchaseUpdate ऑब्जेक्ट होता है. इस समय, उपयोगकर्ता के पास पुरानी सदस्यता का मालिकाना हक होता है. उसे नई सदस्यता का ऐक्सेस नहीं मिलता. PendingPurchaseUpdate ऑब्जेक्ट पर getProducts() और getPurchaseToken() को कॉल करने पर, नई सदस्यता के प्रॉडक्ट आईडी और खरीदारी का टोकन मिलता है. लेन-देन पूरा होने पर, आपके ऐप्लिकेशन को Purchase मिलता है. इसमें नई सदस्यता के लिए सेट किया गया टॉप-लेवल परचेज़ टोकन और PURCHASED के तौर पर सेट की गई स्थिति होती है. आपके आरटीडीएन क्लाइंट को SubscriptionNotification टाइप वाला SUBSCRIPTION_PURCHASED मैसेज भेजा जाता है. सिर्फ़ इस समय, आपको पुराने परचेज़ टोकन को नए परचेज़ टोकन से बदलना चाहिए. साथ ही, कॉन्टेंट का ऐक्सेस रखने वाले उपयोगकर्ता के ऐक्सेस को अपडेट करना चाहिए. अगर लेन-देन की समयसीमा खत्म हो जाती है या उसे रद्द कर दिया जाता है, तो आपके आरटीडीएन क्लाइंट को टाइप SUBSCRIPTION_PENDING_PURCHASE_CANCELED वाला SubscriptionNotification मैसेज भेजा जाता है. ऐसे मामलों में, उपयोगकर्ता के पास पुरानी सदस्यता का कॉन्टेंट ऐक्सेस करने का विकल्प होना चाहिए.