Android (9) पाई में सभी नेटवर्क कनेक्शन प्रकार HTTP और HTTPS की अनुमति कैसे दें?


144

एंड्रॉइड 9 पाई से अब, एन्क्रिप्शन के बिना अनुरोध कभी काम नहीं करेंगे। और डिफ़ॉल्ट रूप से, सिस्टम आपसे डिफ़ॉल्ट रूप से TLS का उपयोग करने की अपेक्षा करेगा। आप इस सुविधा को यहां पढ़ सकते हैं इसलिए यदि आप केवल HTTPS के माध्यम से अनुरोध करते हैं तो आप सुरक्षित हैं। लेकिन उन ऐप्स के बारे में जो विभिन्न साइटों के माध्यम से अनुरोध करते हैं, उदाहरण के लिए, ब्राउज़र जैसे ऐप।

मैं एंड्रॉइड 9 पाई में HTTP और HTTPS सभी प्रकार के कनेक्शन के अनुरोधों को कैसे सक्षम कर सकता हूं?

जवाबों:


250

इसे लागू करने का आसान तरीका यह है AndroidManifest.xmlकि आप इस विशेषता का उपयोग करें जहां आप httpसभी अनुरोधों के लिए अनुमति देते हैं:

<application android:usesCleartextTraffic="true">
</application>

लेकिन अगर आप उदाहरण के लिए विभिन्न लिंक के लिए कुछ और कॉन्फ़िगरेशन चाहते हैं , तो httpकुछ डोमेन के लिए अनुमति दें, लेकिन अन्य डोमेन के लिए आपको res/xml/networkSecurityConfig.xmlफ़ाइल प्रदान नहीं करनी चाहिए ।

एंड्रॉइड 9 पाई में ऐसा करने के लिए आपको networkSecurityConfigअपने मैनिफ़ेस्ट applicationटैग में इस तरह सेट करना होगा :

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:networkSecurityConfig="@xml/network_security_config">




    </application>
</manifest>

फिर अपने xmlफोल्डर में अब आपको एक फाइल बनानी है network_security_config, जिस तरह से आपने इसे मेनिफेस्ट में नाम दिया है और वहां से आपकी फाइल का कंटेंट इस तरह होना चाहिए, बिना एनक्रिप्ट के सभी रिक्वेस्ट को इनेबल करने के लिए:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
</network-security-config>

वहां से आप जाने के लिए अच्छे हैं। अब आपका ऐप सभी प्रकार के कनेक्शन के लिए अनुरोध करेगा। इस विषय पर अतिरिक्त जानकारी के लिए यहां पढ़ें


1
@Xenolion मेरे द्वारा ये परिवर्तन किए जाने के बाद (एक प्रतिक्रियाशील मूल एप्लिकेशन के साथ) यह अब नहीं बनता है। "मैनिफ़ेस्ट विलय सफल नहीं"। "अनुप्रयोग अनुप्रयोग @ networkSecurityConfig मान = (@ xml / react_native_config) AndroidManifest.xml से: 7: 7-67 भी AndroidManifest.xml पर मौजूद है: 7: 7-67 मूल्य = (@ xml / network_security_config)। कोई भी विचार?
वायट।

@ आप के रूप में वही मुद्दा रहा, क्या आपको कोई हल मिला?
डांटे

1
@ डेंट कर्वेंट्स ऊपर मेरे जवाब की जाँच करते हैं।
हर्षित अग्रवाल

3
मैं मूल परियोजना में प्रतिक्रिया में xml फ़ोल्डर कहां पा सकता हूं
CraZyDroiD

2
बहुत समय बर्बाद करना समझ से बाहर है कि यह वास्तव में HTTP समस्या है। आम तौर पर यह HTTP RESPONSE
मिहिर भट्ट

30

पूरी तरह काम समाधान दोनों के लिए Androidया React-nativeउन को इस मुद्दे का सामना करना पड़ सिर्फ इस जोड़ने android:usesCleartextTraffic="true" में AndroidManifest.xml इस तरह फ़ाइल:

android:usesCleartextTraffic="true"
tools:ignore="GoogleAppIndexingWarning">
<uses-library
    android:name="org.apache.http.legacy"
    android:required="false" />

बीच में <application>.. </application>इस तरह टैग:

<application
      android:name=".MainApplication"
      android:label="@string/app_name"
      android:icon="@mipmap/ic_launcher"
      android:allowBackup="false"
      android:theme="@style/AppTheme"
        android:usesCleartextTraffic="true"
        tools:ignore="GoogleAppIndexingWarning">
        <uses-library
            android:name="org.apache.http.legacy"
            android:required="false" />
      <activity
        android:name=".MainActivity"
        android:label="@string/app_name"/>
 </application>

2
वाह मेरे ऐप में इसके ठीक काम करने के लिए धन्यवाद, इसके दिखाने से पहले I / o विफलता का मुद्दा अब हल हो गया है
वेंकटेश

1
यदि आपको tools:ignoreत्रुटि मिलती है, तो xmlns:tools="http://schemas.android.com/tools"अपने अंदर जोड़ना सुनिश्चित करें application। जैसे<application xmlns:tools="http://schemas.android.com/tools" ...
जिओ

2
मुझे पता है कि यह एक Android सवाल है, लेकिन प्रतिक्रिया-मूल डेवलपर्स के लिए मदद कर सकता है, ios समाधान NSAppTransportSecurityinfo.plist में जोड़ना है। stackoverflow.com/questions/38418998/…
अब्दुल सादिक यल्किन

16

एक सरल तरीका android:usesCleartextTraffic="true"आप पर निर्धारित हैAndroidManifest.xml

android:usesCleartextTraffic="true"

आपका AndroidManifest.xmlरूप

<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.dww.drmanar">
   <application
       android:icon="@mipmap/ic_launcher"
       android:label="@string/app_name"
       android:usesCleartextTraffic="true"
       android:theme="@style/AppTheme"
       tools:targetApi="m">
       <activity
            android:name=".activity.SplashActivity"
            android:theme="@style/FullscreenTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
       </activity>
    </application>
</manifest>

उम्मीद है इससे आपको मदद मिलेगी।


10

आसान तरीका

जोड़े usesCleartextTrafficको AndroidManifest.xml

<application
...
android:usesCleartextTraffic="true"
...>

इंगित करता है कि क्या एप्लिकेशन क्लीयरटेक्स्ट नेटवर्क ट्रैफ़िक का उपयोग करने का इरादा रखता है, जैसे क्लीयरटेक्स्ट HTTP। एपीआई स्तर 27 या उससे कम लक्ष्य करने वाले ऐप्स का डिफ़ॉल्ट मान "सही" है। ऐसे ऐप्स जो API स्तर 28 या उच्चतर डिफ़ॉल्ट "गलत" को लक्षित करते हैं।


8

बस फ़ाइल usesCleartextTrafficके एप्लिकेशन टैग में ध्वज सेट करें AndroidManifest.xml। Android के लिए कॉन्फ़िग फ़ाइल बनाने की आवश्यकता नहीं है।

 <application
   android:usesCleartextTraffic="true"
   .
   .
   .>

7

React Nativeडिबग में दौड़ते समय अनुप्रयोगों के लिए xml block@Xenolion द्वारा उल्लेखित को react_native_config.xmlस्थित में जोड़ें<project>/android/app/src/debug/res/xml

निम्नलिखित स्निपेट के समान:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="false">localhost</domain>
        <domain includeSubdomains="false">10.0.2.2</domain>
        <domain includeSubdomains="false">10.0.3.2</domain>
    </domain-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
</network-security-config>

1

मुझे वही समस्या मिली और मैंने देखा कि मेरे सुरक्षा कॉन्फिग में अलग-अलग TAGS हैं जैसे @Xenolion उत्तर कहता है

<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
    </domain-config>
</network-security-config>

इसलिए मैं "बेस-कॉन्फिगरेशन" के लिए TAGS "डोमेन-कॉन्फिगरेशन" में बदलाव करता हूं और इस तरह काम करता हूं:

<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
    </base-config>
</network-security-config>

आप इस का उत्तर दें सकती है stackoverflow.com/questions/59116787/...
प्रतीक जायसवाल

0

यदि आप HTTP फिक्स के माध्यम से क्लियरटेक्स्ट भेज रहे हैं तो आप जांच सकते हैं: https://medium.com/@son.rommer/fix-cleartext-traffic-error-in-android-9-pie-2f4e9e2235e6
या
Apache HTTP क्लाइंट के मामले में deprecation (Google से): Android 6.0 के साथ, हमने Apache HTTP क्लाइंट के लिए समर्थन हटा दिया है। एंड्रॉइड 9 के साथ शुरू होने पर, वह लाइब्रेरी बूटक्लासपथ से हटा दी जाती है और डिफ़ॉल्ट रूप से ऐप्स के लिए उपलब्ध नहीं होती है। अपाचे HTTP क्लाइंट का उपयोग जारी रखने के लिए, एंड्रॉइड 9 और इसके बाद के संस्करण वाले एप्लिकेशन अपने AndroidManifest.xml पर निम्न जोड़ सकते हैं:

स्रोत https://developer.android.com/about/versions/pie/android-9.0-changes-28

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.