web-dev-qa-db-ja.com

「クリアテキストHTTPトラフィックをxに許可しない」を修正する方法

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)

どんな助けでもいただければ幸いです

2
Reynard

ローカルマシンで作業している場合は、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構成の両方が私にとってはうまくいきます。私は地元の開発環境に取り組んでいます。

0
Israel Estrada

私は同じ問題を抱えていましたが、Androidバージョンを25に下げることで解決しました。そして、このアプリケーションは、Android 9以下のデバイスでうまく機能します。

<uses-sdk
        Android:minSdkVersion="16"
        Android:targetSdkVersion="25" />
0
Jesus Vazquez

このようにしないでください。実行時にエラーが発生する可能性があります。 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以上のバージョンのみです。

0