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

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

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

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

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

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

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

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

  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 पर अपना कॉन्टेंट फिर से डिस्ट्रिब्यूट किया हुआ दिखता है, तो तुरंत और सही तरीके से कार्रवाई करें. ज़्यादा जानकारी के लिए, कॉपीराइट सहायता केंद्र में कॉपीराइट के बारे में अक्सर पूछे जाने वाले सवाल पेज देखें.