Cordova Android 8. にアップグレードした後、net::ERR_CLEARTEXT_NOT_PERMITTED
に接続しようとしたときのエラーhttp://
ターゲット。
なぜですか、どうすれば解決できますか?
Cordova AndroidプラットフォームのデフォルトのAPIレベルがアップグレードされました。 Android 9デバイスでは、デフォルトでクリアテキスト通信が 無効になっています 。
再びクリアテキスト通信を許可するには、application
タグのAndroid:usesCleartextTraffic
をtrue
に設定します。
<platform name="Android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
<application Android:usesCleartextTraffic="true" />
</edit-config>
</platform>
コメントで述べたように、Android
XML名前空間を以前に定義していない場合、ビルド中にerror: unbound prefix
を受け取ります。これは、次のように、同じconfig.xml
のwidget
タグに追加する必要があることを示しています。
<widget id="you-app-id" version="1.2.3"
xmlns="http://www.w3.org/ns/widgets"
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:cdv="http://cordova.Apache.org/ns/1.0">
Config.xmlには2つの修正点があります。そのため、正しい答えはxmls:Androidを追加することです。
<widget id="com.my.awesomeapp" version="1.0.0"
xmlns="http://www.w3.org/ns/widgets"
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:cdv="http://cordova.Apache.org/ns/1.0">
さらに、構成を編集して以下を許可します。
<platform name="Android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
<application Android:usesCleartextTraffic="true" />
</edit-config>
</platform>
ステップ1のエラーが回避された場合:バインドされていないプレフィックス。表示されます
ここのクリアテキストは、暗号化されていない情報を表します。 Android 9なので、アプリがHTTPS APIを呼び出して、前夜が落ちないようにすることをお勧めします。
ただし、HTTP APIを呼び出す必要がある場合は、次を実行できます。
プラットフォーム:Ionic 4
次の名前のファイルを作成します:network_security_config.xml under project-root/resources/Android/xml
次の行を追加します。
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain>ip-or-domain-name</domain>
</domain-config>
</network-security-config>
project-root/config.xmlで、次の行を更新します。
<platform name="Android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:Android="http://schemas.Android.com/apk/res/Android">
<application Android:usesCleartextTraffic="true" />
<application Android:networkSecurityConfig="@xml/network_security_config" />
</edit-config>
... other statements...
これで動作するはずです。
問題を解決するために、他のオプションがあります。ファイルresources/Android/xml/network_security_config.xmlにあります。インサート:
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<domain-config cleartextTrafficPermitted="true">
<domain>localhost</domain>
<domain includeSubdomains="true">192.168.7.213:8733</domain>
</domain-config>
</network-security-config>
IPアドレスを使用している私の場合、base-configが必要ですが、ドメインがある場合。ドメインを追加するだけです。
最初の<widget>タグ内に次の属性を追加するとうまくいきました。 Android 9エミュレーターでのシンプルでライブのリロード。xmlns:Android = "http://schemas.Android.com/apk/res/Android"
<widget id="com.my.awesomeapp" version="1.0.0"
xmlns="http://www.w3.org/ns/widgets"
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:cdv="http://cordova.Apache.org/ns/1.0">
今日私はこの問題にぶつかりましたが、Apache CordovaアプリケーションでAndroid 9+でクリアテキストトラフィックを手動で許可しようとする手間を省く、本当に気の利いたプラグインを見つけました。 plugin-cleartext、およびプラグインはすべての舞台裏を処理する必要がありますAndroid stuff。
$ cordova plugin add cordova-plugin-cleartext
$ cordova prepare
$ cordova run Android
数日間の闘争の後、これは私にとってはうまくいきます。あなたにとってもうまくいくことを願っています。
これをCONFIG.XML、コードの先頭に追加します。
<access Origin="*" />
<allow-navigation href="*" />
そして、これはプラットフォームAndroidの下です。
<edit-config file="app/src/main/AndroidManifest.xml"
mode="merge" target="/manifest/application"
xmlns:Android="http://schemas.Android.com/apk/res/Android">
<application Android:usesCleartextTraffic="true" />
<application Android:networkSecurityConfig="@xml/network_security_config" />
</edit-config>
<resource-file src="resources/Android/xml/network_security_config.xml"
target="app/src/main/res/xml/network_security_config.xml" />
このファイルに次のコードを追加します "resources/Android/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>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
<domain includeSubdomains="true">YOUR DOMAIN HERE/IP</domain>
</domain-config>
</network-security-config>
以下は私のために働いた解決策です。更新したファイルは次のとおりです。
対応するファイルの変更は次のとおりです。
1。config.xml
Config.xmlファイルの<application Android:usesCleartextTraffic="true" />
タグ内に<edit-config>
タグを追加しました
<platform name="Android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:Android="http://schemas.Android.com/apk/res/Android">
<application Android:usesCleartextTraffic="true" />
<application Android:networkSecurityConfig="@xml/network_security_config" />
</edit-config>
...
<platform name="Android">
2。network_security_config.xml
このファイルでは、プロジェクト要件に従って、メインドメインとサブドメインの2つの<domain>
タグを<domain-config>
タグ内に追加しました。
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">mywebsite.in</domain>
<domain includeSubdomains="true">api.mywebsite.in</domain>
</domain-config>
</network-security-config>
ヘルプを提供してくれた@Ashutoshに感謝します。
それが役に立てば幸い。
追加する必要があります
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
に
resources/Android/xml/network_security_config.xml
このような
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
</domain-config> </network-security-config>
古いionic cli(4.2)は私の場合問題を引き起こしていました。5に更新すると問題が解決します
@Der Hochstaplerはソリューションに感謝します。
しかしIONIC 4プロジェクトのカスタマイズconfig.xml私のために働く
ウィジェットタグに行を追加します
<widget id="com.my.awesomeapp" version="1.0.0"
xmlns="http://www.w3.org/ns/widgets"
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:cdv="http://cordova.Apache.org/ns/1.0">
この後、AndroidのPlatformタグで、以下のいくつかの行をカスタマイズします。
add sesCleartextTraffic = true after networkSecurityConfigおよびresource-fileタグ
<platform name="Android">
<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" />
</edit-config>
<resource-file src="resources/Android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
<edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application">
<application Android:usesCleartextTraffic="true" />
</edit-config>
</platform>
cordova-custom-config
プラグインでAndroid設定を管理します。この場合、解決策は新しい custom-preference
config.xml
:
<platform name="Android">
<preference name="orientation" value="portrait" />
<!-- ... other settings ... -->
<!-- Allow http connections (by default Android only allows https) -->
<!-- See: https://stackoverflow.com/questions/54752716/ -->
<custom-preference
name="Android-manifest/application/@Android:usesCleartextTraffic"
value="true" />
</platform>
誰でも開発ビルドに対してのみこれを行う方法を知っていますか?リリースビルドがこの設定false
のままになれば幸いです。
(iOSの構成ではbuildType="debug"
そのためですが、これがAndroid configuration。)に適用されるかどうかはわかりません。
Ionic 4コンデンサプロジェクトで、テストのためにAndroid電話にパッケージ化して展開したときに、このエラーが発生しました。コンデンサを再インストールし、Androidプラットフォームを更新することで解決しました。
npm run build --prod --release
npx cap copy
npm install --save @capacitor/core @capacitor/cli
npx cap init
npx cap update Android
npx cap open Android
NPMおよびCordovaコマンドに問題があるレガシーCordovaフレームワークがある場合。以下のオプションをお勧めします。
Android/res/xml/network_security_config.xmlファイルを作成-
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">Your URL(ex: 127.0.0.1)</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>
IM IONIC 5.4.13、cordova 9.0.0([email protected])
私は情報を繰り返しているかもしれませんが、私にとっては、いくつかのプラグインを追加した後に問題が現れ始めました(まだわかりません)。上記のすべての組み合わせを試しましたが、何も機能しませんでした。以下を追加した後にのみ機能し始めました:
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
プロジェクトのファイルに
resources/Android/xml/network_security_config.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>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
<domain includeSubdomains="true">10.1.25.10</domain>
</domain-config>
</network-security-config>
ありがとうございます。