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

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

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

बेहतर सुरक्षा पाएं

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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