Sometimes we face the error that same application which support http not working in some mobile devices specially in android pie and above devices and even some websites not showing in WebView with http connection type url . The error is something like this:
Exception: IOException java.io.IOException: Cleartext HTTP traffic to * not permitted
and same error in Web View like:
so in this post we will learn about how to solve this problem and make our app support for all devices. So lets start -
As per the Android Documentation
Exception: IOException java.io.IOException: Cleartext HTTP traffic to * not permitted
and same error in Web View like:
so in this post we will learn about how to solve this problem and make our app support for all devices. So lets start -
As per the Android Documentation
- From Android 9 Pie now, requests without encryption will never work. And by default, the System will expect you to use TLS by default.
- Starting with Android 9 (API level 28), cleartext support is disabled by default.
- Android 9 adds built-in support for DNS over TLS, automatically upgrading DNS queries to TLS if a network's DNS server supports it.
so from android pie we can say that the default http is not supported and by default connection type supported is https for security reasons . So to solve this problem we have some solutions :
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:
<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:usesCleartextTraffic="true"
...>
...
</application>
</manifest>
Solution 2:
in xml folder you now have to create a file named network_security_config.xml and paste this code
<?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>
-----------------------OR------------------------------
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">domainname.com (to be adjusted here)</domain>
</domain-config>
</network-security-config>
and use this in AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config">
</application>
</manifest>
Solution 3:
If you have android:targetSandboxVersion in <manifest> then reduce it to 1
AndroidManifest.xml -
<?xml version="1.0" encoding="utf-8"?>
<manifest android:targetSandboxVersion="1">
<uses-permission android:name="android.permission.INTERNET" />
...
</manifest>
So by using these solutions you can use HTTP sites and API's in your application that will support for all devices even in android Pie and Above.
References: Click Here
That's all.Keep Coding and Sharing Knowledge.
Comments
Post a Comment