Android 8:Cleartext HTTPトラフィックは許可されていません


1038

Android 8のユーザーから、バックエンドフィードを使用するアプリにコンテンツが表示されないという報告がありました。調査の結果、Android 8で次の例外が発生していることがわかりました。

08-29 12:03:11.246 11285-11285/ E/: [12:03:11.245, main]: Exception: IOException java.io.IOException: Cleartext HTTP traffic to * not permitted
at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:115)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:458)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
at com.deiw.android.generic.tasks.AbstractHttpAsyncTask.doConnection(AbstractHttpAsyncTask.java:207)
at com.deiw.android.generic.tasks.AbstractHttpAsyncTask.extendedDoInBackground(AbstractHttpAsyncTask.java:102)
at com.deiw.android.generic.tasks.AbstractAsyncTask.doInBackground(AbstractAsyncTask.java:88)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)

(パッケージ名、URL、その他の可能な識別子を削除しました)

Android 7以下ではすべてが機能しますが、android:usesCleartextTrafficマニフェストで設定しtrueません(それを設定しても効果がありません。とにかくデフォルト値です)。また、ネットワークセキュリティ情報も使用しません。を呼び出すとNetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted()、同じバージョンのapkファイルを使用して、古いバージョンのfalseAndroid 8 に戻りtrueます。Android Oに関するGoogleの情報でこれについての言及を見つけようとしましたが、成功しませんでした。


28
このCodeLabを確認して使用cleartextTrafficPermitted="true"
ArtiomLK 2018年

5
サーバーがHTTPSからHTTPにリダイレクトする場合があるため、これは私が管理しているアプリで発生します。
Big McLargeHuge

回答:


2202

ネットワークセキュリティ設定によると-

Android 9(APIレベル28)以降、クリアテキストのサポートはデフォルトで無効になっています。

また、見てください-https://koz.io/android-m-and-the-war-on-cleartext-traffic/

コードラボの説明-https : //codelabs.developers.google.com/codelabs/android-network-security-config/index.html

オプション1 -

まず、「http://」ではなく「https://」でURLを叩いてみてください

オプション2-

ファイルres / xml / network_security_config.xmlを作成します-

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">api.example.com(to be adjusted)</domain>
    </domain-config>
</network-security-config>

AndroidManifest.xml-

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

オプション3-

android:usesCleartextTraffic Doc

AndroidManifest.xml-

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:usesCleartextTraffic="true"
        ...>
        ...
    </application>
</manifest>

また、@ david.sの回答が指摘しているandroid:targetSandboxVersionように、問題になる可能性もあります-

マニフェストドキュメントによると-

android:targetSandboxVersion

このアプリが使用する対象のサンドボックス。サンドボックスのバージョン番号が大きいほど、セキュリティのレベルが高くなります。デフォルト値は1です。この属性を2に設定することもできます。この属性を2に設定すると、アプリが別のSELinuxサンドボックスに切り替わります。レベル2のサンドボックスには、次の制限が適用されます。

  • usesCleartextTrafficNetwork Security Config のデフォルト値はfalseです。
  • Uidの共有は許可されていません。

したがって、オプション4-

あなたが持っている場合android:targetSandboxVersion<manifest>、その後にそれを減らします1

AndroidManifest.xml-

<?xml version="1.0" encoding="utf-8"?>
<manifest android:targetSandboxVersion="1">
    <uses-permission android:name="android.permission.INTERNET" />
    ...
</manifest>

4
@HrishikeshKadamあなたの答えは大歓迎ですが、Pの最新リリースには別のステップが必要だと思われますか?私の質問stackoverflow.com/questions/51770323/…を
spartygw

8
ClearText HTTPは、httpsではなくhttpサイトを使用していたことを意味しますか?
トムハモンド

4
オプション1をdomain-configからbase-configに変更すると、これが修正されました
GregM

166
すべての開発者が追加しようとする場合、このAndroidセキュリティ機能のポイントは何android:usesCleartextTraffic="true"ですか?
フルーツ

69
これは、この問題の最善の解決策でさえ言及していません:HTTPSを使用します。この回答で言及されているオプションは、最後の手段にすぎません。
クリスチャンブリュッゲマン

132

AndroidManifestでこのパラメーターを見つけました:

android:networkSecurityConfig="@xml/network_security_config"

@ xml / network_security_configはnetwork_security_config.xmlで次のように定義されています。

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <!--Set application-wide security config using base-config tag.-->
    <base-config cleartextTrafficPermitted="false"/>
</network-security-config>  

cleartextTrafficPermittedをtrueに変更しただけです


11
+1これは、他の回答が示唆しているようにサブセットを維持するのではなく、アプリで使用されるすべてのドメインに適用する場合に便利です。
マーティン価格

2
パフォーマンス。ここでの詳細情報:codelabs.developers.google.com/codelabs/...
xxxxxxxxxxxxx

変更後にアプリを再インストールします
Ssenyonjo

118

Android 9での私の問題は、httpを使用してドメインのWebビューをナビゲートすることでしたこの回答の解決策

<application 
    android:networkSecurityConfig="@xml/network_security_config"
    ...>

そして:

res / xml / 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>

1
この答えだけが私にとってうまくいきました。他の答えは私にはうまくいきません。これが最良の答えです。
Ahamadullah Saikat

3
完璧に動作します!どうもありがとうございます!
TedVN

1
あまりにも私のために働いたこの一つは、私は知らない理由
シーナラヒミ

これをどうにかして書き換えることはできますgradleか?
モロゾフ

2
解決策のどれも私に役立ちませんでした。これ以外は.. !! トンありがとう。
Kunal Kakkad

93

デバッグ中はクリアテキストのみを許可し、本番環境ではクリアテキストを拒否するというセキュリティ上の利点を維持したい場合があります。これは、httpsをサポートしていない開発サーバーに対してアプリをテストするので便利です。本番環境でhttpsを適用する方法を示しますが、デバッグモードではクリアテキストを許可します。

build.gradle:

// Put this in your buildtypes debug section:
manifestPlaceholders = [usesCleartextTraffic:"true"]

// Put this in your buildtypes release section
manifestPlaceholders = [usesCleartextTraffic:"false"]

AndroidManifest.xmlのアプリケーションタグ内

android:usesCleartextTraffic="${usesCleartextTraffic}"

1
ただし、API 23以降でのみ使用されます。APIに依存しないソリューションが必要な場合は、stackoverflow.com
/ questions / 46302058 /

質問:アプリが設計上httpまたはhttpsのWebサーバーを使用する場合、httpサービスのURLがWebサービスを使用できるようにする必要があるかどうかにかかわらず、usesCleartextTraffic: "false"は問題になりますか?それをtrueに設定すると、httpsサービスはデフォルトでクリアテキストを送信しません。
Whyo​​z

2
ありがとう!それは受け入れられる答えでなければなりません。これを機能させるには、最も安全な方法です
dm707

63

URLをからHTTPHTTPS変更します。

うまくいきました!


98
これはどのように賛成ですか?サーバーのURLがhttpsではない場合、ハンドシェイクの例外が発生します
kkarakk

18
(本番環境で)それを行うことが正しいため、賛成です。デフォルトは、HTTPではなくHTTPSにする必要があります。
beetstra

29
@beetstaあなたはあなたがコンテンツを提供しているものを完全にコントロールしていると仮定します。したがって、この答えは、本質的に素朴または軽薄です。
マーティン価格

10
@beetstraデバッグ中にローカルマシンでHTTPSをデフォルトにする必要があるのはなぜですか?これは愚かで、Googleの父性主義のもう1つの例です。幸いなことに、タイラーのソリューションによってデバッグモードでこれを回避できます。
Bevor

2
答えは質問を知らない。中小企業の人々とは異なり、すべてのステージングサーバーにSSLがない場合があります。答えは、誰かがFacebookの投稿で文法を訂正するのと同じくらいひどく、これは質問にまったく答えませんし、修正もしません。
Nick Turner

42
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">***Your URL(ex: 127.0.0.1)***</domain>
    </domain-config>
</network-security-config>

上記の提案では、URLをhttp://xyz.abc.com/mno/として提供していました

これをxyz.abc.comに変更すると、 機能し始めました。


8
ドメイン!= URL。「http」はプロトコルです。プロトコルがドメインの一部になることはありません。
信じられないほどの月

。最高の答えは、あなたがドメイン固有コンフィグが良く、ベースコンフィグ設定より設定ありがとう
thatakula trinadhを

これは正しいです。そこではFQDNのみがサポートされ、IPアドレスはありません(上記で修正)。
Martin

ドメイン10.0.2.2では機能しません。ポート番号を追加する必要がありますか?

28

わかりました、それは⇒⇒ではありませんthousands何千回も繰り返してそれをマニフェスト追加しますが、これに基づくヒントですが、追加の利点(およびおそらくいくつかの背景情報)を提供します。

Androidには、src-Directoryの一種の上書き機能があります。

デフォルトでは、

/ app / src / main

ただし、AndroidManifest.xmlを上書きするディレクトリを追加できます。以下にその仕組みを示します。

  • ディレクトリ/ app / src / debugを作成します
  • 内部にAndroidManifest.xmlを作成します

このファイルの中に、すべてのルールを入れる必要はありませんが、/ app / src / main / AndroidManifest.xmlから上書きしたいルールだけを入れます

次に、リクエストされたCLEARTEXT-Permissionの例を示します。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.yourappname">

    <application
            android:usesCleartextTraffic="true"
            android:name=".MainApplication"
            android:label="@string/app_name"
            android:icon="@mipmap/ic_launcher"
            android:allowBackup="false"
            android:theme="@style/AppTheme">
    </application>

</manifest>

この知識があれば、デバッグに応じてパーミッションをオーバーロードすることが1、2、3と簡単になりますメイン| 環境を解放します。

その大きな利点...本番マニフェストにデバッグ機能がなく、保守が簡単で保守しやすい構造を維持します。


3
これは間違いなく適切な解決策です。Androidはこれらのセキュリティ設定を理由で追加したので、そのままにしておく必要があります。お客様のソリューションでは、ローカルの安全でない環境でテストを行うことができますが、本番環境のビルドには、推奨されるセキュリティ設定が含まれています。ありがとうございました!
Coo

25

誰かに役立つかもしれません。

最近、Android 9でも同じ問題が発生しましたが、WebView内にいくつかのURLを表示するだけでよく、特別なことは何もありません。したがってandroid:usesCleartextTraffic="true"、マニフェストに追加することは機能しましたが、このためにアプリ全体のセキュリティを危険にさらしたくありませんでした。修正はからのリンクを変更することにあったようhttphttps


3
一部のURLのみを表示する場合は、WebViewは必要ありません。私はTextViewを使用します。;)あなたがいくつかのhtmlページを表示することを意味すると思います。修正は、サーバーがSSLを提供している場合にのみ機能します。単にリンクを変更することはできません。
信じられないほどのヤン

2
これは確かに可能な限り最良のオプションですが、パフォーマンス上の理由から、または単にリソースがクリアテキストHTTPで利用できない場合があるため、常にそれを選択できるわけではありません。
Dakatine

「アプリ全体のセキュリティを危険にさらしたくありませんでした」とは、どのようなセキュリティリスクが発生する可能性があるのですか?私の場合、URLが1つないため、マニフェストに追加できません。
ロバートウィリアムズ

こんにちは@RobertWilliamsこれは、クリアなトラフィックが暗号化されていないトラフィックを許可することを意味します。ここではブログ投稿でmedium.com/@son.rommer/...
sparkly_frog

同じ問題が再び発生しました。それらのソリューションをすべて試しました。
Ahamadullah Saikat

22

React Nativeプロジェクトの場合

RN 0.59で既に修正されています。0.58.6から0.59へのアップグレードの差分を見つけることができます ことができます。RNバージョンをアップグレードせずに、次の手順に従って適用できます。

ファイルを作成します。

アンドロイド/アプリ/ SRC / デバッグ /res/xml/react_native_config.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>
</network-security-config>

アンドロイド/アプリ/ SRC / デバッグ /AndroidManifest.xml -

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools">

  <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

  <application tools:targetApi="28"
      tools:ignore="GoogleAppIndexingWarning" 
      android:networkSecurityConfig="@xml/react_native_config" />
</manifest>

受け入れられた回答を確認して、根本的な原因を確認してください。


2
私はreact-native 0.59.5を使用していますが、同じ問題が発生しているため、AndroidManifest.xmlを手動で設定する必要があります。
クリスティアンモラ

11

わかりました、私はこれを理解しました。これはandroid:targetSandboxVersion="2"、Instant Appバージョンもあるので追加したマニフェストパラメーターによるものです。ユーザーがInstant Appから通常のアプリにアップグレードしても、転送でデータが失われないようにする必要があります。しかし、漠然とした説明が示唆するように:

このアプリが使用するターゲットサンドボックスを指定します。sanboxのバージョンが高いほど、セキュリティのレベルが高くなります。

この属性のデフォルト値は1です。

それは明らかに、少なくともAndroid 8では、新しいレベルのセキュリティポリシーを追加します。


9

私はすでにそこにあるアンドロイドマニフェストファイルからこの行を削除しました

 android:networkSecurityConfig="@xml/network_security_config" 

と追加されました

android:usesCleartextTraffic="true"

これはマニフェストのアプリケーションタグに

<application
    android:usesCleartextTraffic="true"
    android:allowBackup="true"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    >

その後、このエラーClearlay HTTPトラフィックはoverlay.openstreetmap.nlに許可されていませんが、Android 9および10では私にとっては無効になっています


8

これらのさまざまな回答をに適用するにはXamarin.Android、クラスおよびアセンブリレベルの属性を使用するか、手動でAndroidManifest.xml

もちろんインターネットの許可が必要です(ええと..):

[assembly: UsesPermission(Android.Manifest.Permission.Internet)]

注:通常、アセンブリレベルの属性はAssemblyInfo.csファイルに追加されますがusingnamespace作品の下および上にあるすべてのファイルに追加されます。

次に、アプリケーションサブクラス(必要に応じて作成)でNetworkSecurityConfigResources/xml/ZZZZ.xmlファイルへの参照を追加できます。

#if DEBUG
[Application(AllowBackup = false, Debuggable = true, NetworkSecurityConfig = "@xml/network_security_config")]
#else
[Application(AllowBackup = true, Debuggable = false, NetworkSecurityConfig = "@xml/network_security_config"))]
#endif
public class App : Application
{
    public App(IntPtr javaReference, Android.Runtime.JniHandleOwnership transfer) : base(javaReference, transfer) { }
    public App() { }

    public override void OnCreate()
    {
        base.OnCreate();
    }
}

Resources/xmlフォルダーにファイルを作成します(xml必要に応じフォルダーをます)。

サンプルxml/network_security_configファイル、必要に応じて調整(他の回答を参照)

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
          <domain includeSubdomains="true">www.example.com</domain>
          <domain includeSubdomains="true">notsecure.com</domain>
          <domain includeSubdomains="false">xxx.xxx.xxx</domain>
    </domain-config>
</network-security-config>

次のUsesCleartextTrafficパラメータも使用できますApplicationAttribute

#if DEBUG
[Application(AllowBackup = false, Debuggable = true, UsesCleartextTraffic = true)]
#else
[Application(AllowBackup = true, Debuggable = false, UsesCleartextTraffic = true))]
#endif

doaminを使用せず、ローカルホストアドレス192.168を使用していない場合、これはどのように機能しますか?アプリケーションはインターネットではなくローカルネットワークで公開されます
rogue39nin

そして、xamrianフォームの構文は何ですか
rogue39nin

@ rogue39nin私の回答の最後の部分を使用してください:UsesCleartextTraffic = true
SushiHangover

4

また、アプリケーションの開発中に同じ「クリアテキストHTTPトラフィックは許可されていません」というエラーが表示されます。アプリケーションのネットワーク呼び出しにRetrofit2を使用しており、2つのプロジェクト環境(開発と本番)があります。私のプロダクションドメインにはHTTPS呼び出しでSSL証明書があり、開発者にはhttpsがありません。構成はビルドフレーバーに追加されます。しかし、devに変更すると、この問題が発生します。だから私はそのための以下のソリューションを追加しました。

マニフェストにクリアテキストトラフィックを追加しました

 android:usesCleartextTraffic="true"

次に、後付け構成クラスOKHttpの作成時に接続仕様を追加しました。

 .connectionSpecs(CollectionsKt.listOf(ConnectionSpec.MODERN_TLS, ConnectionSpec.CLEARTEXT))

OkHttpClientの完全な作成を以下に示します

OkHttpClient okHttpClient = new OkHttpClient.Builder()
        .readTimeout(10, TimeUnit.SECONDS)
        .connectTimeout(10, TimeUnit.SECONDS)
        .cache(null)
        .connectionSpecs(CollectionsKt.listOf(ConnectionSpec.MODERN_TLS, ConnectionSpec.CLEARTEXT))
        .addInterceptor(new NetworkInterceptor(context))
        .addInterceptor(createLoggingInterceptor())
        .addInterceptor(createSessionExpiryInterceptor())
        .addInterceptor(createContextHeaderInterceptor())
        .build();

4

2019年12月イオン更新-4.7.1

<manifest xmlns:tools=“http://schemas.android.com/tools”>

<application android:usesCleartextTraffic=“true” tools:targetApi=“28”>

上記のコンテンツをandroid manifest .xmlファイルに追加してください

以前のバージョンのionic

  1. config.xmlIonicプロジェクトに次のものが含まれていることを確認してください。

    <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
                <application android:networkSecurityConfig="@xml/network_security_config" />
                <application android:usesCleartextTraffic="true" />
            </edit-config>
  2. ionic Cordova build androidを実行します。プラットフォームの下にAndroidフォルダーを作成します

  3. Android Studioを開き、プロジェクトproject-platforms-androidにあるAndroidフォルダーを開きます。数分放置してグラドルを構築します

  4. 終了後gradle build、に含めるminSdVersionとエラーが発生しmanifest.xmlます。ここで行うことは、単に<uses-sdk android:minSdkVersion="19" />から削除することmanifest.xmlです。

    両方の場所から削除されていることを確認してください:

    1. アプリ→マニフェスト→ AndroidManifest.xml
    2. CordovaLib→マニフェスト→ AndroidManifest.xml

    今度はgradleをもう一度ビルドしてみて、正常にビルドされます

  5. アプリ→マニフェスト→のアプリケーションタグに以下があることを確認しますAndroidmanifest.xml

    <application
    android:networkSecurityConfig="@xml/network_security_config"  android:usesCleartextTraffic="true" >
  6. 開くnetwork_security_config(アプリ→res→xml→ network_security_config.xml)。

    次のコードを追加します。

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">xxx.yyyy.com</domain>
        </domain-config>
    </network-security-config>

ここではxxx.yyyy.com、あなたのHTTPのAPIのリンクです。URLの前にHttpを含めないでください。

注:Android Studioを使用してアプリをビルドし(ビルド-ビルドバンドル/ APK-APKをビルド)、そのアプリを使用できるようになり、Android Pieで正常に動作します。ionic Cordova build androidを使用してアプリをビルドしようとすると、これらの設定がすべて上書きされるため、必ずAndroid Studioを使用してプロジェクトをビルドしてください。

古いバージョンのアプリがインストールされている場合は、それらをアンインストールして試してください。そうしないと、エラーが発生します。

アプリがインストールされていません


イオン?コルドバ?つまり、これは通常のAndroidビルドではなく、フロントエンド技術を使用してネイティブアプリをビルドするためのフレームワークです
週末は

IonicはAndroidアプリでwebivew実装を提供し、Cordovaはマイク、カメラなどのAndroidネイティブ機能へのアクセスを支援します。
Gvs Akhil

3

ファイルの作成-res / xml / network_security.xml

network_security.xml->

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">192.168.0.101</domain>
    </domain-config>
</network-security-config>

AndroidManifests.xmlを開きます。

 android:usesCleartextTraffic="true" //Add this line in your manifests

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:usesCleartextTraffic="true"
        android:theme="@style/AppTheme">

3

これはセキュリティ上の理由から行われます。可能場合は常にHTTPS(HTTP Secure)を使用することをお勧めします。
あなたはそれについてここでもっと読むことができます

状況に応じて、この問題には複数の解決策があります。

ファーストパーティのサービスと通信しようとしている場合、IE:独自のWebサーバー

サーバー側:そのサーバーにHTTPSサポートを追加し、HTTPの代わりにHTTPSを使用する必要があります。最近ではLetsEncryptその他の
クライアント側のようなサービスを使用して無料でそれを行うこともできます。パッケージHttpURLConnectionからを使用している場合、java.netHttpsURLConnectionjava.net.sslパッケージ、それは似ていない場合は、同一のAPIを持っているので、スイッチが楽になるはずです。

Google、Facebook、天気予報サービスなどのサードパーティサービスを使用している場合。

通信しているサービスがHTTPSをサポートしている場合(ほとんどの場合)、リクエストURLをからhttp://abc.xyzに変更できますhttps://abc.xyz

最後の手段として、通信したいサードパーティのサービスがHTTPSまたはその他の安全な通信形式をサポートしていない場合は、この回答を使用できますが、これも必要な目的に反するためお勧めできません。セキュリティ機能。


2

私の場合、そのURLはブラウザでも機能しません。

https://www.google.com/で確認します

webView.loadUrl("https://www.google.com/")

そしてそれは私のために働いた。


myWebView.loadUrl( "www.site.com"); また、WebマスターがSSLをHTTPSとして使用せず、HTTPのみを使用する場合にも機能します。白紙になるかもしれませんが。
ベイ

指定されたURLがWebブラウザーで機能している場合は、Webビューで使用できます。それ以外の場合は、このエラーが表示されます。
Mayuresh Deshmukh

エラーが発生することもありますが、ほとんどの場合、run.javascriptでも「空白」ページが表示され、ウェブサイトに正しくアクセスできます。なぜ空白ページが表示されるのかわかりません。また、ズーム可能をtrueに設定します。
ベイ


2

以下のためのXamarin.Android開発者を確認してくださいHttpClientを実装し、SSL / TLSは、デフォルトに設定されています。

Andorid Options-> Advanced Android Optionsにあります。

ここに画像の説明を入力してください


2

私にとって、有効な答えは@PabloCegarraによるものでした:

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

に関するセキュリティ警告が表示される場合があります cleartextTrafficPermitted="true"

「ホワイトリスト」の対象となるドメインがわかっている場合は、承認された回答と上記の回答の両方を組み合わせる必要があります。

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="false">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">books.google.com</domain>
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </domain-config>
</network-security-config>

このコードは私にとっては機能しますが、私のアプリはbooks.google.comからのみデータを取得する必要があります。これにより、セキュリティ警告が消えます。


2
 cleartext support is disabled by default.Android in 9 and above

 Try This one I hope It will work fine

1 Step:->  add inside android build gradle (Module:App)
            useLibrary 'org.apache.http.legacy'

  android {
               compileSdkVersion 28
              useLibrary 'org.apache.http.legacy'

          }

次に2ステップ:->マニフェストマニフェストアプリケーションタグ内に追加

<application
    android:networkSecurityConfig="@xml/network_security_config">//add drawable goto Step 4

   // Step --->3  add to top this line  
     <uses-library
        android:name="org.apache.http.legacy"
        android:required="false" />

</application>

//ステップ4->> Drawable >> Xmlファイルを作成します>> name as >> 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>

これをaospで変更することは可能ですか?
シャドウ

@シャドウはい、変更できます。
Ashif

どこで変更できるか正確にわかりますか?
シャドウ

@Shadow <base-config cleartextTrafficPermitted = "true"> <trust-anchors> <certificates src = "system" /> </ trust-anchors> </ base-config> <domain-config cleartextTrafficPermitted = "true"> <domain includeSubdomains = "true"> www.yourwebsidedomain.com </ domain> </ domain-config>
Ashif

番号!!ここでもアプリケーション側で言っています。私はframework / <>フォルダクラスを変更する方法を尋ねていますか?
シャドウ

1

React Native 0.58.5以降のバージョンにアップグレードします。それらはincludeSubdomainRN 0.58.5の設定ファイルにあります。

ChangeLog

Rn 0.58.5 network_security_configでは、サーバードメインで宣言しました。ネットワークセキュリティ構成により、アプリは特定のドメインからのクリアテキストトラフィックを許可できます。したがってandroid:usesCleartextTraffic="true"、マニフェストファイルのアプリケーションタグで宣言することにより、余分な労力をかける必要はありません。RNバージョンのアップグレード後に自動的に解決されます。


1

APIバージョン9.0を変更した後、YOU-API.DOMAIN.COMへのエラーCleartext HTTPトラフィックが許可されない(targetSdkVersion = "28")。xamarin、xamarin.android、android studio

xamarin、xamarin.android、android studioでこのエラーを解決するための2つのステップ。

ステップ1:ファイルresources / xml / network_security_config.xmlを作成する

network_security_config.xml

<?xml version="1.0" encoding="utf-8" ?>
<network-security-config>
  <domain-config cleartextTrafficPermitted="true">
    <domain includeSubdomains="true">mobapi.3detrack.in</domain>
  </domain-config>
</network-security-config>

ステップ2:AndroidManifest.xmlを更新する-

アプリケーションタグにandroid:networkSecurityConfig = "@ xml / network_security_config"を追加します。例えば:

<application android:label="your App Name" android:icon="@drawable/icon" android:networkSecurityConfig="@xml/network_security_config">

1

ヘッダーにこのパラメーターを追加すると、apiSauce React Nativeの問題が解決しました

"Content-Type": "application/x-www-form-urlencoded",
  Accept: "application/json"

1

ionicを使用していて、ネイティブhttpプラグイン中にこのエラーが発生する場合は、次の修正を行う必要があります-

goto resources/android/xml/network_security_config.xml 変更-

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
        <domain includeSubdomains="true">api.example.com(to be adjusted)</domain>
    </domain-config>
</network-security-config>

それは私のために働いた!


1

マニフェストファイルに... android:usesCleartextTraffic = "true" ...を追加すると、問題が修正されたように見えても、データの整合性に対する脅威が生じます。

私が使用したセキュリティ上の理由マニフェストプレースホルダをしてusesCleartextTraffic:アンドロイドマニフェストファイル内(のように受け入れ答えのオプション3すなわち@ Hrishikesh Kadamの応答は)のみデバッグ環境上のクリアテキストを許可します。

私のbuild.gradle(:app)ファイル内に、次のようなマニフェストプレースホルダーを追加しました。

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }

        debug {
            manifestPlaceholders.cleartextTrafficPermitted ="true"
        }
    }

上のこの行にあるプレースホルダー名cleartextTrafficPermittedに注意してください

            manifestPlaceholders.cleartextTrafficPermitted ="true"

次に、Androidマニフェストで同じプレースホルダーを使用しました...

AndroidManifest.xml-

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:usesCleartextTraffic="${cleartextTrafficPermitted}"
        ...>
        ...
    </application>
</manifest>

これにより、クリアテキストトラフィックはデバッグ環境でのみ許可されます。


0

クリアテキストは、暗号化されていない、または暗号化されることを意図していない、送信または保存された情報です。

アプリがHTTP(httpsではなく)などのクリアテキストネットワークトラフィックを使用してサーバーと通信する場合、コンテンツのハッキングや改ざんのリスクが発生する可能性があります。第三者は、許可されていないデータを注入したり、ユーザーに関する情報を漏洩したりする可能性があります。そのため、開発者はHTTPSなどのトラフィックのみを保護することが推奨されています。 これは、この問題を解決する方法の実装とリファレンスです。



0

Cordova-plugin-whitelist 1.3.4でCordova 8を使用していますが、デフォルトの構成ではアプリはインターネットにアクセスできません。manifest.xmlにパラメーターを追加するだけです-> android:usesCleartextTraffic = "true"

Cordova 8で変更されたmainfestのパス:platform / android / app / src / main / AndroidManifest.xml。

 <?xml version='1.0' encoding='utf-8'?>
    <manifest android:hardwareAccelerated="true" android:versionCode="10000" android:versionName="1.0.0" package="io.cordova.hellocordova" xmlns:android="http://schemas.android.com/apk/res/android">
        <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
        <application 
android:hardwareAccelerated="true" 
android:icon="@mipmap/ic_launcher" 
android:label="@string/app_name" 
android:supportsRtl="true" 
android:usesCleartextTraffic="true">
            <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize">
                <intent-filter android:label="@string/launcher_name">
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    </manifest>

アプリがインターネットにアクセスする必要があることは明らかなので、これは本当に愚かです...


0

シンプルで簡単なソリューション[Xamarinフォーム]

アンドロイド用

  1. 移動をAndroid Projectクリックし、次にをクリックしますProperties

ここに画像の説明を入力してください

  1. AssemblyInfo.csこのコードを開いてすぐに貼り付けます:

    [assembly: Application(UsesCleartextTraffic =true)]

ここに画像の説明を入力してください

iOSの場合

使用NSAppTransportSecurity

ここに画像の説明を入力してください

ファイルの辞書の下にNSAllowsArbitraryLoadsキーを設定する必要があります。YESNSAppTransportSecurityinfo.plist

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>

plist構成

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