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