Après la mise à niveau vers Cordova Android 8.0 , je vois des net::ERR_CLEARTEXT_NOT_PERMITTED
erreurs lorsque je tente de me connecter à des http://
cibles.
Pourquoi cela et comment puis-je résoudre ce problème?
Après la mise à niveau vers Cordova Android 8.0 , je vois des net::ERR_CLEARTEXT_NOT_PERMITTED
erreurs lorsque je tente de me connecter à des http://
cibles.
Pourquoi cela et comment puis-je résoudre ce problème?
Réponses:
Le niveau d'API par défaut de la plate-forme Android Cordova a été mis à niveau. Sur un appareil Android 9, la communication en texte clair est désormais désactivée par défaut .
Pour autoriser à nouveau la communication en texte clair, définissez android:usesCleartextTraffic
sur votre application
balise sur true
:
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:usesCleartextTraffic="true" />
</edit-config>
</platform>
Comme indiqué dans les commentaires, si vous n'avez pas défini l' android
espace de noms XML précédemment, vous recevrez un error: unbound prefix
pendant la construction. Cela indique que vous devez l'ajouter à votre widget
balise de la même manière config.xml
, comme suit:
<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
dans votre projet Android?
Il y a deux choses à corriger dans config.xml Donc la bonne réponse devrait être d'ajouter le 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">
plus éditer la configuration pour permettre:
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:usesCleartextTraffic="true" />
</edit-config>
</platform>
Si l'étape 1 est évitée, erreur: préfixe non lié. apparaîtra
Cleartext représente ici des informations non cryptées. Depuis Android 9, il est recommandé aux applications d'appeler les API HTTPS pour s'assurer qu'aucune veille ne tombe.
Cependant, si nous devons encore appeler des API HTTP, nous pouvons faire ce qui suit:
Plateforme: Ionic 4
Créez un fichier nommé: network_security_config.xml sous project-root / resources / android / xml
Ajoutez les lignes suivantes:
<?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>
Maintenant dans project-root / config.xml , mettez à jour les lignes suivantes:
<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...
Cela devrait fonctionner maintenant.
config.xml
avant la edit-config
balise: <resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
. Merci!
Pour résoudre le problème, il existe une autre option. dans le fichier resources / android / xml / network_security_config.xml. insérer:
<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>
Im mon cas j'utilise l'adresse IP alors base-config est nécessaire, mais si vous avez un domaine. ajoutez simplement le domaine.
J'ai moi-même rencontré ce problème aujourd'hui et j'ai trouvé un plugin vraiment astucieux qui vous évitera d'avoir à essayer d'autoriser manuellement le trafic en texte clair dans Android 9+ pour votre application Apache Cordova. Installez simplement cordova-plugin-cleartext, et le plugin devrait s'occuper de tout ce qui se passe derrière Android pour vous.
$ cordova plugin add cordova-plugin-cleartext
$ cordova prepare
$ cordova run android
Après quelques jours de lutte, cela fonctionne pour moi, et j'espère que cela fonctionne également pour vous.
ajoutez ceci à votre CONFIG.XML , en haut de votre code.
<access origin="*" />
<allow-navigation href="*" />
et ce, sous la plate-forme 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" />
ajoutez le code suivant à ce fichier "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
balises étaient le dernier composant pour faire fonctionner tous les autres éléments.
L'ajout de l'attribut suivant dans la balise d'ouverture <widget> a fonctionné pour moi. Recharge simple et en direct correctement sur un émulateur 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
code à partir de la réponse acceptée (fixe l' unbound prefix
erreur)
tu devrais ajouter
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
à
resources / android / xml / network_security_config.xml
comme ça
<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>
Voici la solution qui a fonctionné pour moi. Les fichiers que j'ai mis à jour sont les suivants:
Les modifications apportées aux fichiers correspondants sont les suivantes:
1. config.xml
J'ai ajouté une <application android:usesCleartextTraffic="true" />
balise dans la <edit-config>
balise dans le fichier 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
Dans ce fichier, j'ai ajouté 2 <domain>
balises dans la <domain-config>
balise, le domaine principal et un sous-domaine selon les exigences de mon projet
<?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>
Merci @Ashutosh pour votre aide.
J'espère que ça aide.
J'utilise IONIC 5.4.13, cordova 9.0.0 (cordova-lib@9.0.1)
Je répète peut-être des informations, mais pour moi, un problème a commencé à apparaître après l'ajout d'un plugin (pas encore sûr). J'ai essayé toutes les combinaisons ci-dessus, mais rien n'a fonctionné. Il n'a commencé à fonctionner qu'après avoir ajouté:
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
déposer dans le projet à
resources / android / xml / network_security_config.xml
donc mon fichier network_security_config.xml ressemble maintenant à:
<?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>
Merci à tous.
L'ancien cli ionique (4.2) causait un problème dans mon cas, la mise à jour à 5 résout le problème
Nous utilisons le cordova-custom-config
plugin pour gérer notre configuration Android. Dans ce cas, la solution était d'ajouter un nouveau custom-preference
à notre 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>
Est-ce que quelqu'un sait comment faire cela uniquement pour les versions de développement? Je serais heureux que les versions de version quittent ce paramètre false
.
(Je vois les offres de configuration iOS buildType="debug"
pour cela, mais je ne suis pas sûr que cela s'applique à la configuration Android.)
@Der Hochstapler merci pour la solution.
mais dans IONIC 4, une certaine personnalisation dans le projet config.xml fonctionne pour moi
Ajouter une ligne dans la balise 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">
après, dans la balise pour la plate - forme Android customize certaines lignes vérifier ci - dessous
ajouter usesCleartextTraffic = true après networkSecurityConfig et -fichier de ressources balises
<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>
Dans un projet de condensateur Ionic 4, lorsque j'ai emballé et déployé sur un téléphone Android pour les tests, j'ai eu cette erreur. Résolu en réinstallant le condensateur et en mettant à jour la plate-forme 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
Si vous avez un framework Legacy Cordova ayant des problèmes avec la commande NPM et Cordova. Je suggérerais l'option ci-dessous.
Créer le fichier 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 solution suivante a fonctionné pour moi-
goto resources/android/xml/network_security_config.xml
Changez-le en-
<?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>
Ajoutez simplement cette ligne au fichier plates-formes / 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.
) lors de la création de mon application Cordova. La solution était d'ajouter dans monconfig.xml
fichier, dans l'<widget>
élément my root l'attributxmlns:android="http://schemas.android.com/apk/res/android