Как разрешить все типы сетевых соединений HTTP и HTTPS в Android (9) Pie?
С Android 9 Pie теперь запросы без шифрования никогда не будут работать. И по умолчанию Система будет ожидать, что вы будете использовать TLS по умолчанию. Вы можете прочитать эту функцию здесь. Поэтому, если вы делаете запросы только через HTTPS, вы в безопасности. Но как насчет приложений, которые отправляют запросы через разные сайты, например, приложения, похожие на браузер?
Как включить запросы ко всем типам соединений HTTP и HTTPS в Android 9 Pie?
Ответы
Ответ 1
Самый простой способ реализовать это - использовать этот атрибут в вашем AndroidManifest.xml
где вы разрешаете все http
для всех запросов:
android:usesCleartextTraffic="true"
Но в случае, если вам нужно больше конфигураций для разных ссылок, например, разрешив http
для некоторых доменов, но не для других доменов, вы должны предоставить файл networkSecurityConfig
.
Чтобы сделать это в Android 9 Pie, вам нужно установить networkSecurityConfig
в теге application
Manifest следующим образом:
<?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>
Оттуда вам хорошо идти. Теперь ваше приложение будет делать запросы на все типы соединений. Для получения дополнительной информации по этой теме читайте здесь.
Ответ 2
Полностью работающее решение для пользователей 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>
Ответ 3
Простой способ установить 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>
Я надеюсь, что это поможет вам.
Ответ 4
Просто установите usesCleartextTraffic
в теге приложения в файле AndroidManifest.xml
. Нет необходимости создавать конфигурационный файл для Android.
<application
android:usesCleartextTraffic="true"
.
.
.>
Ответ 5
Для приложений 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>
Ответ 6
Вы можете проверить, отправляете ли вы 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
Ответ 7
Я пробовал то же самое
Но это не работает,
На этом этапе происходит исключение
Ответ 8
Легкий путь
Добавьте usesCleartextTraffic
в manifest.xml
<application
...
android:usesCleartextTraffic=true
...>
Указывает, намерено ли приложение использовать сетевой трафик в виде открытого текста, например HTTP в виде открытого текста. Значением по умолчанию для приложений, ориентированных на API уровня 27 или ниже, является "true". Приложения, для которых API уровня 28 или выше, по умолчанию имеют значение "false"