How to allow all Network connection types HTTP and HTTPS in Android (9) Pie?
Solution 1
The easy way to implement this is to use this attribute to your AndroidManifest.xml
where you allow all http
for all requests:
<application android:usesCleartextTraffic="true">
</application>
But in case you want some more configurations for different links for instance, allowing http
for some domains but not other domains you must provide res/xml/networkSecurityConfig.xml
file.
To do this in Android 9 Pie you will have to set a networkSecurityConfig
in your Manifest application
tag like this:
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config">
</application>
</manifest>
Then in your xml
folder you now have to create a file named network_security_config
just like the way you have named it in the Manifest and from there the content of your file should be like this to enable all requests without encryptions:
<?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>
From there you are good to go. Now your app will make requests for all types of connections. For additional information on this topic read here.
Solution 2
The FULLY WORKING SOLUTION for both Android
or React-native
users facing this issue just add this
android:usesCleartextTraffic="true"
in AndroidManifest.xml file like this:
android:usesCleartextTraffic="true"
tools:ignore="GoogleAppIndexingWarning">
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
in between <application>
.. </application>
tag like this:
<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>
Solution 3
A simple way is set android:usesCleartextTraffic="true"
on you AndroidManifest.xml
android:usesCleartextTraffic="true"
Your AndroidManifest.xml
look like
<?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>
I hope this will help you.
Solution 4
Easy Way
Add usesCleartextTraffic
to AndroidManifest.xml
<application
...
android:usesCleartextTraffic="true"
...>
Indicates whether the app intends to use cleartext network traffic, such as cleartext HTTP. The default value for apps that target API level 27 or lower is "true". Apps that target API level 28 or higher default to "false".
Solution 5
For React Native
applications while running in debug add the xml block
mentioned by @Xenolion to react_native_config.xml
located in <project>/android/app/src/debug/res/xml
Similar to the following snippet:
<?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>
Related videos on Youtube
![Xenolion](https://lh3.googleusercontent.com/-tFFAJ2BB1co/AAAAAAAAAAI/AAAAAAAAMBM/Mp1krWr_OVA/photo.jpg?sz=256)
Xenolion
I am a programmer and a rightful husband of Android OS. Although I prefer my Second Wife Flutter, I also ocassionally cheat with iOS. I do Android (Kotlin and Java), Flutter (Mobile and Web), iOS(Swift), Google Cloud Platform and Firebase(Products). I do Web Design and Development as well. I love chatting about Coding send me an email [email protected].
Updated on May 06, 2021Comments
-
Xenolion about 3 years
From Android 9 Pie now, requests without encryption will never work. And by default, the System will expect you to use TLS by default.You can read this feature here So if you only make requests via HTTPS you are safe. But what about apps that make requests through different sites, for instance, browser-like apps.
How can I enable requests to all types of connections HTTP and HTTPS in Android 9 Pie?
-
Wyatt over 5 years@Xenolion After I made these changes (with a React Native application) it no longer builds. "Manifest merger not successful". "Attribute application@networkSecurityConfig value=(@xml/react_native_config) from AndroidManifest.xml:7:7-67 is also present at AndroidManifest.xml:7:7-67 value=(@xml/network_security_config). Any ideas?
-
Dante Cervantes about 5 years@Wyatt im having same issue as you, did you find any solution?
-
Venkatesh about 5 yearsWow thanks its working fine in my app ,before its showing i/o failure issue now solved
-
HarshitMadhav about 5 years@DanteCervantes check out my answer above.
-
Ziyo about 5 yearsif you get
tools:ignore
error, make sure to addxmlns:tools="http://schemas.android.com/tools"
inside yourapplication
. Like so<application xmlns:tools="http://schemas.android.com/tools" ...
-
Myoch about 5 yearsis the app down listed in the PlayStore if we use the "android:usesCleartextTraffic="true". I know that for the Google Search Engine, it can affect your rank if your website does not provide https access.
-
CraZyDroiD almost 5 yearsWhere can i find the xml folder in react native project
-
Mihir Bhatt almost 5 yearsWaste plenty of time figuring out this is actually HTTP issue. normally it shows ERROR on HTTP RESPONSE
-
Xenolion almost 5 yearsJust add the first statement
android:usesCleartextTraffic="true"
in your Android Manifest for React Native. @CraZyDroiD -
pratik jaiswal over 4 yearscan you please answer this stackoverflow.com/questions/59116787/…
-
Abdul Sadik Yalcin over 4 yearsI know this is an android question but might help for react-native developers, the ios solution is to add
NSAppTransportSecurity
to info.plist. stackoverflow.com/questions/38418998/… -
Narendra Singh over 3 years@HarshitAgrawal I am still unable to download pdf file (having http url) in React Native App. Though,
https url
are working fine. I have tried addingandroid:usesCleartextTraffic="true"
anduses-library
part, but still no luck :( -
HarshitMadhav over 3 years@NarendraSingh try to check whether the pdf url is valid or not and also use react-native-fs to access the file system of app to download the pdf.
-
Narendra Singh over 3 years@HarshitAgrawal Yes, pdf url is valid, I tried with various urls to ensure that. Also, I tried a few other methods and libs including
Linking
andreact-native-file-download
, but none of them worked for https url. -
HarshitMadhav over 3 years@NarendraSingh which version are you using of react native?
-
HarshitMadhav over 3 years@NarendraSingh check whether it is related to Flipper issue in react native.
-
Amir Heshmati over 3 yearsIt throws exception on flutter
E/flutter (19798): [ERROR:flutter/shell/common/shell.cc(209)] Dart Unhandled Exception: Invalid argument (domain): Invalid domain name: "localhost", stack trace: #0 new _DomainNetworkPolicy (dart:io/network_policy.dart:85:7)
-
Meiki Neumann over 3 yearsIt's working for me now Thanks ...BTW I'm using React Natice
-
S.Ambika over 3 yearsThis is not working in case of opening third party link inside webview. Please help
-
Raj Kanchan about 3 yearsI had the same issue on 14th May 2021, with the help of @Mehul Solanki. The problem got fixed.
-
Scott Plunkett almost 3 yearsThis worked for me w/ React Native 60.6, Android 10, Gradle 3.4.3... if running in emulator and you still have issues with connecting to packaging server, try
adb reverse tcp:8081 tcp:8081
in your terminal (assuming 8081 is the port metro bundler is running on) -
babbin tandukar over 2 yearsIt doest work on api below 23 , not working on lollipop or below device