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

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

Der Hochstapler

Ответов: 19

Ответы (19)

Уровень API по умолчанию в платформе Cordova Android был обновлен. На устройстве Android 9 обмен текстовыми сообщениями теперь отключен по умолчанию.

Чтобы снова разрешить обмен открытым текстом, установите для тега android: usesCleartextTraffic в вашем приложении значение true:


  
      
  

Как отмечено в комментариях, если вы ранее не определили пространство имен android XML, вы получите сообщение об ошибке : несвязанный префикс во время сборки. Это означает, что вам нужно добавить его в свой тег widget в том же config.xml, например:


После нескольких дней борьбы это сработало для меня, и я надеюсь, что это сработает и для вас.

добавьте это в свой CONFIG.XML, в начало вашего кода.



и это, под платформу android.


     
     
 
 

добавьте в этот файл следующий код "resources / android / xml / network_security_config.xml".



    
        
            
        
    
    
        localhost
        YOUR DOMAIN HERE/IP
    

enter image description here

enter image description here

Ниже приводится решение, которое сработало для меня. Я обновил следующие файлы:

  1. config.xml (полный путь: /config.xml )
  2. network_security_config.xml (полный путь: /resources/android/xml/network_security_config.xml)

Изменения в соответствующих файлах следующие:

1. config.xml

Я добавил тег в тег в файле config.xml


    
        
        
    
    ...

2. network_security_config.xml

В этом файле я добавил 2 тег в тег , основной домен и поддомен в соответствии с требованиями моего проекта



    
        mywebsite.in
        api.mywebsite.in
    

Спасибо @Ashutosh за помощь.

Надеюсь, это поможет.

Я использую IONIC 5.4.13, cordova 9.0.0 (cordova-lib@9.0.1)

Возможно, я повторяю информацию, но для меня проблема стала появляться после добавления какого-либо плагина (пока не уверен). Я пробовал все вышеперечисленные комбинации, но ничего не помогло. Он начал работать только после добавления:

   
       
           
       
   

в файл проекта по адресу

ресурсы / android / xml / network_security_config.xml

, поэтому мой файл network_security_config.xml теперь выглядит так:



   
       
           
       
   
    
        localhost
        10.1.25.10
    

Всем спасибо.

Если у вас есть устаревшая структура Cordova, имеющая проблемы с NPM и командой Cordova. Я бы предложил вариант ниже.

Создать файл android / res / xml / network_security_config.xml -

    
    
    
    
        Your URL(ex: 127.0.0.1)
    
    

AndroidManifest.xml -

    
    
        
        
            ...
        
    

После прочтения всего обсуждения ищет способ авторизовать связь со всеми IP-адресами, так как в моем случае IP-адрес, на который будет отправлен запрос, определяется пользователем во входном тексте и не может быть определен в конфигурации файл. Вот как я решил проблему

вот конфигурация

config.xml


...
        
            
        
        
...

ресурсы / android / xml / network_security_config.xml



    

Самый важный фрагмент кода: в вместо domain-config

Я запускаю Ionic 5 с Vue и Capacitor 3 и получаю эту ошибку, используя InAppBrowser для веб-сайта, который не поддерживает https. Для приложений Capacitor config.xml не используется, а AndroidManifest.xml редактируется напрямую.

Сначала создайте здесь файл конфигурации сетевой безопасности YOUR_IONIC_APP_ROOT \ android \ app \ main \ res \ xml \ network_security_config.xml.


<конфигурация-безопасности-сети>
   
        <домен>www.example.com
   

Затем отредактируйте YOUR_IONIC_APP_ROOT \ android \ app \ main \ AndroidManifest.xml добавив android: networkSecurityConfig = "@ xml / network_security_config" в application.




    <приложение
        android: allowBackup = "true"
        android: icon = "@ mipmap / ic_launcher"
        android: label = "@ строка / имя_приложения"
        
        android: networkSecurityConfig = "@ xml / network_security_config"

        android: roundIcon = "@ mipmap / ic_launcher_round"
        android: supportsRtl = "true"
        android: theme = "@ style / AppTheme">
        
    
    

Просто добавьте эту строку в файл platform / android / app / src / main / AndroidManifest.xml


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

Сегодня я сам столкнулся с этой проблемой и нашел действительно отличный плагин, который избавит вас от хлопот вручную разрешить трафик в открытом виде в Android 9+ для вашего приложения Apache Cordova. Просто установите cordova-plugin-cleartext, и этот плагин позаботится обо всем, что происходит за кулисами Android.

$ cordova plugin add cordova-plugin-cleartext
$ cordova prepare
$ cordova run android

Для решения проблемы есть другой вариант. в файле resources / android / xml / network_security_config.xml. вставить:


   
       
           
       
   
    
        localhost
        192.168.7.213:8733
    

В моем случае я использую IP-адрес, тогда необходима базовая конфигурация, но если у вас есть домен. просто добавьте домен.

Для меня сработало следующее решение -

перейти ресурсы / android / xml / network_security_config.xml Измените его на-



    
        localhost
        api.example.com(to be adjusted)
    

In an Ionic 4 capacitor project, when I packaged and deployed to android phone for testing I got this error. Resolved by re-installing capacitor and updating android platform.

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

@ Der Hochstapler спасибо за решение.
но в IONIC 4 некоторые настройки в проекте config.xml работают для меня

Добавить строку в тег Widget


после этого в теге Platform для android настройте несколько строк, проверьте ниже
добавить usesCleartextTraffic = true после networkSecurityConfig и ресурс-файл теги

 
        
            
        
        
        
            
        
    

В config.xml нужно исправить две вещи Итак, правильным ответом должно быть добавление xmls: android:


плюс редактирование конфигурации, чтобы разрешить:


  
      
  

Если шаг 1 избежать, ошибка: несвязанный префикс. появится

следует добавить


    
        
    

От

до

ресурсы / android / xml / network_security_config.xml

вот так



    
        
    



    localhost
 

Мы используем плагин cordova-custom-config для управления нашей конфигурацией Android. В этом случае решение заключалось в добавлении нового пользовательских настроек в наш config.xml:

    

        

        

        
        
        

    

Does anybody know how to do this only for development builds? I would be happy for release builds to leave this setting false.

(я вижу, что конфигурация iOS предлагает для этого buildType = "debug", но я не уверен, применимо ли это к конфигурации Android.)

Adding the following attribute within the opening < widget > tag worked for me. Simple and live reloads correctly on a Android 9 emulator. xmlns:android="http://schemas.android.com/apk/res/android"


Открытый текст здесь представляет собой незашифрованную информацию. Начиная с Android 9, рекомендуется, чтобы приложения вызывали API-интерфейсы HTTPS, чтобы убедиться в отсутствии сбоев.

Однако, если нам все еще нужно вызывать HTTP API, мы можем сделать следующее:

Платформа: Ionic 4

Создайте файл с именем: network_security_config.xml в project-root / resources / android / xml

Добавьте следующие строки:



   
     ip-or-domain-name
   

Теперь в project-root / config.xmlобновите следующие строки:


    
        
        
    
    ... other statements...

Теперь должно работать.

2022 WebDevInsider