Почему после обновления до Cordova Android 8 появляются ошибки net :: ERR_CLEARTEXT_NOT_PERMITTED?

После обновления до Cordova Android 8.0 я вижу ошибки net::ERR_CLEARTEXT_NOT_PERMITTED при попытке подключиться к целям http://.

Почему это так и как я могу решить это?

Ответ 1

Уровень 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">

Ответ 2

В 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 исключена ошибка: несвязанный префикс. будет появляться

Ответ 3

Для решения проблемы существует другой вариант. в файловых ресурсах /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, но если у вас есть домен. просто добавьте домен.

Ответ 4

Добавление следующего атрибута в открывающий тег <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">

Ответ 5

Открытый текст здесь представляет незашифрованную информацию. Начиная с 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...

Это должно работать сейчас.

Ответ 6

Старый ионный Cli (4.2) был причиной проблемы в моем случае, обновление до 5 решить проблему

Ответ 7

Вы должны добавить

<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>

Ответ 8

Для людей, которые все еще не могут найти решение, вы можете проверить подробное объяснение по ссылке ниже, и оно отлично работает для меня. :)

fooobar.com/questions/17705214/...

Ответ 9

Я столкнулся с этой проблемой, но я глуп. Не думаю, что вы могли бы предоставить шаг за шагом, как исправить или указать мне в направлении одного, пожалуйста?

Ответ 10

Что может сделать человек, который не понимает вышеприведенных объяснений, по поводу этой проблемы? У меня Galaxy Note 9 с Android 9.

Ответ 11

Я бы посоветовал вам воспользоваться этой возможностью для обновления до 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/