Non classé

Application Cordova Ionic : Http ne fonctionne pas avec Android 9 et plus

Je développe une application avec IONIC 4.0 (Angular). L’application fonctionne parfaitement lorsque j’exécute le fichier APK dans Android Orio (8.0). Mais malheureusement, cela montre le problème suivant lorsque je me connecte à Android PIE (9.0).

Cela est dû à cette politique à partir d’Android 9 : https://developer.android.com/training/articles/security-config.html#CleartextTrafficPermitted

Les applications qui ont l’intention de se connecter à des destinations en utilisant uniquement des connexions sécurisées peuvent refuser la prise en charge du texte en clair (en utilisant le protocole HTTP non chiffré au lieu de HTTPS) vers ces destinations. Remarque: les conseils de cette section s’appliquent uniquement aux applications qui ciblent Android 8.1 (niveau d’API 27) ou inférieur. À partir d’Android 9 (niveau d’API 28), la prise en charge du texte clair est désactivée par défaut.

Solution 1

Remplacez tous les appels http par des URL https.

Solution 2

Forcer HTTP (non sécurisé)

Si vous avez vraiment besoin d’autoriser le trafic HTTP pour certaines demandes, vous pouvez le faire en ajoutant une configuration dans votre manifeste Android, ou en créant un plugin pour mettre à jour le manifeste chaque fois que vous reconstruisez l’application à partir de zéro.

Vous devez ajouter un attribut à la balise <application> dans le manifeste, donc pour ne pas tout écraser, vous devez utiliser la balise <edit-config> avec mode = « merge ».

Voir : https://cordova.apache.org/docs/en/latest/plugin_ref/spec.html#edit-config

NB : HTTP n’est pas considéré comme un protocole sécurisé, et chaque requête envoyée (et sa charge utile) peut être lue par un attaquant, alors soyez prudent.

plugin.xml

<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
        xmlns:android="http://schemas.android.com/apk/res/android"
        id="phonegap-plugin-old-http-support-android" version="0.0.1">
    <name>OldHttpSupportPlugin</name>

    <description>Force HTTP for Android 9+</description>
    <license>MIT</license>

    <keywords>cordova,android,http</keywords>
  
    <engines>
        <engine name="cordova" version=">=6.0.0"/>
        <engine name="cordova-android" version=">=7.0.0"/>
    </engines>
  

    <platform name="android">
        <config-file target="res/xml/config.xml" parent="/*">
            <feature name="OldHttpSupportPlugin">
                <param name="android-package" value="YOUR.PACKAGE.plugin.OldHttpSupportPlugin"/>
            </feature>
        </config-file>


        <!-- Source file for Android -->
        <source-file src="src/android/network_security_config.xml" target-dir="res/xml/" />

        <edit-config file="AndroidManifest.xml" target="/manifest/application" mode="merge">
            <application android:networkSecurityConfig="@xml/network_security_config" />
        </edit-config>
    </platform>
</plugin>

network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">my.domain.com</domain>
        <domain includeSubdomains="true">example.org</domain>
        <domain includeSubdomains="true">111.222.333.444</domain>
    </domain-config>
</network-security-config>

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *