परिचय: Android 9 अब भी क्यों महत्वपूर्ण है (2025 में भी)
\n\nएक स्थिति की कल्पना करें: आप एक ऐप लिख रहे हैं जिसे पुराने HTTP पर सर्वर से संवाद करना है। या आप localhost पर स्थानीय API का परीक्षण कर रहे हैं। आप इसे Android 9 (Pie) पर चलाते हैं — और आपको एक ग्रे स्क्रीन, कनेक्शन त्रुटि और एक लॉग मिलता है जिसमें डरावना शब्द Cleartext HTTP traffic not permitted होता है। परिचित लगता है?
Android 9 (API 28) एक महत्वपूर्ण मोड़ था: Google ने डिफ़ॉल्ट रूप से असुरक्षित HTTP कनेक्शन पर प्रतिबंध लगा दिया। डेवलपर्स के लिए यह एक चुनौती बन गया। 2025 में भी, जब Android 14 और 15 आ चुके हैं, लाखों डिवाइस अभी भी "नौ" पर चल रहे हैं। इसके अलावा, कई कॉर्पोरेट ऐप और लीगेसी सिस्टम HTTP का समर्थन करने के लिए मजबूर हैं। क्या करें? सभी प्रकार के नेटवर्क कनेक्शन HTTP और HTTPS को सुरक्षा से समझौता किए बिना कैसे अनुमति दें?
\n\nइस लेख में, हम Kotlin पर सर्वोत्तम अभ्यासों पर चर्चा करेंगे जो 2025 में वास्तव में काम करते हैं। आप सिर्फ "कैसे करें" नहीं, बल्कि "सही तरीके से कैसे करें" सीखेंगे — ताकि Google Play ब्लॉक न करे और उपयोगकर्ताओं को नुकसान न हो।
\n\nAndroid 9 में क्या बदला: इतिहास में एक संक्षिप्त भ्रमण
\n\nAndroid 8.1 से पहले, डेवलपर्स आराम से HTTP का उपयोग करते थे। लेकिन Pie के आने के साथ, Google ने एक सुरक्षा नीति लागू की जो cleartext traffic को ब्लॉक करती है — TLS के माध्यम से एन्क्रिप्ट न किया गया कोई भी ट्रैफ़िक। इसने प्रभावित किया:
\n\n- \n
- HTTP अनुरोध (पोर्ट 80); \n
- बिना एन्क्रिप्शन के WebSocket (ws://); \n
- कुछ कस्टम प्रोटोकॉल। \n
अपवाद — HTTPS (पोर्ट 443) और स्थानीय localhost है। लेकिन क्या होगा यदि आपका सर्वर अभी भी HTTP पर चल रहा है? या आप कंपनी के आंतरिक नेटवर्क के लिए ऐप विकसित कर रहे हैं?
समाधान — Network Security Configuration है। यह एक XML फ़ाइल है जो सिस्टम को बताती है: "अरे, इस डोमेन पर भरोसा किया जा सकता है"। 2025 में, यह डी-फैक्टो मानक है, और हम दिखाएंगे कि इसे सही तरीके से कैसे कॉन्फ़िगर किया जाए।
\n\nविधि 1: सबसे आसान तरीका — पूरे ऐप के लिए जाँच अक्षम करें
\n\nयदि आप पूरे ऐप के लिए सभी प्रकार के नेटवर्क कनेक्शन HTTP और HTTPS को अनुमति देना चाहते हैं (उदाहरण के लिए, प्रोटोटाइप या टेस्ट बिल्ड के लिए), तो आप मेनिफेस्ट में एक फ्लैग का उपयोग कर सकते हैं। लेकिन चेतावनी: प्रोडक्शन के लिए यह खराब अभ्यास है।
\n\nचरण 1: AndroidManifest.xml में विशेषता जोड़ें
\n\n<application\n android:allowBackup="true"\n android:icon="@mipmap/ic_launcher"\n android:label="@string/app_name"\n android:usesCleartextTraffic="true">\n ...\n</application>\n\nचरण 2: सुनिश्चित करें कि targetSdkVersion = 28 या उससे कम है
\n\nयदि targetSdkVersion >= 28 है, तो यह फ्लैग अभी भी काम करता है। लेकिन Google Play उपयोगकर्ता को असुरक्षित ऐप के बारे में चेतावनी दे सकता है। 2025 में, इस विधि को अधिक सूक्ष्म सेटिंग के साथ जोड़ना बेहतर है।
लाभ: तेज़, सभी डोमेन के लिए काम करता है।
\nनुकसान: MitM हमलों के लिए संवेदनशीलता, Google Play मॉडरेशन पास नहीं होगा।
विधि 2: Network Security Config के माध्यम से सही रास्ता (2025 संस्करण)
\n\nयह विधि स्वर्ण मानक है। आप एक XML फ़ाइल बनाते हैं जिसमें आप निर्दिष्ट करते हैं कि कौन से डोमेन और प्रोटोकॉल अनुमत हैं। 2025 में, हम सभी नए प्रोजेक्ट्स के लिए इसका उपयोग करने की सलाह देते हैं।
\n\nचरण 1: res/xml/network_security_config.xml फ़ाइल बनाएँ
\n\nयहाँ एक उदाहरण है जो किसी भी डोमेन के लिए सभी HTTP और HTTPS को अनुमति देता है (लेकिन सीमाओं के साथ):
\n\n<?xml version="1.0" encoding="utf-8"?>\n<network-security-config>\n <base-config cleartextTrafficPermitted="true">\n <trust-anchors>\n <certificates src="system" />\n </trust-anchors>\n </base-config>\n</network-security-config>\n\nचरण 2: AndroidManifest में कॉन्फ़िग कनेक्ट करें
\n\n<application\n android:networkSecurityConfig="@xml/network_security_config"\n ...>\n</application>\n\nजा