धोखाधड़ी और गलत इस्तेमाल को रोकना

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

इस दस्तावेज़ में, बिलिंग इंटिग्रेशन पर होने वाले हमलों को रोकने और आपके ऐप्लिकेशन में गलत इस्तेमाल के असर को कम करने के बारे में सुझाव दिए गए हैं.

सुरक्षा को बेहतर बनाना

यहां दिए गए एपीआई और टूल की मदद से, आपके ऐप्लिकेशन में मौजूद जोखिमों को कम किया जा सकता है:

  • Voided Purchases API: रद्द किए गए ऑर्डर का ऐक्सेस वापस लेना.
  • Obfuscated Account ID: यह पता लगाने में मदद करना कि कम समय में, एक ही खाते से कई डिवाइसों पर खरीदारी की गई है या नहीं.
  • Backend consumption: Purchases.products:consume जैसे टूल, कारोबारी नियम को आपके सुरक्षित बैकएंड पर ले जाते हैं. इससे क्लाइंट-साइड में छेड़छाड़ नहीं की जा सकती. प्लैटफ़ॉर्म के इन एपीआई का इस्तेमाल करने के अलावा, अपने इंटिग्रेशन को बिना अनुमति के ऐक्सेस से बचाने के लिए, यहां दिए गए सबसे सही तरीकों को अपनाएं.

जगह की जानकारी में गड़बड़ी करके की गई खरीदारी रोकना

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

संवेदनशील लॉजिक को अपने बैकएंड पर ले जाना

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

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

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

एनटाइटलमेंट देने से पहले खरीदारी की पुष्टि करना

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

  • खरीदारी से जुड़ा purchaseToken, अपने बैकएंड पर भेजें. इसका मतलब है कि आपको सभी खरीदारी के लिए, purchaseToken की सभी वैल्यू का रिकॉर्ड रखना चाहिए.
  • पुष्टि करें कि मौजूदा खरीदारी के लिए, purchaseToken की वैल्यू, पिछली किसी भी खरीदारी के लिए, purchaseToken की वैल्यू से मेल नहीं खाती. purchaseToken, दुनिया भर में यूनीक होता है. इसलिए, इस वैल्यू को अपने डेटाबेस में प्राइमरी की के तौर पर इस्तेमाल किया जा सकता है.
  • Google Play Developer API में, Purchases.products:get या Purchases.subscriptionsv2:get एंडपॉइंट का इस्तेमाल करके, Google से पुष्टि करें कि खरीदारी सही है.
  • अगर आपको लगता है कि खरीदारी सही है, पहले इसका इस्तेमाल या इसे प्रोसेस नहीं किया गया है, और उपयोगकर्ता, ज़रूरी शर्तें पूरी करता है और धोखाधड़ी से जुड़ी सभी जांचों में पास हो जाता है, तो इन-ऐप्लिकेशन आइटम या सदस्यता के लिए, एनटाइटलमेंट दिया जा सकता है.
    • ज़रूरी शर्तें पूरी करने और गलत इस्तेमाल की जांच: पुष्टि करें कि उपयोगकर्ता अब भी आइटम के लिए ज़रूरी शर्तें पूरी करता है. अगर आपने बिलिंग फ़्लो को obfuscatedAccountId या obfuscatedProfileId के साथ कॉन्फ़िगर किया है, तो देखें कि खरीदारी की मैपिंग, आपके सिस्टम में उपयोगकर्ता के अनुमानित खाते से मेल खाती है या नहीं. गलत इस्तेमाल, जोखिम या सुरक्षा से जुड़ी कोई भी अतिरिक्त जांच करें, जो आपके बैकएंड के लिए ज़रूरी हो.
    • गलत तरीके से की गई खरीदारी के लिए साफ़ तौर पर रिफ़ंड देना: अगर खरीदारी, आपकी पुष्टि या गलत इस्तेमाल की जांच में फ़ेल हो जाती है, तो एनटाइटलमेंट न दें. साथ ही, खरीदारी की पुष्टि न करें या उसे कंज़्यूम न करें. खरीदारी की पुष्टि न होने की वजह से, उसे अपने-आप रिफ़ंड होने देने के बजाय (यह इसलिए ज़रूरी है, क्योंकि प्रोसेसिंग में टाइम आउट होने की वजह से भी ऐसा हो सकता है), सदस्यता के लिए purchases.subscriptionsv2:revoke एंडपॉइंट (जिसमें "fullRefund": {} शामिल हो) या वन-टाइम प्रॉडक्ट के लिए, Orders:refund एंडपॉइंट का इस्तेमाल करके, साफ़ तौर पर खरीदारी को रद्द करें और उसका रिफ़ंड दें. इसके लिए, revoke पैरामीटर को true पर सेट करें. खरीदारी रद्द करने से यह पक्का होता है कि उपयोगकर्ता के पास अब खरीदारी का एनटाइटलमेंट नहीं है. साथ ही, Google Play को यह साफ़ तौर पर पता चलता है कि डेवलपर ने खरीदारी को अस्वीकार कर दिया है.
  • सदस्यताओं के लिए, जब linkedPurchaseToken सेट किया जाता है Purchases.subscriptionsv2:get में, तो आपको अपने डेटाबेस से linkedPurchaseToken को भी हटाना चाहिए. साथ ही, linkedPurchaseToken को दिए गए एनटाइटलमेंट को रद्द करना चाहिए, ताकि यह पक्का किया जा सके कि एक ही खरीदारी के लिए, कई उपयोगकर्ताओं के पास एनटाइटलमेंट न हो.
  • एनटाइटलमेंट सिर्फ़ तब दें, जब खरीदारी की स्थिति PURCHASED हो. साथ ही, अधूरी खरीदारी को सही तरीके से मैनेज करें. अगर CANCELED स्थिति वाली खरीदारी में अचानक बढ़ोतरी होती है, तो हो सकता है कि खरीदारी की स्थिति PENDING होने पर भी, एनटाइटलमेंट दिए जा रहे हों. ज़्यादा जानकारी के लिए, PENDING स्थिति वाले लेन-देन मैनेज करना लेख पढ़ें.
  • एनटाइटलमेंट देने के बाद, अगर आपको कंज़्यूम किए जा सकने वाले प्रॉडक्ट को कंज़्यूम करना है और उसकी पुष्टि करनी है, तो अपने सुरक्षित बैकएंड सर्वर पर, Play Developer API में Purchases.products:consume का इस्तेमाल करें. कंज़्यूम नहीं किए जा सकने वाले प्रॉडक्ट या सदस्यता की पुष्टि करने के लिए, अपने सुरक्षित बैकएंड सर्वर पर, Play Developer API के काम के एंडपॉइंट को कॉल करें. यह Purchases.products:acknowledge या Purchases.subscriptions:acknowledge हो सकता है. पुष्टि करना ज़रूरी है, क्योंकि इससे Google Play को यह सूचना मिलती है कि उपयोगकर्ता को खरीदारी का एनटाइटलमेंट दिया गया है. एनटाइटलमेंट देने के तुरंत बाद, खरीदारी की पुष्टि करें.

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

खरीदारी की पुष्टि और उसे कंज़्यूम करने के बारे में ज़्यादा जानकारी के लिए, खरीदारी प्रोसेस करना लेख पढ़ें.

अनलॉक किए गए कॉन्टेंट को सुरक्षित रखना

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

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

रद्द की गई खरीदारी का पता लगाना और उसे मैनेज करना

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

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

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

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

  • कई बार उल्लंघन करने पर कार्रवाई करना: पहली बार उल्लंघन करने वाले लोगों के लिए, कम सख्त कार्रवाई करें. जैसे, इन-ऐप्लिकेशन चेतावनियां दिखाना. बार-बार उल्लंघन करने वाले लोगों के लिए, ज़्यादा सख्त कार्रवाई करें.

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

  • कुछ समय के लिए या हमेशा के लिए, अपने ऐप्लिकेशन का ऐक्सेस बंद करना: बार-बार नुकसान पहुंचाने वाली गतिविधि करने वाले लोगों के लिए, अपने ऐप्लिकेशन का ऐक्सेस कुछ समय के लिए या हमेशा के लिए बंद करें.

  • Voided Purchases API को बार-बार कॉल करना: जब आपको रद्द की गई एक या उससे ज़्यादा खरीदारी का पता चलता है, तो VoidedPurchases API को बार-बार कॉल करें, ताकि उपयोगकर्ता के खरीदारी को कंज़्यूम करने से पहले, उन्हें वापस लिया जा सके. Voided Purchases API के कोटे के बारे में ज़्यादा जानकारी के लिए, Voided Purchases API का दस्तावेज़ देखें.

Google को धोखाधड़ी का पता लगाने में मदद करना

कुछ तरह की धोखाधड़ी, नुकसान पहुंचाने वाले लोगों से जुड़ी होती है. ये लोग, अपनी गतिविधि छिपाने के लिए, Google और इन-ऐप्लिकेशन के कई खाते बनाते हैं.

Google को Google खातों को इन-ऐप्लिकेशन खातों से मैप करने में मदद करने के लिए, BillingFlowParams के बिल्डर में setObfuscatedAccountId और setObfuscatedProfileId तरीकों का इस्तेमाल करें.

Google इस डेटा का इस्तेमाल, संदिग्ध गतिविधि का पता लगाने और धोखाधड़ी वाले कुछ लेन-देन को पूरा होने से पहले ब्लॉक करने के लिए करता है.

ट्रेडमार्क और कॉपीराइट के उल्लंघन के ख़िलाफ़ कार्रवाई करना

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