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 से इस बात की पुष्टि करें कि खरीदारी सही है.
- अगर खरीदारी सही है और पहले इसका इस्तेमाल नहीं किया गया है, तो इन-ऐप्लिकेशन आइटम या सदस्यता के लिए एनटाइटलमेंट दिया जा सकता है.
- सदस्यताओं के लिए, जब linkedPurchaseToken को Purchases.subscriptionsv2:get में सेट किया जाता है, तो आपको अपने डेटाबेस से linkedPurchaseToken को भी हटाना चाहिए. साथ ही, linkedPurchaseToken को दिए गए एनटाइटलमेंट को वापस लेना चाहिए. इससे यह पक्का किया जा सकेगा कि एक ही खरीदारी के लिए, एक से ज़्यादा उपयोगकर्ताओं को एनटाइटलमेंट न मिले.
- एनटाइटलमेंट सिर्फ़ तब दें, जब खरीदारी की स्थिति PURCHASED हो. साथ ही, PENDING स्थिति वाली खरीदारी को सही तरीके से मैनेज करें. अगर CANCELED स्थिति वाली खरीदारी की संख्या अचानक बढ़ जाती है, तो हो सकता है कि खरीदारी की स्थिति PENDING होने पर भी एनटाइटलमेंट दिए जा रहे हों. ज़्यादा जानकारी के लिए, PENDING स्थिति वाले लेन-देन को मैनेज करना लेख पढ़ें.
एनटाइटलमेंट देने के बाद, अगर आपको इस्तेमाल किए जा सकने वाले प्रॉडक्ट को कंज़्यूम करना है और उसकी पुष्टि करनी है, तो अपने सुरक्षित बैकएंड सर्वर पर, 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 खातों को इन-ऐप्लिकेशन खातों से मैप करने में मदद करने के लिए, BillingFlowParams के बिल्डर में setObfuscatedAccountId और setObfuscatedProfileId तरीकों का इस्तेमाल करें.
Google इस डेटा का इस्तेमाल, संदिग्ध गतिविधि का पता लगाने और धोखाधड़ी वाले कुछ तरह के लेन-देन पूरे होने से पहले उन्हें ब्लॉक करने के लिए करता है.
ट्रेडमार्क और कॉपीराइट उल्लंघन के ख़िलाफ़ कार्रवाई करना
अगर कॉन्टेंट डिलीवर या मैनेज करने के लिए, रिमोट सर्वर का इस्तेमाल किया जा रहा है, तो जब भी कोई उपयोगकर्ता कॉन्टेंट को ऐक्सेस करे, तब आपका ऐप्लिकेशन अनलॉक किए गए कॉन्टेंट की खरीदारी की स्थिति की पुष्टि करे. इससे, ज़रूरत पड़ने पर इस्तेमाल की अनुमति वापस ली जा सकती है और पायरेसी को कम किया जा सकता है. अगर आपको Google Play पर अपना कॉन्टेंट फिर से डिस्ट्रिब्यूट किया हुआ दिखता है, तो तुरंत और निर्णायक कार्रवाई करें. ज़्यादा जानकारी के लिए, कॉपीराइट सहायता केंद्र में, कॉपीराइट से जुड़े अक्सर पूछे जाने वाले सवाल पेज देखें.