Після оновлення до 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>
Як зазначається в коментарях, якщо ви раніше не визначали android
простір імен XML, ви отримаєте 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">
AndroidManifest.xml
проект Android було внесено зміни ?
У 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 уникнути помилки: незв’язаний префікс. з'явиться
Cleartext тут представляє незашифровану інформацію. Починаючи з Android 9, додатки рекомендують викликати HTTPS API, щоб переконатися, що немає перерв напередодні.
Однак якщо нам все-таки потрібно викликати API HTTP, ми можемо зробити наступне:
Платформа: Ionic 4
Створіть файл з назвою: network_security_config.xml у проекті-root / ресурси / 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...
Це має працювати зараз.
config.xml
перед edit-config
тегом: <resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
. Дякую!
Для вирішення проблеми є інший варіант. у файлових ресурсах / 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, але якщо у вас є домен. просто додайте домен.
Я сьогодні зіткнувся з цією проблемою і знайшов дійсно чудовий плагін, який позбавить вас від клопотів намагатися вручну дозволити трафік ясного тексту в Android 9+ для вашого додатка Apache Cordova. Просто встановіть cordova-plugin-cleartext, і плагін повинен піклуватися про всі позаду сцени Android для вас.
$ cordova plugin add cordova-plugin-cleartext
$ cordova prepare
$ cordova run android
Після декількох днів боротьби це працює для мене, і я сподіваюся, що це працює і для вас.
додайте це до CONFIG.XML вгорі коду.
<access origin="*" />
<allow-navigation href="*" />
і це, під платформою 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>
<resource-file src="resources/android/xml/network_security_config.xml"
target="app/src/main/res/xml/network_security_config.xml" />
додати наступний код у цей файл "ресурси / android / 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">localhost</domain>
<domain includeSubdomains="true">YOUR DOMAIN HERE/IP</domain>
</domain-config>
</network-security-config>
trust-anchors
теги є останнім компонентом для роботи всіх інших матеріалів.
Додавання наступного атрибута в тег відкриття <віджет> працював на мене. Прості та живі перезавантаження правильно на емуляторі Android 9. xmlns: android = "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">
edit-config
коду з прийнятого відповіді (виправляє unbound prefix
помилку)
ви повинні додати
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
до
ресурси / 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>
Далі йде рішення, яке працювало для мене. Файли, які я оновив, такі:
Зміни у відповідних файлах такі:
1. config.xml
Я додав <application android:usesCleartextTraffic="true" />
тег до <edit-config>
тегу у файл 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>
...
<platform name="android">
2. network_security_config.xml
У цей файл я додав 2 <domain>
тегу в <domain-config>
тег, основний домен та піддомен відповідно до моєї вимоги проекту
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">mywebsite.in</domain>
<domain includeSubdomains="true">api.mywebsite.in</domain>
</domain-config>
</network-security-config>
Дякуємо @Ashutosh за надану допомогу.
Сподіваюся, це допомагає.
Я використовую IONIC 5.4.13, cordova 9.0.0 (cordova-lib@9.0.1)
Я можу повторювати інформацію, але для мене проблема почала з’являтися після додавання плагіна (ще не впевнений). Я спробував всі вищезгадані комбінації, але нічого не вийшло. Він почав працювати лише після додавання:
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
подати в проект на
ресурси / android / 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>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
<domain includeSubdomains="true">10.1.25.10</domain>
</domain-config>
</network-security-config>
Дякую всім.
Старий іонний кліп (4.2) викликав проблему в моєму випадку, оновлення до 5 вирішило проблему
Ми використовуємо cordova-custom-config
плагін для управління нашою конфігурацією Android. У цьому випадку рішенням було додати нове custom-preference
до нашого config.xml
:
<platform name="android">
<preference name="orientation" value="portrait" />
<!-- ... other settings ... -->
<!-- Allow http connections (by default Android only allows https) -->
<!-- See: /programming/54752716/ -->
<custom-preference
name="android-manifest/application/@android:usesCleartextTraffic"
value="true" />
</platform>
Хтось знає, як це зробити тільки для розвитку розвитку? Я би радий, що версії версії залишають цей параметр false
.
(Я бачу пропозиції конфігурації iOS buildType="debug"
для цього, але не впевнений, чи стосується це конфігурація Android.)
@Der Hochstapler дякую за рішення.
але в IONIC 4 для мене працює деяка настройка в проект config.xml
Додайте рядок у тег віджетів
<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 для android налаштуйте деякі рядки, перевірте нижче,
додайте UseCleartextTraffic = true після networkSecurityConfig та resource-file теги
<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:networkSecurityConfig="@xml/network_security_config" />
</edit-config>
<resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
<edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:usesCleartextTraffic="true" />
</edit-config>
</platform>
У проекті конденсаторів Ionic 4, коли я упаковував та розгортав на андроїд телефон для тестування, я отримав цю помилку. Вирішено шляхом перевстановлення конденсатора та оновлення платформи Android.
npm run build --prod --release
npx cap copy
npm install --save @capacitor/core @capacitor/cli
npx cap init
npx cap update android
npx cap open android
Якщо у вас є Legacy Cordova, що має проблеми з командою NPM та Cordova. Я б запропонував нижченаведений варіант.
Створіть файл android / res / xml / network_security_config.xml -
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
<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>
Наступне рішення працювало для мене-
goto resources/android/xml/network_security_config.xml
Змінити його на -
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
<domain includeSubdomains="true">api.example.com(to be adjusted)</domain>
</domain-config>
</network-security-config>
Просто додайте цей рядок у файл платформ / android / app / src / main / AndroidManifest.xml
<application android: hardwareAccelerated = "true" android: icon = "@ mipmap / ic_launcher" android: label = "@ string / app_name" android: supportsRtl = "true" android: usesCleartextTraffic = "true" >
error: unbound prefix.
час спроби скласти свою програму Cordova я зіткнувся з помилкою ( ). Рішення полягало в тому, щоб додатиconfig.xml
до мого кореневого<widget>
елемента атрибутxmlns:android="http://schemas.android.com/apk/res/android