После обновления до Cordova Android 8.0 я вижу ошибки net::ERR_CLEARTEXT_NOT_PERMITTED
при попытке подключиться к целям http://
.
Почему это так и как я могу решить это?
После обновления до Cordova Android 8.0 я вижу ошибки net::ERR_CLEARTEXT_NOT_PERMITTED
при попытке подключиться к целям http://
.
Почему это так и как я могу решить это?
Уровень API по умолчанию на платформе Cordova Android был обновлен. На устройстве Android 9 обмен текстовыми сообщениями теперь отключен по умолчанию.
Чтобы снова разрешить общение в открытом тексте, установите для android:usesCleartextTraffic
тега application
значение true
:
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:usesCleartextTraffic="true" />
</edit-config>
</platform>
Как отмечалось в комментариях, если вы ранее не определили пространство имен XML android
, вы получите сообщение error: unbound prefix
во время сборки. Это указывает на то, что вам нужно добавить его в тег widget
в том же config.xml
, например:
<widget id="you-app-id" version="1.2.3"
xmlns="http://www.w3.org/ns/widgets"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:cdv="http://cordova.apache.org/ns/1.0">
В config.xml нужно исправить две вещи, поэтому правильным ответом будет добавление xmls: android:
<widget id="com.my.awesomeapp" version="1.0.0"
xmlns="http://www.w3.org/ns/widgets"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:cdv="http://cordova.apache.org/ns/1.0">
плюс редактирование конфигурации, чтобы позволить:
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:usesCleartextTraffic="true" />
</edit-config>
</platform>
Если на шаге 1 исключена ошибка: несвязанный префикс. будет появляться
Для решения проблемы существует другой вариант. в файловых ресурсах /android/xml/network_security_config.xml. вставить:
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<domain-config cleartextTrafficPermitted="true">
<domain>localhost</domain>
<domain includeSubdomains="true">192.168.7.213:8733</domain>
</domain-config>
</network-security-config>
В моем случае я использую IP-адрес, тогда необходим base-config, но если у вас есть домен. просто добавьте домен.
Добавление следующего атрибута в открывающий тег <widget> сработало для меня. Простая и корректная перезагрузка на эмуляторе Android 9. XMLNS: андроид = "http://schemas.android.com/apk/res/android"
<widget id="com.my.awesomeapp" version="1.0.0"
xmlns="http://www.w3.org/ns/widgets"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:cdv="http://cordova.apache.org/ns/1.0">
Открытый текст здесь представляет незашифрованную информацию. Начиная с Android 9, приложения должны вызывать API-интерфейсы HTTPS, чтобы убедиться, что они выпадают накануне.
Однако, если нам все еще нужно вызывать HTTP API, мы можем сделать следующее:
Платформа: Ионная 4
Создайте файл с именем: network_security_config.xml в корневом каталоге проекта /resources/android/xml
Добавьте следующие строки:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain>ip-or-domain-name</domain>
</domain-config>
</network-security-config>
Теперь в project-root/config.xml обновите следующие строки:
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
<application android:usesCleartextTraffic="true" />
<application android:networkSecurityConfig="@xml/network_security_config" />
</edit-config>
... other statements...
Это должно работать сейчас.
Старый ионный Cli (4.2) был причиной проблемы в моем случае, обновление до 5 решить проблему
Вы должны добавить
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
отдо
resources/android/xml/network_security_config.xml
как это
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
</domain-config> </network-security-config>
Для людей, которые все еще не могут найти решение, вы можете проверить подробное объяснение по ссылке ниже, и оно отлично работает для меня. :)
Я столкнулся с этой проблемой, но я глуп. Не думаю, что вы могли бы предоставить шаг за шагом, как исправить или указать мне в направлении одного, пожалуйста?
Что может сделать человек, который не понимает вышеприведенных объяснений, по поводу этой проблемы? У меня Galaxy Note 9 с Android 9.
Я бы посоветовал вам воспользоваться этой возможностью для обновления до HTTPS (SSL). Этим вечером я столкнулся с той же проблемой, и теперь я обновился до HTTPS; без затрат. Да, я получил HTTPS все отсортировано за 30 минут без каких-либо дополнительных затрат.
Вот почему HTTPS имеет значение:
https://developers.google.com/web/fundamentals/security/encrypt-in-transit/why-https
А вот как получить его бесплатно:
Провайдер: https://letsencrypt.org/
Инструменты: https://certbot.eff.org/