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

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

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

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

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

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

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

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

  1. अपने बैकएंड पर उससे जुड़ा purchaseToken भेजें. इसका मतलब है कि आपको सभी खरीदारी के लिए, सभी purchaseToken वैल्यू का रिकॉर्ड रखना चाहिए.
  2. पुष्टि करें कि मौजूदा खरीदारी के लिए purchaseToken वैल्यू, किसी भी पिछली purchaseToken वैल्यू से मेल न खाती हो. purchaseToken वैल्यू दुनिया भर में यूनीक होती है. इसलिए, इस वैल्यू का इस्तेमाल अपने डेटाबेस में प्राइमरी कुंजी के तौर पर सुरक्षित तरीके से किया जा सकता है.
  3. Google Play Developer API में, Purchases.products:get या Purchases.subscriptionsv2:get एंडपॉइंट का इस्तेमाल करके, Google से पुष्टि करें कि खरीदारी मान्य है.
  4. अगर खरीदारी सही है और उसका इस्तेमाल पहले नहीं किया गया है, तो इन-ऐप्लिकेशन आइटम या सदस्यता का एनटाइटलमेंट सुरक्षित तरीके से दिया जा सकता है.
  5. सदस्यताओं के लिए, जब Purchases.subscriptionsv2:get में linkedPurchaseToken सेट किया जाता है, तो आपको अपने डेटाबेस से linkedPurchaseToken को भी हटा देना चाहिए. साथ ही, linkedPurchaseToken को दिया गया एनटाइटलमेंट रद्द कर देना चाहिए, ताकि एक ही खरीदारी के लिए कई उपयोगकर्ताओं को एनटाइटलमेंट न मिले.
  6. आपको एनटाइटलमेंट सिर्फ़ तब देना चाहिए, जब खरीदारी की स्थिति PURCHASED हो. साथ ही, यह पक्का करें कि PENDING खरीदारी को सही तरीके से मैनेज किया जाए. अगर CANCELED की खरीदारी में बढ़ोतरी होती है, तो हो सकता है कि खरीदारी की स्थिति PENDING होने पर भी, एनटाइटलमेंट दिए जा रहे हों. ज़्यादा जानकारी के लिए, पूरे नहीं हुए लेन-देन मैनेज करना लेख पढ़ें.
  7. एनटाइटलमेंट देने के बाद, अगर आपको किसी ऐसे प्रॉडक्ट को इस्तेमाल करना है जिसे एक बार इस्तेमाल करने के बाद वह खत्म हो जाता है और उसकी पुष्टि करनी है, तो अपने सुरक्षित बैकएंड सर्वर पर Purchases.products:consume Play Developer API का इस्तेमाल करें. किसी ऐसे प्रॉडक्ट या सदस्यता की पुष्टि करने के लिए जिसे एक बार इस्तेमाल करने के बाद दोबारा इस्तेमाल नहीं किया जा सकता, अपने सुरक्षित बैकएंड सर्वर पर, Purchases.products:acknowledge या Purchases.subscriptions:acknowledge में से कोई एक Play Developer API एंडपॉइंट कॉल करें. पुष्टि करना ज़रूरी है, क्योंकि इससे Google Play को यह सूचना मिलती है कि उपयोगकर्ता को खरीदारी का एनटाइटलमेंट दिया गया है. एनटाइटलमेंट देने के तुरंत बाद, आपको खरीदारी की पुष्टि करनी चाहिए.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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