Httpサーバーに投稿リクエストを送信しようとしていますが、入力ストリームを取得しようとすると、エラーJava.io.IOException: Cleartext HTTP traffic to x not permitted
が発生します
私はすでにマニフェストにAndroid:usesCleartextTraffic="true"
を入れて、ネットワークセキュリティ構成を作成してAndroid:targetSandboxVersionを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>
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)
どんな助けでもいただければ幸いです
ローカルマシンで作業している場合は、localhostではなく10.0.2.2を要求していることを確認してください(これは非常に重要です)
次に、AndroidManfest.xmlファイルに次の行があることを確認します。
<uses-permission Android:name="Android.permission.INTERNET" />
<application
...
Android:networkSecurityConfig="@xml/network_security_config">
network_security_config.xmlファイルは次のようになります。
<?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>
または、特定のドメインへのリクエストを許可する必要がある場合は、network_security_config.xmlファイルを次のように変更できます。
<?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>
network_security_config.xml構成の両方が私にとってはうまくいきます。私は地元の開発環境に取り組んでいます。
私は同じ問題を抱えていましたが、Androidバージョンを25に下げることで解決しました。そして、このアプリケーションは、Android 9以下のデバイスでうまく機能します。
<uses-sdk
Android:minSdkVersion="16"
Android:targetSdkVersion="25" />
このようにしないでください。実行時にエラーが発生する可能性があります。 Androidここにネイティブプロジェクトが表示されます。ここにプロパティが表示されます。そこでクリックし、AssemblyInfo.csファイルを取得して、この部分を以下で編集してください。
[アセンブリ:Application(UsesCleartextTraffic = true)]
私のコードの下の例:-
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)]
注:この変更に必要なのはAndroid 9 Pie以上のバージョンのみです。