Comment autoriser tous les types de connexion réseau HTTP et HTTPS dans Android (9) Pie?

145

À partir d'Android 9 Pie maintenant, les demandes sans cryptage ne fonctionneront jamais. Et par défaut, le système s'attendra à ce que vous utilisiez TLS par défaut. Vous pouvez lire cette fonctionnalité ici. Donc, si vous ne faites des demandes que via HTTPS, vous êtes en sécurité. Mais qu'en est-il des applications qui font des demandes via différents sites, par exemple des applications de type navigateur.

Comment puis-je activer les requêtes pour tous les types de connexions HTTP et HTTPS dans Android 9 Pie?

Xénolion
la source

Réponses:

251

Le moyen le plus simple de l'implémenter est d'utiliser cet attribut pour votre AndroidManifest.xmloù vous autorisez tout httppour toutes les demandes:

<application android:usesCleartextTraffic="true">
</application>

Mais au cas où vous voudriez plus de configurations pour différents liens par exemple, autorisant httpcertains domaines mais pas d'autres domaines, vous devez fournir un res/xml/networkSecurityConfig.xmlfichier.

Pour ce faire dans Android 9 Pie, vous devrez définir un networkSecurityConfigdans votre applicationbalise Manifest comme suit:

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:networkSecurityConfig="@xml/network_security_config">




    </application>
</manifest>

Ensuite, dans votre xmldossier, vous devez maintenant créer un fichier nommé network_security_configcomme vous l'avez nommé dans le manifeste et à partir de là, le contenu de votre fichier devrait être comme ceci pour activer toutes les demandes sans chiffrement:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
</network-security-config>

De là, vous êtes prêt à partir. Maintenant, votre application fera des demandes pour tous les types de connexions. Pour plus d'informations sur ce sujet, lisez ici .

Xénolion
la source
1
@Xenolion Après avoir effectué ces modifications (avec une application React Native), il ne se construit plus. "Fusion manifeste échouée". "L'attribut application @ networkSecurityConfig value = (@ xml / react_native_config) d'AndroidManifest.xml: 7: 7-67 est également présent sur AndroidManifest.xml: 7: 7-67 value = (@ xml / network_security_config). Des idées?
Wyatt
@Wyatt j'ai le même problème que vous, avez-vous trouvé une solution?
Dante Cervantes
1
@DanteCervantes consultez ma réponse ci-dessus.
Harshit Agrawal
3
Où puis-je trouver le dossier xml dans le projet natif
React
2
Perdez beaucoup de temps à comprendre qu'il s'agit en fait d'un problème HTTP. normalement, il affiche ERREUR sur HTTP RESPONSE
Mihir Bhatt
30

La SOLUTION ENTIÈREMENT FONCTIONNELLE pour les deux Androidou les React-nativeutilisateurs confrontés à ce problème, ajoutez simplement ceci android:usesCleartextTraffic="true" dans le fichier AndroidManifest.xml comme ceci:

android:usesCleartextTraffic="true"
tools:ignore="GoogleAppIndexingWarning">
<uses-library
    android:name="org.apache.http.legacy"
    android:required="false" />

entre <application>.. </application>balise comme ceci:

<application
      android:name=".MainApplication"
      android:label="@string/app_name"
      android:icon="@mipmap/ic_launcher"
      android:allowBackup="false"
      android:theme="@style/AppTheme"
        android:usesCleartextTraffic="true"
        tools:ignore="GoogleAppIndexingWarning">
        <uses-library
            android:name="org.apache.http.legacy"
            android:required="false" />
      <activity
        android:name=".MainActivity"
        android:label="@string/app_name"/>
 </application>
Harshit Agrawal
la source
2
Wow grâce à son bon fonctionnement dans mon application, avant que le problème d'échec d'E / S ne soit maintenant résolu
Venkatesh
1
si vous obtenez une tools:ignoreerreur, assurez-vous d'ajouter à l' xmlns:tools="http://schemas.android.com/tools"intérieur de votre fichier application. Like so<application xmlns:tools="http://schemas.android.com/tools" ...
Ziyo
2
Je sais que c'est une question Android, mais cela pourrait aider les développeurs natifs de réaction, la solution ios consiste à ajouter NSAppTransportSecurityà info.plist. stackoverflow.com/questions/38418998/…
Abdul Sadik Yalcin
16

Un moyen simple est défini android:usesCleartextTraffic="true"sur vousAndroidManifest.xml

android:usesCleartextTraffic="true"

Votre AndroidManifest.xmllook comme

<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.dww.drmanar">
   <application
       android:icon="@mipmap/ic_launcher"
       android:label="@string/app_name"
       android:usesCleartextTraffic="true"
       android:theme="@style/AppTheme"
       tools:targetApi="m">
       <activity
            android:name=".activity.SplashActivity"
            android:theme="@style/FullscreenTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
       </activity>
    </application>
</manifest>

J'espère que cela t'aidera.

Mehul Solanki
la source
10

Moyen facile

Ajouter usesCleartextTrafficà AndroidManifest.xml

<application
...
android:usesCleartextTraffic="true"
...>

Indique si l'application a l'intention d'utiliser le trafic réseau en texte clair, tel que HTTP en texte clair. La valeur par défaut des applications qui ciblent le niveau d' API 27 ou inférieur est "true". Les applications qui ciblent le niveau d' API 28 ou supérieur par défaut sont "false".

Arshid KV
la source
8

Définissez simplement le usesCleartextTrafficdrapeau dans la balise d'application du AndroidManifest.xmlfichier. Pas besoin de créer un fichier de configuration pour Android.

 <application
   android:usesCleartextTraffic="true"
   .
   .
   .>
Asif Patel
la source
7

Pour les React Nativeapplications exécutées en mode débogage, ajoutez le xml blockmentionné par @Xenolion à react_native_config.xmlsitué dans<project>/android/app/src/debug/res/xml

Semblable à l'extrait de code suivant:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="false">localhost</domain>
        <domain includeSubdomains="false">10.0.2.2</domain>
        <domain includeSubdomains="false">10.0.3.2</domain>
    </domain-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
</network-security-config>
Kaviyarasu Duraisamy
la source
1

J'ai eu le même problème et je remarque que ma configuration de sécurité a différents TAGS comme le dit la réponse @Xenolion

<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
    </domain-config>
</network-security-config>

donc je change les TAGS "domain-config" pour "base-config" et fonctionne, comme ceci:

<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
    </base-config>
</network-security-config>
Sandy Veliz
la source
pouvez-vous s'il vous plaît répondre à ce stackoverflow.com/questions/59116787/…
pratik jaiswal
0

Vous pouvez vérifier si vous envoyez clearText via HTTP Fix: https://medium.com/@son.rommer/fix-cleartext-traffic-error-in-android-9-pie-2f4e9e2235e6
OU
dans le cas du client HTTP Apache obsolescence (de Google): avec Android 6.0, nous avons supprimé la prise en charge du client HTTP Apache. À partir d'Android 9, cette bibliothèque est supprimée du chemin bootclasspath et n'est pas disponible par défaut pour les applications. Pour continuer à utiliser le client HTTP Apache, les applications qui ciblent Android 9 et supérieur peuvent ajouter les éléments suivants à leur AndroidManifest.xml:

Source https://developer.android.com/about/versions/pie/android-9.0-changes-28

user11091094
la source