J'essaie de faire une demande de publication à un serveur http, mais lorsque j'essaie d'obtenir un flux d'entrée, j'obtiens l'erreur Java.io.IOException: Cleartext HTTP traffic to x not permitted
J'ai déjà essayé de mettre Android:usesCleartextTraffic="true"
dans mon manifeste, ainsi que de faire une configuration de sécurité réseau et de définir Android: targetSandboxVersion sur 1
app/src/main/res/xml/network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">Server adress</domain>
</domain-config>
</network-security-config>
app/src/main/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.packagename"
Android:targetSandboxVersion="1">
<uses-permission Android:name="Android.permission.INTERNET"/>
<application
Android:allowBackup="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:roundIcon="@mipmap/ic_launcher_round"
Android:supportsRtl="true"
Android:theme="@style/AppTheme"
Android:usesCleartextTraffic="true"
Android:networkSecurityConfig="@xml/network_security_config"
>
<activity Android:name=".MainActivity">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Sortie Logcat
D/NetworkSecurityConfig: Using Network Security Config from resource network_security_config debugBuild: true
W/System.err: Java.io.IOException: Cleartext HTTP traffic to x not permitted
W/System.err: at com.Android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.Java:124)
W/System.err: at com.Android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.Java:462)
W/System.err: at com.Android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.Java:411)
W/System.err: at com.Android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.Java:248)
Toute aide serait appréciée
Si vous travaillez sur votre machine locale, assurez-vous de demander 10.0.2.2 au lieu de localhost (c'est très important)
Assurez-vous ensuite que votre fichier AndroidManfest.xml comporte les lignes suivantes:
<uses-permission Android:name="Android.permission.INTERNET" />
<application
...
Android:networkSecurityConfig="@xml/network_security_config">
et votre fichier network_security_config.xml doit ressembler à ceci:
<?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>
ou si vous devez autoriser la demande à des domaines spécifiques, vous pouvez modifier le fichier network_security_config.xml avec:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">10.0.2.2</domain>
</domain-config>
</network-security-config>
Les deux configurations network_security_config.xml fonctionnent pour moi. Je travaille sur mon environnement de développement local.
J'ai eu le même problème et je l'ai résolu en abaissant la Android à 25 dans Et, l'application fonctionne bien sur les appareils avec Android 9 et plus petit.
<uses-sdk
Android:minSdkVersion="16"
Android:targetSdkVersion="25" />
Ne faites pas comme ça, il peut y avoir une erreur d'exécution Pour faire la méthode la plus simple; allez à Android projet natif ici vous pouvez voir Propriétés cliquez là-bas puis prenez le fichier AssemblyInfo.cs puis éditez cette partie ci-dessous
[Assemblage: application (UsesCleartextTraffic = true)]
exemple ci-dessous mon code: -
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using Android.App;
// General Information about an Assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an Assembly.
[Assembly: AssemblyTitle("ZATWEBO.Android")]
[Assembly: AssemblyDescription("")]
[Assembly: AssemblyConfiguration("")]
[Assembly: AssemblyCompany("")]
[Assembly: AssemblyProduct("ZATWEBO.Android")]
[Assembly: AssemblyCopyright("Copyright © 2014")]
[Assembly: AssemblyTrademark("")]
[Assembly: AssemblyCulture("")]
[Assembly: ComVisible(false)]
// Version information for an Assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [Assembly: AssemblyVersion("1.0.*")]
[Assembly: AssemblyVersion("1.0.0.0")]
[Assembly: AssemblyFileVersion("1.0.0.0")]
// Add some common permissions, these can be removed if not needed
[Assembly: UsesPermission(Android.Manifest.Permission.Internet)]
[Assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)]
[Assembly: Application(UsesCleartextTraffic = true)]
Remarque: cette modification nécessite uniquement Android 9 Pie ou versions supérieures