Android(9)Pieですべてのネットワーク接続タイプHTTPおよびHTTPSを許可する方法


144

Android 9 Pieから、暗号化なしのリクエストは機能しません。デフォルトでは、システムはデフォルトでTLSを使用することを想定しています。この機能はここで読むことができるので、HTTPS経由でのみリクエストを行う場合は安全です。しかし、ブラウザのようなアプリなど、異なるサイトを介してリクエストを行うアプリはどうでしょうか。

Android 9 Pieですべてのタイプの接続HTTPおよびHTTPSへのリクエストを有効にするにはどうすればよいですか?

回答:


250

これを実装する簡単な方法は、すべてのリクエストに対してすべてAndroidManifest.xmlを許可する場所にこの属性を使用することですhttp

<application android:usesCleartextTraffic="true">
</application>

ただし、たとえば、いくつかのドメインでは許可し、他のドメインでは許可しないなど、さまざまなリンクにさらに構成追加するhttp場合は、res/xml/networkSecurityConfig.xmlファイルを提供する必要があります。

Android 9 Pieでこれを行うにはnetworkSecurityConfig、次のようにマニフェストapplicationタグにを設定する必要があります。

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




    </application>
</manifest>

次に、xmlフォルダー内network_security_configに、マニフェストで名前を付けたのと同じ名前のファイルを作成する必要があります。そこから、暗号化なしですべての要求を有効にするには、ファイルのコンテンツは次のようになります。

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

そこからあなたは行ってもいいです。これで、アプリはすべてのタイプの接続をリクエストします。このトピックの詳細については、こちらをご覧ください


1
@Xenolion(React Nativeアプリケーションを使用して)これらの変更を行った後、ビルドされなくなりました。「マニフェストの合併に失敗しました」。「AndroidManifest.xml:7:7-67の属性application @ networkSecurityConfig value =(@ xml / react_native_config)は、AndroidManifest.xml:7:7-67 value =(@ xml / network_security_config)にも存在します。アイデアはありますか?
Wyatt

@Wyatt imはあなたと同じ問題を抱えていますが、解決策はありましたか?
ダンテセルバンテス

1
@DanteCervantesは上記の私の答えをチェックしてください。
Harshit Agrawal

3
reactネイティブプロジェクトのxmlフォルダーはどこにありますか
-CraZyDroiD

2
これを理解するのに十分な時間を費やすことは、実際にはHTTPの問題です。通常、HTTP RESPONSEでエラーが表示されます
Mihir Bhatt

30

両方またはこの問題に直面しているユーザーのための完全に機能するソリューションは、次のようにこれ をAndroidManifest.xmlファイルに追加するだけ です:AndroidReact-nativeandroid:usesCleartextTraffic="true"

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

次のような<application>.. </application>タグの間に:

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

2
うわー、私のアプリで問題なく機能し、I / Oエラーの問題が表示される前に解決しました
Venkatesh

1
tools:ignoreエラーが発生した場合は、必ずxmlns:tools="http://schemas.android.com/tools"内に追加してくださいapplication。そのように<application xmlns:tools="http://schemas.android.com/tools" ...
Ziyo

2
私はこれがアンドロイドの質問であることを知っていますが、反応ネイティブの開発者に役立つかもしれません、iOSソリューションはNSAppTransportSecurityinfo.plist に追加することです。stackoverflow.com/questions/38418998/...
アブドゥル・サディクYalcin

16

簡単な方法がandroid:usesCleartextTraffic="true"あなたに設定されていますAndroidManifest.xml

android:usesCleartextTraffic="true"

あなたのAndroidManifest.xmlように見える

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

これがお役に立てば幸いです。


10

簡単な方法

追加usesCleartextTrafficAndroidManifest.xmlを

<application
...
android:usesCleartextTraffic="true"
...>

アプリがクリアテキストHTTPなどのクリアテキストネットワークトラフィックを使用するかどうかを示します。API レベル27以下をターゲットとするアプリのデフォルト値は「true」です。API レベル28以上を対象とするアプリのデフォルトは「false」です。


8

ファイルusesCleartextTrafficのアプリケーションタグにフラグを設定するだけAndroidManifest.xmlです。Android用の設定ファイルを作成する必要はありません。

 <application
   android:usesCleartextTraffic="true"
   .
   .
   .>

7

React Nativeデバッグで実行中のアプリケーションの場合xml blockは、@ Xenolionによって言及されているreact_native_config.xml場所を<project>/android/app/src/debug/res/xml

次のスニペットに似ています:

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

1

同じ問題が発生し、@ Xenolionの回答にあるように、セキュリティ構成に異なるタグが含まれていることに気付きました

<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
    </domain-config>
</network-security-config>

タグ「ドメイン構成」を「ベース構成」に変更して、次のように機能します。

<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
    </base-config>
</network-security-config>


0

HTTPフィックスを介してclearTextを送信しているかどうかを確認できます。https ://medium.com/@son.rommer/fix-cleartext-traffic-error-in-android-9-pie-2f4e9e2235e6
または
Apache HTTPクライアントの場合非推奨(Googleから):Android 6.0では、Apache HTTPクライアントのサポートを削除しました。Android 9以降、そのライブラリはbootclasspathから削除され、デフォルトではアプリで使用できません。Apache HTTPクライアントを引き続き使用するために、Android 9以降を対象とするアプリは、AndroidManifest.xmlに以下を追加できます。

ソース https://developer.android.com/about/versions/pie/android-9.0-changes-28

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.