Setelah meningkatkan ke Cordova Android 8.0 , saya melihat net::ERR_CLEARTEXT_NOT_PERMITTED
kesalahan saat mencoba menghubungkan ke http://
target.
Mengapa demikian dan bagaimana saya bisa mengatasinya?
Setelah meningkatkan ke Cordova Android 8.0 , saya melihat net::ERR_CLEARTEXT_NOT_PERMITTED
kesalahan saat mencoba menghubungkan ke http://
target.
Mengapa demikian dan bagaimana saya bisa mengatasinya?
Jawaban:
Tingkat API default di platform Android Cordova telah ditingkatkan. Di perangkat Android 9, komunikasi teks jelas sekarang dinonaktifkan secara default .
Untuk mengizinkan komunikasi teks yang jelas lagi, setel android:usesCleartextTraffic
pada application
tag Anda ke true
:
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:usesCleartextTraffic="true" />
</edit-config>
</platform>
Seperti disebutkan dalam komentar, jika Anda belum menentukan android
ruang nama XML sebelumnya, Anda akan menerima error: unbound prefix
selama pembuatan. Ini menunjukkan bahwa Anda perlu menambahkannya ke widget
tag Anda dengan cara yang sama config.xml
, seperti:
<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">
AndroidManifest.xml
dalam proyek Android Anda?
Ada dua hal yang harus diperbaiki di config.xml Jadi jawaban yang benar harus menambahkan 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">
ditambah mengedit konfigurasi untuk mengizinkan:
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:usesCleartextTraffic="true" />
</edit-config>
</platform>
Jika langkah 1 dihindari kesalahan: awalan tidak terikat. akan muncul
Cleartext di sini mewakili informasi yang tidak dienkripsi. Sejak Android 9, disarankan agar aplikasi memanggil HTTPS API untuk memastikan tidak ada eves yang jatuh.
Namun, jika kita masih perlu memanggil API HTTP, kita dapat melakukan berikut ini:
Platform: Ionic 4
Buat file bernama: network_security_config.xml di bawah project-root / resources / android / xml
Tambahkan baris berikut:
<?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>
Sekarang di project-root / config.xml , perbarui baris berikut:
<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...
Ini harus bekerja sekarang.
config.xml
sebelum edit-config
tag: <resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
. Terima kasih!
Untuk mengatasi masalah, ada opsi lain. dalam sumber file / android / xml / network_security_config.xml. memasukkan:
<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>
Saya kasus saya, saya menggunakan alamat IP maka base-config diperlukan, tetapi jika Anda memiliki domain. cukup tambahkan domain.
Saya mengalami masalah ini sendiri hari ini, dan menemukan plugin yang sangat bagus yang akan menghemat kerumitan mencoba mengizinkan lalu lintas cleartext secara manual di Android 9+ untuk aplikasi Apache Cordova Anda. Cukup instal cordova-plugin-cleartext, dan plugin akan menangani semua hal di balik layar Android untuk Anda.
$ cordova plugin add cordova-plugin-cleartext
$ cordova prepare
$ cordova run android
Setelah beberapa hari berjuang, ini berhasil untuk saya, dan saya harap ini juga berhasil untuk Anda.
tambahkan ini ke CONFIG.XML Anda , di atas kode Anda.
<access origin="*" />
<allow-navigation href="*" />
dan ini, di bawah platform 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" />
tambahkan kode berikut ke file ini "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>
trust-anchors
tag adalah komponen terakhir untuk membuat semua hal lainnya berfungsi.
Menambahkan atribut berikut dalam tag pembuka <widget> berhasil untuk saya. Sederhana dan langsung dimuat ulang dengan benar di emulator 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">
edit-config
kode dari jawaban yang diterima (memperbaiki unbound prefix
kesalahan)
Anda harus menambahkan
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
untuk
resource / android / xml / network_security_config.xml
seperti ini
<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>
Berikut adalah solusi yang berhasil untuk saya. File yang saya perbarui adalah sebagai berikut:
Perubahan pada file terkait adalah sebagai berikut:
1. config.xml
Saya telah menambahkan <application android:usesCleartextTraffic="true" />
tag di dalam <edit-config>
tag di file 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>
...
<platform name="android">
2. network_security_config.xml
Di file ini saya telah menambahkan 2 <domain>
tag dalam <domain-config>
tag, domain utama dan sub domain sesuai kebutuhan proyek saya
<?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>
Terima kasih @Ashutosh atas bantuannya.
Semoga membantu.
Saya menggunakan IONIC 5.4.13, cordova 9.0.0 (cordova-lib@9.0.1)
Saya mungkin mengulang informasi tetapi bagi saya masalah mulai muncul setelah menambahkan beberapa plugin (belum yakin). Saya mencoba semua kombinasi di atas, tetapi tidak ada yang berhasil. Ini hanya mulai berfungsi setelah menambahkan:
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
untuk mengajukan proyek di
resource / android / xml / network_security_config.xml
jadi file network_security_config.xml saya sekarang terlihat seperti:
<?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>
Terimakasih untuk semua.
Cli ionik lama (4.2) menyebabkan masalah dalam kasus saya, perbarui ke 5 untuk menyelesaikan masalah
Kami menggunakan cordova-custom-config
plugin untuk mengelola konfigurasi Android kami. Dalam hal ini solusinya adalah menambahkan yang baru custom-preference
ke config.xml
:
<platform name="android">
<preference name="orientation" value="portrait" />
<!-- ... other settings ... -->
<!-- Allow http connections (by default Android only allows https) -->
<!-- See: /programming/54752716/ -->
<custom-preference
name="android-manifest/application/@android:usesCleartextTraffic"
value="true" />
</platform>
Adakah yang tahu bagaimana melakukan ini hanya untuk pembangunan pembangunan? Saya akan senang untuk rilis build meninggalkan pengaturan inifalse
.
(Saya melihat konfigurasi iOS menawarkan buildType="debug"
untuk itu, tetapi saya tidak yakin apakah ini berlaku untuk konfigurasi Android.)
@Der Hochstapler terima kasih atas solusinya.
tetapi di IONIC 4 beberapa penyesuaian dalam proyek config.xml bekerja untuk saya
Tambahkan baris di tag Widget
<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">
setelah ini, di tag Platform untuk android sesuaikan beberapa baris, centang di bawah ini
tambahkan usingCleartextTraffic = true setelah networkSecurityConfig dan tag 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>
Dalam proyek kapasitor Ionic 4, ketika saya mengemas dan menerapkan ke ponsel android untuk pengujian, saya mendapat kesalahan ini. Diatasi dengan memasang kembali kapasitor dan memperbarui platform 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
Jika Anda memiliki kerangka kerja Cordova Lama yang mengalami masalah dengan perintah NPM dan Cordova. Saya akan menyarankan opsi di bawah ini.
Buat file 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>
Solusi berikut berhasil untuk saya.
goto resources/android/xml/network_security_config.xml
Ubah ke-
<?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>
Cukup tambahkan baris ini ke file platforms / android / app / src / main / AndroidManifest.xml
<application android: hardwareAccelerated = "true" android: icon = "@ mipmap / ic_launcher" android: label = "@ string / app_name" android: supportingRtl = "true" android: usingCleartextTraffic = "true" >
error: unbound prefix.
) ketika mencoba membangun aplikasi Cordova saya. Solusinya adalah menambahkanconfig.xml
file saya , di<widget>
elemen root saya atributxmlns:android="http://schemas.android.com/apk/res/android