web-dev-qa-db-fra.com

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

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

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

76
Xenolion

La méthode la plus simple consiste à utiliser cet attribut dans votre AndroidManifest.xml où vous autorisez toutes les http pour toutes les demandes:

Android:usesCleartextTraffic="true"

Mais au cas où vous voudriez plus de configurations pour différents liens, par exemple, autorisant http pour certains domaines mais pas pour d'autres, vous devez fournir networkSecurityConfig fichier.

Pour cela, dans Android 9 Pie, vous devez définir une balise networkSecurityConfig dans votre manifeste application comme ceci:

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




    </application>
</manifest>

Ensuite, dans votre dossier xml, vous devez maintenant créer un fichier nommé network_security_config de la même manière que vous l'avez nommé dans le manifeste et à partir de là, le contenu de votre fichier doit être ainsi pour permettre toutes les demandes sans cryptages:

<?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 va faire des demandes pour tous les types de connexions. Pour plus d'informations sur ce sujet lire ici .

130
Xenolion

Le solution totalement opérationnelle pour les deux utilisateurs Android ou React-native confrontés à ce problème ajoute simplement ce Android:usesCleartextTraffic="true" dans le fichier AndroidManifest.xml, comme suit:

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

entre <application> .. </application> tag 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>
17
Harshit Agrawal

Un moyen simple consiste à définir Android:usesCleartextTraffic="true" sur vous AndroidManifest.xml

Android:usesCleartextTraffic="true"

Votre AndroidManifest.xml ressemble à

<?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.

7
Mehul Solanki

Il suffit de définir l’indicateur usesCleartextTraffic dans la balise d’application du fichier AndroidManifest.xml. Pas besoin de créer un fichier de configuration pour Android.

 <application
   Android:usesCleartextTraffic="true"
   .
   .
   .>
5
Asif Patel

Pour les applications React Native lors de l'exécution du débogage, ajoutez le xml block mentionné par @Xenolion à react_native_config.xml situé dans <project>/Android/app/src/debug/res/xml

Semblable à l'extrait 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>
3

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
En cas de désapprobation du client HTTP Apache (de Google): Avec Android 6.0, nous avons supprimé la prise en charge du client HTTP Apache. À partir de Android 9, cette bibliothèque est supprimée du chemin d'accès au 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 versions ultérieures peuvent ajouter les éléments suivants à leur fichier AndroidManifest.xml:

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

0
user11091094