Dopo l'aggiornamento a Cordova Android 8.0 , vengono visualizzati net::ERR_CLEARTEXT_NOT_PERMITTED
errori durante il tentativo di connessione alle http://
destinazioni.
Perché e come posso risolverlo?
Dopo l'aggiornamento a Cordova Android 8.0 , vengono visualizzati net::ERR_CLEARTEXT_NOT_PERMITTED
errori durante il tentativo di connessione alle http://
destinazioni.
Perché e come posso risolverlo?
Risposte:
Il livello API predefinito nella piattaforma Android Cordova è stato aggiornato. Su un dispositivo Android 9, la comunicazione in chiaro è ora disabilitata per impostazione predefinita .
Per consentire nuovamente la comunicazione con testo in chiaro, imposta il tag android:usesCleartextTraffic
sul application
tag su true
:
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:usesCleartextTraffic="true" />
</edit-config>
</platform>
Come notato nei commenti, se non hai definito lo android
spazio dei nomi XML in precedenza, riceverai un messaggio error: unbound prefix
durante la compilazione. Questo indica che devi aggiungerlo al tuo widget
tag nello stesso modo config.xml
, in questo modo:
<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
nel tuo progetto Android?
Ci sono due cose da correggere in config.xml Quindi la risposta giusta dovrebbe essere l'aggiunta di xml: 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">
oltre a modificare la configurazione per consentire:
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:usesCleartextTraffic="true" />
</edit-config>
</platform>
Se si evita il passaggio 1 errore: prefisso non associato. apparirà
Il testo in chiaro qui rappresenta informazioni non crittografate. A partire da Android 9, si consiglia alle app di chiamare le API HTTPS per assicurarsi che non si verifichino perdite.
Tuttavia, se dobbiamo ancora chiamare le API HTTP, possiamo fare quanto segue:
Piattaforma: Ionic 4
Crea un file denominato: network_security_config.xml in project-root / resources / android / xml
Aggiungi le seguenti righe:
<?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>
Ora in project-root / config.xml , aggiorna le seguenti righe:
<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...
Ora dovrebbe funzionare.
config.xml
prima del edit-config
tag: <resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
. Grazie!
Per risolvere il problema c'è un'altra opzione. in risorse file / android / xml / network_security_config.xml. inserire:
<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>
Nel mio caso sto usando l'indirizzo IP, quindi è necessario base-config, ma se hai un dominio. basta aggiungere il dominio.
Oggi mi sono imbattuto in questo problema e ho trovato un plug-in davvero ingegnoso che ti eviterà il fastidio di provare a consentire manualmente il traffico di testo in chiaro in Android 9+ per la tua applicazione Apache Cordova. Installa semplicemente cordova-plugin-cleartext e il plug-in dovrebbe occuparsi di tutte le cose Android dietro le quinte per te.
$ cordova plugin add cordova-plugin-cleartext
$ cordova prepare
$ cordova run android
Dopo alcuni giorni di lotta, questo funziona per me, e spero che funzioni anche per te.
aggiungilo al tuo CONFIG.XML , all'inizio del tuo codice.
<access origin="*" />
<allow-navigation href="*" />
e questo, sotto la piattaforma 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" />
aggiungi il codice seguente a questo file "resources / 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
tag fossero il componente finale per far funzionare tutto il resto.
L'aggiunta del seguente attributo all'interno del tag di apertura <widget> ha funzionato per me. Ricariche semplici e live correttamente su un emulatore 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
codice della risposta accettata (fissa unbound prefix
l'errore)
dovresti aggiungere
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
per
risorse / android / xml / network_security_config.xml
come questo
<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>
Di seguito è la soluzione che ha funzionato per me. I file che ho aggiornato sono i seguenti:
Le modifiche nei file corrispondenti sono le seguenti:
1. config.xml
Ho aggiunto un <application android:usesCleartextTraffic="true" />
tag all'interno del <edit-config>
tag nel file 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
In questo file ho aggiunto 2 <domain>
tag all'interno di <domain-config>
tag, il dominio principale e un sottodominio secondo i requisiti del mio progetto
<?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>
Grazie @Ashutosh per aver fornito l'aiuto.
Spero che sia d'aiuto.
Sto usando IONIC 5.4.13, cordova 9.0.0 (cordova-lib@9.0.1)
Potrei ripetere le informazioni, ma per me il problema è iniziato a comparire dopo aver aggiunto alcuni plug-in (non ancora sicuro). Ho provato tutte le combinazioni di cui sopra, ma niente ha funzionato. Ha iniziato a funzionare solo dopo aver aggiunto:
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
per archiviare nel progetto in
risorse / android / xml / network_security_config.xml
quindi il mio file network_security_config.xml ora ha il seguente aspetto:
<?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>
Grazie a tutti.
Il vecchio cli ionico (4.2) stava causando problemi nel mio caso, l'aggiornamento a 5 risolve il problema
Stiamo usando il cordova-custom-config
plugin per gestire la nostra configurazione Android. In questo caso la soluzione è stata quella di aggiungere un nuovo custom-preference
al nostro 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>
Qualcuno sa come farlo solo per build di sviluppo? Sarei felice che le build di rilascio abbandonassero questa impostazione false
.
(Vedo le offerte di configurazione iOS buildType="debug"
per questo, ma non sono sicuro che ciò si applichi alla configurazione Android.)
@Der Hochstapler grazie per la soluzione.
ma in IONIC 4 alcune personalizzazioni nel progetto config.xml funzionano per me
Aggiungi una riga nel tag Widget
<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">
dopodiché, nel tag Platform per Android personalizza alcune righe controlla di seguito
aggiungi usesCleartextTraffic = true dopo i tag networkSecurityConfig e dei file di risorse
<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>
In un progetto di condensatore Ionic 4, quando ho impacchettato e distribuito su un telefono Android per il test ho ricevuto questo errore. Risolto reinstallando il condensatore e aggiornando la piattaforma 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
Se si dispone di un framework Cordova precedente che presenta problemi con NPM e il comando Cordova. Suggerirei l'opzione di seguito.
Crea file 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>
La seguente soluzione ha funzionato per me-
goto resources/android/xml/network_security_config.xml
Cambialo in-
<?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>
Basta aggiungere questa riga al file piattaforme / 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.
) durante il tentativo di creare la mia applicazione Cordova. La soluzione era aggiungere nel mioconfig.xml
file, nel mio<widget>
elemento root l'attributoxmlns:android="http://schemas.android.com/apk/res/android