Как разрешить все типы сетевых подключений HTTP и HTTPS в Android (9) Pie?
С Android 9 Pie теперь запросы без шифрования никогда не будут работать. И по умолчанию Система будет ожидать, что вы будете использовать TLS по умолчанию. Вы можете прочитать эту функцию здесь. Так что, если вы делаете запросы только через HTTPS, вы в безопасности. Но как насчет приложений, которые делают запросы через разные сайты, например, браузерные приложения.
Как включить запросы ко всем типам соединений HTTP и HTTPS в Android 9 Pie?
10 ответов
Для этого в Android 9 Pie вам нужно будет установить 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>
Оттуда вам хорошо идти. Теперь ваше приложение будет делать запросы на все типы соединений. Для дополнительной информации читайте здесь.
Полностью рабочее решение для обоих Android
или же React-native
пользователи, сталкивающиеся с этой проблемой, делают это в файле 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>
A simple way is set android:usesCleartextTraffic="true"
on you 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>
Я надеюсь, что это поможет вам.
Простой способ
добавлять usesCleartextTraffic
в AndroidManifest.xml
<application
...
android:usesCleartextTraffic="true"
...>
Указывает, намеревается ли приложение использовать сетевой трафик с открытым текстом, например HTTP с открытым текстом. Значение по умолчанию для приложений, нацеленных на уровень API 27 или ниже, - "true". Приложения, нацеленные на уровень API 28 или выше, по умолчанию имеют значение "false".
За 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>
Просто установите usesCleartextTraffic
флаг в теге приложения AndroidManifest.xml
файл. Нет необходимости создавать конфигурационный файл для Android.
<application
android:usesCleartextTraffic="true"
.
.
.>
У меня такая же проблема, и я замечаю, что моя конфигурация безопасности имеет разные ТЕГИ, например, в ответе @Xenolion говорится
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
</domain-config>
</network-security-config>
поэтому я меняю теги "domain-config" на "base-config" и работаю следующим образом:
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
</base-config>
</network-security-config>
Это сработало для меня,
добавьте этот xml-файл в: andriod / app / src / main / res / xml / network_security_config.xml
network_security_config.xml
xml/network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">your_domain1</domain>
</domain-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">your_domain2</domain>
</domain-config>
</network-security-config>
затем добавьте этот код в AndroidMenifest.xml
<application
...
android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config"
...
>
<!-- for http support-->
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
...
</application>
Добавьте UseCleartextTraffic в AndroidManifest.xml.
например
<application
...
android:usesCleartextTraffic="true"
...>
в
<application
android: allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="AndroidLearning"
android: supportsRtl="true"
android:UsesCleartextTraffic="true" <-----
android: theme="@style/Theme.AndroidLearning"
tools:targetApi="31">
<activity
android:name=" MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android. intent.action.MAIN" />
‹catedorv android:name="android.intent.catedorv.LAUNCHFR" />
Вы можете проверить, отправляете ли вы clearText через HTTP Fix: https://medium.com/@son.rommer/fix-cleartext-traffic-error-in-android-9-pie-2f4e9e2235e6
ИЛИ ЖЕ
В случае устаревания HTTP-клиента Apache (от Google): в Android 6.0 мы убрали поддержку HTTP-клиента Apache. Начиная с Android 9, эта библиотека удаляется из пути загрузки и по умолчанию недоступна для приложений. Чтобы продолжить использовать HTTP-клиент Apache, приложения, ориентированные на Android 9 и выше, могут добавить в свой AndroidManifest.xml следующее:
Источник https://developer.android.com/about/versions/pie/android-9.0-changes-28