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

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

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

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

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

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

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

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

  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 का इस्तेमाल करें. नॉन-कंज़्यूमबल प्रॉडक्ट या सदस्यता की पुष्टि करने के लिए, अपने सुरक्षित बैकएंड सर्वर पर Play Developer API के सही एंडपॉइंट को कॉल करें. इसके लिए, इनमें से कोई एक तरीका अपनाएं: Purchases.products:acknowledge या Purchases.subscriptions:acknowledge पुष्टि करना ज़रूरी है, क्योंकि इससे Google Play को पता चलता है कि उपयोगकर्ता को खरीदारी का एनटाइटलमेंट मिल गया है. खरीदारी की अनुमति देने के बाद, आपको खरीदारी की पुष्टि तुरंत करनी होगी.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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