Android 8: открытый HTTP-трафик не разрешен
У меня были сообщения от пользователей с 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, но безуспешно.
44 ответа
Согласно конфигурации безопасности сети -
Начиная с Android 9.0 (уровень API 28), поддержка открытого текста по умолчанию отключена.
Также посмотрите на - https://koz.io/android-m-and-the-war-on-cleartext-traffic/
Опция 1 -
Создать файл res / xml / network_security_config.xml -
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">Your URL(ex: 127.0.0.1)</domain>
</domain-config>
</network-security-config>
AndroidManifest.xml -
<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:networkSecurityConfig="@xml/network_security_config"
...>
...
</application>
</manifest>
Вариант 2 -
AndroidManifest.xml -
<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:usesCleartextTraffic="true"
...>
...
</application>
</manifest>
Также, как указал ответ @ david.s android:targetSandboxVersion
тоже может быть проблемой -
Согласно Манифесту Документов -
android:targetSandboxVersion
Целевая песочница для этого приложения. Чем выше номер версии песочницы, тем выше уровень безопасности. Его значение по умолчанию равно 1; Вы также можете установить его на 2. Установка этого атрибута на 2 переключает приложение в другую изолированную программную среду SELinux. Следующие ограничения применяются к песочнице уровня 2:
- Значение по умолчанию
usesCleartextTraffic
в настройках безопасности сети указано значение false.- Обмен UID не разрешен.
Итак, Вариант 3 -
Если у вас есть android:targetSandboxVersion
в <manifest>
затем уменьшите его до 1
AndroidManifest.xml -
<?xml version="1.0" encoding="utf-8"?>
<manifest android:targetSandboxVersion="1">
<uses-permission android:name="android.permission.INTERNET" />
...
</manifest>
Моя проблема в Android 9 заключалась в навигации по веб-сайтам по доменам с http. Решение из этого ответа
<application
android:networkSecurityConfig="@xml/network_security_config"
...>
а также:
Рез / 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>
</network-security-config>
В AndroidManifest я нашел этот параметр:
android:networkSecurityConfig="@xml/network_security_config"
и @xml/network_security_config определяется в network_security_config.xml как:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<!--Set application-wide security config using base-config tag.-->
<base-config cleartextTrafficPermitted="false"/>
</network-security-config>
только что я изменил cleartextTrafficPermitted на true
Возможно, вы захотите только разрешить открытый текст во время отладки, но сохраните преимущества безопасности от отклонения открытого текста в производственной среде. Это полезно для меня, потому что я тестирую свое приложение на сервере разработки, который не поддерживает https. Вот как применить https в рабочей среде, но разрешить открытый текст в режиме отладки:
В build.gradle:
// Put this in your buildtypes debug section:
manifestPlaceholders = [usesCleartextTraffic:"true"]
// Put this in your buildtypes release section
manifestPlaceholders = [usesCleartextTraffic:"false"]
В теге приложения в AndroidManifest.xml
android:usesCleartextTraffic="${usesCleartextTraffic}"
Хорошо, это ⇒⇒ НЕ repeat тысячи повторений добавления его в ваш манифест, но подсказка, которая основывается на этом, но дает вам дополнительное преимущество (и, возможно, некоторую справочную информацию).
Android имеет своего рода функцию перезаписи для src-Directory.
По умолчанию у вас есть
/ app / src / main
Но вы можете добавить дополнительные каталоги, чтобы перезаписать ваш AndroidManifest.xml. Вот как это работает:
- Создайте каталог / app / src / debug
- Внутри создайте AndroidManifest.xml
Внутри этого файла вам не нужно помещать все Правила внутри, а только те, которые вы хотите перезаписать из вашего / app / src / main / AndroidManifest.xml
Вот пример того, как выглядит запрошенное CLEARTEXT-разрешение:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yourappname">
<application
android:usesCleartextTraffic="true"
android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:allowBackup="false"
android:theme="@style/AppTheme">
</application>
</manifest>
Обладая этими знаниями, теперь вам легко, как 1,2,3, перегрузить ваши разрешения в зависимости от вашей отладки | главная | освободить окружающую среду.
Большая выгода от этого... у вас нет отладочных материалов в вашем производственном манифесте, и вы сохраняете простую и легкую в обслуживании структуру
У меня возникла та же проблема, и я попробовал все вышеперечисленные решения, но ни одно из них не помогло.
Для меня я решил это, изменив мой URL с HTTP на HTTPS;
Это работает!!!
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">***Your URL(ex: 127.0.0.1)***</domain>
</domain-config>
</network-security-config>
В предложении, приведенном выше, я указывал свой URL как http://xyz.abc.com/mno/
Я изменил это на xyz.abc.com, после чего он начал работать.
Это может быть полезно для кого-то.
У нас недавно была та же проблема для Android 9, но нам нужно было отображать только несколько URL-адресов в WebView, ничего особенного. Итак, добавление android:usesCleartextTraffic="true"
чтобы манифест работал, но мы не хотели ставить под угрозу безопасность всего приложения для этого. Так что исправление было в изменении ссылок с http
в https
Для проектов React Native
Это было уже исправлено на RN 0,59. Вы можете найти при обновлении diff с 0.58.6 до 0.59. Вы можете применить его без обновления версии RN, выполнив следующие действия:
Создать файлы:
android / app / src /debug/res/xml/react_native_config.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>
</network-security-config>
android / app / src /debug/AndroidManifest.xml -
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<application tools:targetApi="28"
tools:ignore="GoogleAppIndexingWarning"
android:networkSecurityConfig="@xml/react_native_config" />
</manifest>
Проверьте принятый ответ, чтобы узнать причину.
Я удалил эту строку из файла манифеста Android, который уже существует
android:networkSecurityConfig="@xml/network_security_config"
и добавил
android:usesCleartextTraffic="true"
это в теге приложения в манифесте
<application
android:usesCleartextTraffic="true"
android:allowBackup="true"
android:label="@string/app_name"
android:largeHeap="true"
android:supportsRtl="true"
android:theme="@style/AppTheme"
>
то эта ошибка HTTP-трафик Cleartext для overlay.openstreetmap.nl не разрешен для меня в android 9 и 10. Я надеюсь, что это сработает для android 8, также если вам поможет, не забудьте проголосовать
Простое и легкое решение [Xamarin Form]
Для Android
- Перейти к
Android Project
, затем нажмитеProperties
,
- открыто
AssemblyInfo.cs
и вставьте этот код прямо здесь:[assembly: Application(UsesCleartextTraffic =true)]
Для iOS
Использовать NSAppTransportSecurity
:
Вы должны установить NSAllowsArbitraryLoads
ключ к YES
под NSAppTransportSecurity
словарь в вашем info.plist
файл.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Добавление... android:usesCleartextTraffic="true" ... в ваш файл манифеста может показаться, чтобы решить проблему, но создает угрозу целостности данных.
По соображениям безопасности я использовал заполнители манифеста с android: usesCleartextTraffic внутри файла манифеста (как в Варианте 3 принятого ответа, то есть ответа @Hrishikesh Kadam), чтобы разрешить только открытый текст в среде отладки.
Внутри моего файла build.gradle(:app) я добавил заполнитель манифеста следующим образом:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
manifestPlaceholders.cleartextTrafficPermitted ="true"
}
}
Обратите внимание на имя заполнителя cleartextTrafficPermitted в этой строке выше
manifestPlaceholders.cleartextTrafficPermitted ="true"
Затем в своем манифесте Android я использовал тот же заполнитель...
AndroidManifest.xml -
<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:usesCleartextTraffic="${cleartextTrafficPermitted}"
...>
...
</application>
</manifest>
При этом трафик в открытом виде разрешен только в среде отладки.
Хорошо, я понял это. Это связано с параметром Manifest android:targetSandboxVersion="2"
, что я добавил, потому что у нас также есть версия Instant App - она должна быть уверена, что после перехода пользователя с Instant App на обычное приложение он не потеряет свои данные при передаче. Однако, как следует из смутного описания:
Определяет целевую песочницу, которую хочет использовать это приложение. Более высокие версии sanbox будут иметь повышенный уровень безопасности.
Значением по умолчанию для этого атрибута является 1.
Это, очевидно, также добавляет новый уровень политики безопасности, по крайней мере, на Android 8.
Я бы предложил добавить сетевые конфигурации dev и prod:
добавить res/xml/network_security_config_dev.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">10.0.2.2</domain>
</domain-config>
</network-security-config>
добавить res/xml/network_security_config_prod.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="false">
<domain includeSubdomains="true">yourdomain.com</domain>
</domain-config>
</network-security-config>
в Gradle Scripts (в студии Android) найдите build.gradle (android.app) и найдите buildTypes: выпуск и отладка (создайте, если не существует):
buildTypes {
release {
minifyEnabled false
manifestPlaceholders.securityConfig = "@xml/network_security_config_prod"
}
debug {
manifestPlaceholders.securityConfig = "@xml/network_security_config_dev"
}
}
в AndroidManifest.xml используйте заполнитель securityConfig следующим образом (который был определен в build.gradle):
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:networkSecurityConfig="${securityConfig}" <------- here
В файле манифеста добавьте это свойство следующим образом:
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:usesCleartextTraffic="true"
...>
...
</application>
</manifest>
Чтобы применить эти различные ответы к Xamarin.Android
, вы можете использовать атрибуты уровня класса и сборки вместо ручного редактирования AndroidManifest.xml
Разумеется, необходимо интернет-разрешение (дух..):
[assembly: UsesPermission(Android.Manifest.Permission.Internet)]
Примечание. Обычно атрибуты уровня сборки добавляются в AssemblyInfo.cs
файл, но любой файл, ниже using
и выше namespace
работает.
Затем в своем подклассе Application (при необходимости создайте его) вы можете добавить NetworkSecurityConfig
со ссылкой на Resources/xml/ZZZZ.xml
файл:
#if DEBUG
[Application(AllowBackup = false, Debuggable = true, NetworkSecurityConfig = "@xml/network_security_config")]
#else
[Application(AllowBackup = true, Debuggable = false, NetworkSecurityConfig = "@xml/network_security_config"))]
#endif
public class App : Application
{
public App(IntPtr javaReference, Android.Runtime.JniHandleOwnership transfer) : base(javaReference, transfer) { }
public App() { }
public override void OnCreate()
{
base.OnCreate();
}
}
Создайте файл в Resources/xml
папка (создайте xml
папка при необходимости).
пример xml/network_security_config
файл, отрегулируйте по мере необходимости (см. другие ответы)
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">www.example.com</domain>
<domain includeSubdomains="true">notsecure.com</domain>
<domain includeSubdomains="false">xxx.xxx.xxx</domain>
</domain-config>
</network-security-config>
Вы также можете использовать UsesCleartextTraffic
параметр на ApplicationAttribute
:
#if DEBUG
[Application(AllowBackup = false, Debuggable = true, UsesCleartextTraffic = true)]
#else
[Application(AllowBackup = true, Debuggable = false, UsesCleartextTraffic = true))]
#endif
В то время как рабочий ответ для меня был от @PabloCegarra:
<?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>
Вы можете получить предупреждение системы безопасности относительно cleartextTrafficPermitted="true"
Если вы знаете, что домены внесены в "белый список", вам следует смешать как принятый ответ, так и приведенный выше:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="false">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">books.google.com</domain>
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</domain-config>
</network-security-config>
Этот код у меня работает, но моему приложению нужно получать данные только с books.google.com. Таким образом исчезает предупреждение системы безопасности.
cleartext support is disabled by default.Android in 9 and above
Try This one I hope It will work fine
1 Step:-> add inside android build gradle (Module:App)
useLibrary 'org.apache.http.legacy'
android {
compileSdkVersion 28
useLibrary 'org.apache.http.legacy'
}
Затем 2 шага:-> манифест добавить внутри тега манифеста приложения
<application
android:networkSecurityConfig="@xml/network_security_config">//add drawable goto Step 4
// Step --->3 add to top this line
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
</application>
// Шаг 4->> Create Drawable>>Xml file>>name as>> 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>
</network-security-config>
Я также получил ту же ошибку "HTTP-трафик в незашифрованном виде запрещен" при разработке моего приложения. Я использую Retrofit2 для сетевых вызовов в моем приложении, и у меня есть две проектные среды (разработка и производство). Мой производственный домен имеет сертификат SSL с вызовами HTTPS, а у dev не будет https. Конфигурация добавлена в версии сборки. Но когда я перехожу на dev, эта проблема сработает. Поэтому я добавил ниже решение для этого.
Я добавил открытый трафик в манифест
android:usesCleartextTraffic="true"
Затем я добавил спецификацию соединения во время создания класса конфигурации OKHttp.
.connectionSpecs(CollectionsKt.listOf(ConnectionSpec.MODERN_TLS, ConnectionSpec.CLEARTEXT))
Полное создание OkHttpClient приведено ниже
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(10, TimeUnit.SECONDS)
.connectTimeout(10, TimeUnit.SECONDS)
.cache(null)
.connectionSpecs(CollectionsKt.listOf(ConnectionSpec.MODERN_TLS, ConnectionSpec.CLEARTEXT))
.addInterceptor(new NetworkInterceptor(context))
.addInterceptor(createLoggingInterceptor())
.addInterceptor(createSessionExpiryInterceptor())
.addInterceptor(createContextHeaderInterceptor())
.build();
Обновление декабрь 2019 ionic - 4.7.1
<manifest xmlns:tools=“http://schemas.android.com/tools”>
<application android:usesCleartextTraffic=“true” tools:targetApi=“28”>
Добавьте приведенное выше содержимое в XML-файл манифеста Android.
Предыдущие версии ionic
Убедитесь, что в вашем
config.xml
в Ionic Project:<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android"> <application android:networkSecurityConfig="@xml/network_security_config" /> <application android:usesCleartextTraffic="true" /> </edit-config>
Запускаем ionic Cordova build android. Он создает папку Android под платформами
Откройте Android Studio и откройте папку Android, присутствующую в нашем проекте project-platform-android. Оставьте его на несколько минут, чтобы он построил градиент
После
gradle build
закончено, мы получаем несколько ошибок для включенияminSdVersion
вmanifest.xml
. Теперь мы просто удалим<uses-sdk android:minSdkVersion="19" />
отmanifest.xml
.Убедитесь, что он удален из обоих мест:
- приложение → манифесты →
AndroidManifest.xml
. - CordovaLib → манифесты →
AndroidManifest.xml
.
Теперь попробуйте снова построить градиент, и теперь он успешно строится
- приложение → манифесты →
Убедитесь, что у вас есть следующее в теге приложения в приложении → манифест →
Androidmanifest.xml
:<application android:networkSecurityConfig="@xml/network_security_config" android:usesCleartextTraffic="true" >
открыто
network_security_config
(приложение → res → xml →network_security_config.xml
).Добавьте следующий код:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">xxx.yyyy.com</domain> </domain-config> </network-security-config>
Вот 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 ->
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">192.168.0.101</domain>
</domain-config>
</network-security-config>
Откройте AndroidManifests.xml:
android:usesCleartextTraffic="true" //Add this line in your manifests
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:usesCleartextTraffic="true"
android:theme="@style/AppTheme">
В следующем примере разрешен трафик открытым текстом во всех доменах. Ключ к этому <base-config cleartextTrafficPermitted="true"/>
все остальное просто для контекста.
<network-security-config>
<base-config cleartextTrafficPermitted="true"/>
<debug-overrides>
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:networkSecurityConfig="@xml/network_security_config"
...>
...
</application>
</manifest>
Поместите следующее в свой resources/android/xml/network_security_config.xml
:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
Это решает Failed to load resource: net::ERR_CLEARTEXT_NOT_PERMITTED
проблема на Android для Cordova / Ionic.
Добавьте это свойство только в манифесты вашего приложения
<application
.
android:usesCleartextTraffic="true"
.
>
</application>
Просто добавьте android:usesCleartextTraffic="true" в файл AndroidManifest.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 или любую другую форму безопасного обмена данными, вы можете использовать этот ответ, но, опять же, это не рекомендуется, так как это противоречит цели этого столь необходимого функция безопасности.
videoView не может открыть это видео Онлайн-видео
Создайте файл res / 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>
</network-security-config>
Новое в файле AndroidManifest.xml в приложении:
android:networkSecurityConfig="@xml/network_security_config"
https://techprogrammingideas.blogspot.com/2021/02/android-code-for-displaying-video-with.html
https://youtu.be/90hWWAqfdUU
Я использую Cordova 8 с cordova-plugin-whitelist 1.3.4, и это конфигурация по умолчанию, у моего приложения нет доступа к Интернету, и я только добавляю параметр в manifest.xml -> android:usesCleartextTraffic = "true"
Путь к mainfest изменился в Cordova 8: platform/android/app/src/main/AndroidManifest.xml.
<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="10000" android:versionName="1.0.0" package="io.cordova.hellocordova" xmlns:android="http://schemas.android.com/apk/res/android">
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
<application
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:usesCleartextTraffic="true">
<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize">
<intent-filter android:label="@string/launcher_name">
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>
это действительно глупо, потому что очевидно, что вашему приложению нужен доступ в Интернет....
Для разработчиков Xamarin.Android убедитесь, что для реализации HttpClient и SSL/TLS установлено значение По умолчанию.
Его можно найти в разделе "Параметры Andorid" -> "Дополнительные параметры Android".
В моем случае этот URL также не работает в браузере.
Я проверяю с https://www.google.com/
webView.loadUrl("https://www.google.com/")
И это сработало для меня.