У меня были сообщения от пользователей с Android 8, что мое приложение (которое использует внутренний канал) не показывает контент. После расследования я обнаружил следующее исключение, происходящее на Android 8:
08-29 12:03:11.246 11285-11285/ E/: [12:03:11.245, main]: Exception: IOException java.io.IOException: Cleartext HTTP traffic to * not permitted
at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:115)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:458)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
at com.deiw.android.generic.tasks.AbstractHttpAsyncTask.doConnection(AbstractHttpAsyncTask.java:207)
at com.deiw.android.generic.tasks.AbstractHttpAsyncTask.extendedDoInBackground(AbstractHttpAsyncTask.java:102)
at com.deiw.android.generic.tasks.AbstractAsyncTask.doInBackground(AbstractAsyncTask.java:88)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
(Я удалил имя пакета, URL и другие возможные идентификаторы)
На Android 7 и ниже все работает, я не устанавливаю android:usesCleartextTraffic
в Манифесте (и установка его на true
не помогает, это значение по умолчанию в любом случае), а также я не использую информацию о сетевой безопасности. Если я звоню NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted()
, он возвращается false
для Android 8, true
для более старой версии, используя тот же файл apk. Я попытался найти упоминание об этом в информации Google об Android O, но безуспешно.
cleartextTrafficPermitted="true"
Ответы:
Согласно конфигурации безопасности сети -
Также посмотрите на - https://koz.io/android-m-and-the-war-on-cleartext-traffic/
Объяснение Codelabs - https://codelabs.developers.google.com/codelabs/android-network-security-config/index.html
Опция 1 -
Сначала попробуйте ввести URL с помощью «https: //» вместо «http: //».
Вариант 2 -
Создать файл res / xml / network_security_config.xml -
AndroidManifest.xml -
Вариант 3 -
Android: использует CleartextTraffic Doc
AndroidManifest.xml -
Также, как указал ответ @ david.s , это
android:targetSandboxVersion
может быть проблемой -Согласно Манифесту Документов -
Итак, Вариант 4 -
Если у вас есть
android:targetSandboxVersion
в<manifest>
том уменьшить его1
AndroidManifest.xml -
источник
android:usesCleartextTraffic="true"
?В AndroidManifest я нашел этот параметр:
и @ xml / network_security_config определяется в network_security_config.xml как:
только что я изменил cleartextTrafficPermitted на true
источник
Моя проблема в Android 9 заключалась в навигации по веб-сайтам по доменам с http. Решение из этого ответа
а также:
Рез / XML / network_security_config.xml
источник
gradle
?Возможно, вы захотите только разрешить открытый текст во время отладки, но сохраните преимущества безопасности от отклонения открытого текста в производственной среде. Это полезно для меня, потому что я тестирую свое приложение на сервере разработки, который не поддерживает https. Вот как применить https в производственной среде, но разрешить открытый текст в режиме отладки:
В build.gradle:
В теге приложения в AndroidManifest.xml
источник
Измените ваш URL с
HTTP
наHTTPS
;Это работает !!!
источник
В предложении, приведенном выше, я указывал свой URL как http://xyz.abc.com/mno/
Я изменил это на xyz.abc.com, затем он начал работать.
источник
Хорошо, это ⇒⇒ НЕ repeat тысячи повторений, добавьте его в свой манифест , но подсказка, которая основывается на этом, но даст вам дополнительное преимущество (и, возможно, некоторую справочную информацию).
Android имеет своего рода функцию перезаписи для src-Directory.
По умолчанию у вас есть
Но вы можете добавить дополнительные каталоги, чтобы перезаписать ваш AndroidManifest.xml. Вот как это работает:
Внутри этого файла вам не нужно помещать в него все правила, а только те, которые вы хотите перезаписать из вашего / app / src / main / AndroidManifest.xml
Вот пример того, как это выглядит для запрошенного CLEARTEXT-Permission:
Обладая этими знаниями, теперь вы можете с легкостью перегрузить разрешения на 1,2,3 в зависимости от отладки | главная | освободить окружающую среду.
Большая выгода от этого ... у вас нет отладочных материалов в вашем производственном манифесте, и вы сохраняете простую и легкую в обслуживании структуру
источник
Это может быть полезно для кого-то.
У нас недавно была та же проблема для Android 9, но нам нужно было отображать только несколько URL-адресов в WebView, ничего особенного. Поэтому добавление
android:usesCleartextTraffic="true"
в Manifest сработало, но мы не хотели ставить под угрозу безопасность всего приложения для этого. Так что исправление было в изменении ссылок сhttp
наhttps
источник
Для проектов React Native
Это было уже исправлено на RN 0,59. Вы можете найти при обновлении diff с 0.58.6 до 0.59. Вы можете применить его без обновления версии RN, выполнив следующие действия:
Создать файлы:
android / app / src / debug /res/xml/react_native_config.xml -
android / app / src / debug /AndroidManifest.xml -
Проверьте принятый ответ, чтобы узнать причину.
источник
Хорошо, я понял это. Это связано с параметром Manifest
android:targetSandboxVersion="2"
, который я добавил, потому что у нас также есть версия Instant App - она должна быть уверена, что при переходе пользователя с Instant App на обычное приложение он не потеряет свои данные при передаче. Однако, как следует из смутного описания:Это, очевидно, также добавляет новый уровень политики безопасности, по крайней мере, на Android 8.
источник
Я удалил эту строку из файла манифеста Android, который уже существует
и добавил
это в теге приложения в манифесте
тогда эта ошибка в незашифрованном виде HTTP-трафик на overlay.openstreetmap.nl не разрешен для меня в Android 9 и 10. Я надеюсь, что это будет работать для Android 8, и если это поможет, вы не забудьте проголосовать спасибо
источник
Чтобы применить эти различные ответы
Xamarin.Android
, вы можете использовать атрибуты уровня класса и сборки вместо ручного редактированияAndroidManifest.xml
Разумеется, необходимо интернет-разрешение (дух ..):
Примечание. Обычно атрибуты уровня сборки добавляются в ваш
AssemblyInfo.cs
файл, но любой файл нижеusing
и вышеnamespace
работает.Затем в своем подклассе Application (при необходимости создайте его) вы можете добавить
NetworkSecurityConfig
ссылку наResources/xml/ZZZZ.xml
файл:Создайте файл в
Resources/xml
папке (создайтеxml
папку при необходимости).xml/network_security_config
Файл примера , отрегулируйте по мере необходимости (см. Другие ответы)Вы также можете использовать
UsesCleartextTraffic
параметр вApplicationAttribute
:источник
UsesCleartextTraffic = true
Я также получил ту же ошибку «HTTP-трафик в незашифрованном виде запрещен» при разработке моего приложения. Я использую Retrofit2 для сетевых вызовов в моем приложении, и у меня есть две проектные среды (разработка и производство). Мой производственный домен имеет сертификат SSL с вызовами HTTPS, а у dev не будет https. Конфигурация добавлена в версии сборки. Но когда я перехожу на dev, эта проблема сработает. Поэтому я добавил ниже-решение для этого.
Я добавил открытый трафик в манифест
Затем я добавил спецификацию соединения во время создания класса конфигурации OKHttp.
Полное создание OkHttpClient приведено ниже
источник
Обновление декабрь 2019 ионный - 4.7.1
Пожалуйста, добавьте вышеупомянутое содержание в .xml файле манифеста Android
Предыдущие версии ионных
Убедитесь, что в вашем
config.xml
Ionic Project есть следующее :Запустите ионную сборку Cordova на андроид. Это создает папку Android под Платформы
Откройте Android Studio и откройте папку Android, присутствующую в нашем проекте project-platform-android. Оставьте это в течение нескольких минут, чтобы это построило gradle
После
gradle build
завершения мы получаем некоторые ошибки для включенияminSdVersion
вmanifest.xml
. Теперь то, что мы делаем, это просто удаляем<uses-sdk android:minSdkVersion="19" />
изmanifest.xml
.Убедитесь, что он удален из обоих мест:
AndroidManifest.xml
.AndroidManifest.xml
.Теперь попробуйте снова построить gradle, и теперь он успешно собирается.
Убедитесь, что у вас есть следующее в теге приложения в App → manifest →
Androidmanifest.xml
:Откройте
network_security_config
(приложение → res → xml →network_security_config.xml
).Добавьте следующий код:
Вот
xxx.yyyy.com
ссылка на ваш HTTP API. Убедитесь, что вы не включили Http перед URL.Примечание. Теперь создайте приложение с помощью Android Studio (Build - Build Bundle's / APK - Build APK), и теперь вы можете использовать это приложение, и оно прекрасно работает в Android Pie. Если вы пытаетесь создать приложение, используя ionic Cordova build android, оно переопределяет все эти настройки, поэтому убедитесь, что вы используете Android Studio для сборки проекта.
Если у вас установлены более старые версии приложения, удалите их и попробуйте, иначе у вас останется какая-то ошибка:
источник
Создать файл - res / xml / network_security.xml
В network_security.xml ->
Откройте AndroidManifests.xml:
источник
Это сделано из соображений безопасности, вы всегда должны использовать HTTPS (HTTP Secure ), где это возможно.
Вы можете прочитать больше об этом здесь
Есть несколько решений этой проблемы в зависимости от вашего состояния.
Если вы пытаетесь установить связь со сторонним сервисом, IE: ваш собственный веб-сервер
Серверная сторона: Вы должны добавить поддержку HTTPS на этот сервер и использовать HTTPS вместо HTTP. В наши дни вы даже можете сделать это бесплатно, используя такие сервисы, как LetsEncrypt и другие.
Клиентская часть: если вы используете пакет
HttpURLConnection
изjava.net
пакета, вы можете переключитьсяHttpsURLConnection
наjava.net.ssl
пакета, он имеет похожий, если не идентичный API, поэтому переключение должно быть простым.Если вы используете стороннюю службу, например Google, Facebook, службу погоды и т. Д.
Если служба, с которой вы общаетесь, поддерживает HTTPS (что наиболее вероятно), вы можете просто изменить URL-адрес вашего запроса с
http://abc.xyz
наhttps://abc.xyz
.В крайнем случае, если сторонняя служба, с которой вы хотите установить связь, не поддерживает HTTPS или какую-либо другую форму безопасного обмена данными, вы можете использовать этот ответ , но, опять же, это не рекомендуется, так как это противоречит цели столь необходимой функция безопасности.
источник
В моем случае этот URL также не работает в браузере.
Я проверяю с https://www.google.com/
И это сработало для меня.
источник
Просто добавьте android: usingCleartextTraffic = "true" внутри файла AndroidManifest.xml
источник
Для Xamarin.Android разработчиков убедитесь, что реализация HttpClient и SSL / TLS установлены по умолчанию.
Его можно найти в разделе «Параметры Android» -> «Дополнительные параметры Android».
источник
В то время как рабочий ответ, для меня, был этим @PabloCegarra:
Вы можете получить предупреждение безопасности относительно
cleartextTrafficPermitted="true"
Если вы знаете, что домены находятся в «белом списке», вы должны смешать как принятый ответ, так и приведенный выше:
Этот код работает для меня, но мое приложение должно получать данные только с books.google.com. Таким образом, предупреждение безопасности исчезает.
источник
Затем 2 шага: -> добавить манифест в тег приложения манифеста
// Шаг 4 - >> Создание Drawable >> XML-файла >> имя как >> network_security_config.xml
источник
Обновление до React Native 0.58.5 или выше. Они имеют
includeSubdomain
в своих файлах конфигурации в RN 0.58.5.ChangeLog
В Rn 0.58.5 они объявили
network_security_config
со своим доменом сервера. Настройка безопасности сети позволяет приложению разрешать трафик открытым текстом из определенного домена. Поэтому нет необходимости прилагать дополнительные усилия, указавandroid:usesCleartextTraffic="true"
в теге приложения вашего файла манифеста. Это будет решено автоматически после обновления версии RN.источник
После изменения API версии 9.0 получение сообщения об ошибке HTTP в открытом виде в YOUR-API.DOMAIN.COM не разрешено (targetSdkVersion = "28"). в xamarin, xamarin.android и андроид студии.
Два шага, чтобы решить эту ошибку в xamarin, xamarin.android и android studio.
Шаг 1. Создайте файл resources / xml / network_security_config.xml
В network_security_config.xml
Шаг 2: обновите AndroidManifest.xml -
Добавьте android: networkSecurityConfig = "@ xml / network_security_config" в тег приложения. например:
источник
добавление этого параметра в заголовок решило мою проблему в apiSauce React Native
источник
Если вы используете ionic и получаете эту ошибку во время встроенного http- плагина, необходимо выполнить следующее исправление:
Гото
resources/android/xml/network_security_config.xml
Изменить его to -Это сработало для меня!
источник
Добавление ... android: usedCleartextTraffic = "true" ... может показаться, что проблема в файле манифеста устраняет проблему, но при этом возникает угроза целостности данных.
Из соображений безопасности я использовал заполнители манифеста с android :sesCleartextTraffic внутри файла манифеста (как в варианте 3 принятого ответа, т. Е. Ответ @ Hrishikesh Kadam ), чтобы разрешить только открытый текст в среде отладки.
Внутри файла build.gradle (: app) я добавил заполнитель манифеста, например так:
Обратите внимание на имя заполнителя cleartextTrafficPermitted в этой строке выше
Затем в моем манифесте для Android я использовал тот же заполнитель ...
AndroidManifest.xml -
При этом трафик открытого текста разрешен только в среде отладки.
источник
Когда приложение обменивается данными с серверами, используя сетевой трафик в виде открытого текста, например HTTP ( не https ), это может повысить риск взлома и фальсификации контента. Третьи лица могут вводить несанкционированные данные или передавать информацию о пользователях. Вот почему разработчикам рекомендуется защищать только трафик, такой как HTTPS. Вот реализация и ссылка, как решить эту проблему.
источник
Попробуйте ввести URL с помощью «https: //» вместо «http: //»
источник
Я использую Cordova 8 с cordova-plugin-whitelist 1.3.4, и по умолчанию в моем приложении нет доступа к Интернету, и я только добавляю параметр в manifest.xml -> android: usedCleartextTraffic = "true"
Путь mainfest изменился в Cordova 8: платформа / android / app / src / main / AndroidManifest.xml.
это действительно глупо, потому что очевидно, что вашему приложению нужен доступ к интернету ....
источник
Простое и простое решение [Xamarin Form]
Android Project
, затем нажмитеProperties
,AssemblyInfo.cs
и вставьте этот код прямо здесь:Используйте
NSAppTransportSecurity
:Вы должны установить
NSAllowsArbitraryLoads
ключYES
подNSAppTransportSecurity
словарем в вашемinfo.plist
файл.источник