Saya mendapat laporan dari pengguna dengan Android 8 bahwa aplikasi saya (yang menggunakan umpan back-end) tidak menampilkan konten. Setelah diselidiki, saya menemukan Pengecualian yang terjadi di 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)
(Saya telah menghapus nama paket, URL, dan kemungkinan pengidentifikasi lainnya)
Pada Android 7 dan yang lebih rendah semuanya berfungsi, saya tidak mengatur android:usesCleartextTraffic
di Manifest (dan mengaturnya agar true
tidak membantu, itu adalah nilai default), saya juga tidak menggunakan Informasi Keamanan Jaringan. Jika saya menelepon NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted()
, ia kembali false
untuk Android 8, true
untuk versi yang lebih lama, menggunakan file apk yang sama. Saya mencoba untuk menemukan beberapa menyebutkan hal ini di info Google tentang Android O, tetapi tidak berhasil.
cleartextTrafficPermitted="true"
Jawaban:
Menurut konfigurasi keamanan Jaringan -
Lihat juga di - https://koz.io/android-m-and-the-war-on-cleartext-traffic/
Penjelasan Codelabs - https://codelabs.developers.google.com/codelabs/android-network-security-config/index.html
Pilihan 1 -
Pertama-tama coba tekan URL dengan "https: //" bukan "http: //"
Pilihan 2 -
Buat file res / xml / network_security_config.xml -
AndroidManifest.xml -
Opsi 3 -
android: usingCleartextTraffic Doc
AndroidManifest.xml -
Juga sebagai jawaban @ david.s ' menunjukkan
android:targetSandboxVersion
bisa menjadi masalah juga -Menurut Manifest Docs -
Jadi Opsi 4 -
Jika Anda memiliki
android:targetSandboxVersion
di<manifest>
kemudian mengurangi ke1
AndroidManifest.xml -
sumber
android:usesCleartextTraffic="true"
?Di AndroidManifest saya menemukan parameter ini:
dan @ xml / network_security_config didefinisikan dalam network_security_config.xml sebagai:
hanya saya mengubah cleartextTrafficPermitted menjadi true
sumber
Masalah saya di Android 9 adalah menavigasi pada tampilan web melalui domain dengan http Solusi dari jawaban ini
dan:
res / xml / network_security_config.xml
sumber
gradle
?Anda mungkin hanya ingin mengizinkan cleartext saat debugging, tetapi tetap manfaat keamanan dari menolak cleartext dalam produksi. Ini berguna bagi saya karena saya menguji aplikasi saya terhadap server pengembangan yang tidak mendukung https. Berikut ini cara menegakkan https dalam produksi, tetapi mengizinkan cleartext dalam mode debug:
Dalam build.gradle:
Dalam tag aplikasi di AndroidManifest.xml
sumber
Ubah url Anda dari
HTTP
menjadiHTTPS
;Berhasil !!!
sumber
Dalam saran yang diberikan di atas, saya memberikan URL saya sebagai http://xyz.abc.com/mno/
Saya mengubahnya menjadi xyz.abc.com lalu mulai berfungsi.
sumber
Ok, itu ⇒⇒ BUKAN repeat ribuan ulangi menambahkannya ke Manifest Anda , tetapi sebuah petunjuk yang mendasari ini, tetapi memberi Anda Manfaat tambahan (dan mungkin beberapa Informasi Latar Belakang).
Android memiliki semacam fungsi penulisan ulang untuk Direktori-src.
Secara default, Anda punya
Tetapi Anda dapat menambahkan direktori tambahan untuk menimpa AndroidManifest.xml Anda. Inilah cara kerjanya:
Di dalam File ini, Anda tidak harus memasukkan semua Aturan di dalamnya, tetapi hanya yang ingin Anda timpa dari / app / src / main / AndroidManifest.xml
Berikut ini Contoh tampilannya untuk CLEARTEXT-Izin yang diminta:
Dengan pengetahuan ini, sekarang menjadi 1,2,3 bagi Anda untuk membebani Izin Anda tergantung pada debug Anda | main | lepaskan Lingkungan.
Keuntungan besar di sini ... Anda tidak memiliki debug-manifest dalam produksi-Manifest Anda dan Anda mempertahankan struktur yang lurus dan mudah dirawat
sumber
Ini bisa bermanfaat bagi seseorang.
Kami baru-baru ini memiliki masalah yang sama untuk Android 9, tetapi kami hanya perlu menampilkan beberapa Url dalam WebView, tidak ada yang sangat istimewa. Jadi menambahkan
android:usesCleartextTraffic="true"
ke Manifest berfungsi, tetapi kami tidak ingin membahayakan keamanan seluruh aplikasi untuk ini. Jadi perbaikannya adalah dalam mengubah tautan darihttp
kehttps
sumber
Untuk Bereaksi proyek asli
Itu sudah diperbaiki pada RN 0,59. Anda dapat menemukan pada peningkatan versi dari 0,58.6 ke 0,59 Anda dapat menerapkannya tanpa memutakhirkan versi RN Anda, ikuti langkah-langkah di bawah ini:
Buat file:
android / app / src / debug /res/xml/react_native_config.xml -
android / app / src / debug /AndroidManifest.xml -
Periksa jawaban yang diterima untuk mengetahui akar penyebabnya.
sumber
Oke, saya sudah menemukan ini. Ini karena parameter Manifest
android:targetSandboxVersion="2"
, yang telah saya tambahkan karena kami juga memiliki versi Aplikasi Instan - itu harus memastikan bahwa setelah pengguna meningkatkan dari Aplikasi Instan ke aplikasi biasa, ia tidak akan kehilangan datanya dengan transfer. Namun seperti uraian samar-samar menyarankan:Ini jelas juga menambah level baru kebijakan keamanan, setidaknya di Android 8.
sumber
Saya telah menghapus baris ini dari file manifes android yang sudah ada di sana
dan ditambahkan
ini ke tag aplikasi dalam manifes
maka kesalahan ini Cleartext HTTP traffic ke overlay.openstreetmap.nl tidak diizinkan hilang untuk saya di android 9 dan 10. Saya harap ini akan bekerja untuk android 8 juga jika ini membantu Anda jangan lupa untuk memilih terima kasih
sumber
Untuk menerapkan berbagai jawaban ini
Xamarin.Android
, Anda dapat menggunakan Atribut tingkat kelas dan perakitan vs. pengeditan secara manualAndroidManifest.xml
Izin internet tentu diperlukan (ya ..):
Catatan: Biasanya atribut level perakitan ditambahkan ke
AssemblyInfo.cs
file Anda , tetapi file apa pun, di bawahusing
dan di atasnamespace
karya.Kemudian pada subkelas Aplikasi Anda (buat satu jika perlu), Anda dapat menambahkan
NetworkSecurityConfig
dengan referensi keResources/xml/ZZZZ.xml
file:Buat file di
Resources/xml
folder (buatxml
folder jika perlu).Contoh
xml/network_security_config
file, sesuaikan seperlunya (lihat jawaban lain)Anda juga dapat menggunakan
UsesCleartextTraffic
parameter padaApplicationAttribute
:sumber
UsesCleartextTraffic = true
Saya juga mendapatkan kesalahan "Cleartext HTTP traffic tidak diizinkan" yang sama saat mengembangkan Aplikasi saya. Saya menggunakan Retrofit2 untuk panggilan jaringan dalam aplikasi saya dan saya memiliki dua lingkungan proyek (dev & produksi). Domain Produksi saya memiliki sertifikat SSL dengan panggilan HTTPS dan dev tidak akan memiliki https. Konfigurasi ditambahkan dalam rasa build. Tetapi ketika saya berubah menjadi dev, masalah ini akan memicu. Jadi saya telah menambahkan solusi di bawah ini untuk itu.
Saya telah menambahkan lalu lintas cleartext dalam manifes
Kemudian saya telah menambahkan spesifikasi koneksi di kelas konfigurasi retrofit, waktu pembuatan OKHttp.
Kreasi OkHttpClient lengkap diberikan di bawah ini
sumber
Pembaruan Desember 2019 ion - 4.7.1
Silakan tambahkan konten di atas dalam file .xml manifes android
Versi sebelumnya dari ion
Pastikan Anda memiliki yang berikut dalam
config.xml
Proyek Ionic Anda:Jalankan Ionic Cordova build android. Itu menciptakan folder Android di bawah Platform
Buka Android Studio dan buka folder Android yang ada di proyek-platform-android proyek kami. Diamkan selama beberapa menit sehingga membuat gradle
Setelah
gradle build
selesai kami mendapatkan beberapa kesalahan karena termasukminSdVersion
dalammanifest.xml
. Sekarang yang kita lakukan hanyalah menghapus<uses-sdk android:minSdkVersion="19" />
darimanifest.xml
.Pastikan dihapus dari kedua lokasi:
AndroidManifest.xml
.AndroidManifest.xml
.Sekarang cobalah untuk membangun gradle lagi dan sekarang berhasil membangun
Pastikan Anda memiliki yang berikut ini di Tag aplikasi di App → manifest →
Androidmanifest.xml
:Buka
network_security_config
(aplikasi → res → xml →network_security_config.xml
).Tambahkan kode berikut:
Inilah
xxx.yyyy.com
tautan API HTTP Anda. Pastikan Anda tidak memasukkan Http apa pun sebelum URL.Catatan: Sekarang buat aplikasi menggunakan Android Studio (Build - Build Bundle / APK - Build APK) dan sekarang Anda dapat menggunakan Aplikasi itu dan berfungsi dengan baik di Android Pie. Jika Anda mencoba membangun aplikasi menggunakan android Cordova ionic, itu menimpa semua pengaturan ini jadi pastikan Anda menggunakan Android Studio untuk membangun Proyek.
Jika Anda memiliki aplikasi versi lama yang diinstal, Hapus instalan dan cobalah atau Anda akan dibiarkan dengan beberapa kesalahan:
sumber
Buat file - res / xml / network_security.xml
Di network_security.xml ->
Buka AndroidManifests.xml:
sumber
Ini dilakukan karena alasan keamanan, Anda harus selalu memilih untuk menggunakan HTTPS (HTTP Secure ) jika memungkinkan.
Anda dapat membaca lebih lanjut di sini
Ada beberapa solusi untuk masalah ini tergantung pada kondisi Anda.
Jika Anda mencoba berkomunikasi dengan layanan pihak pertama, IE: server web Anda sendiri
Sisi server: Anda harus menambahkan dukungan HTTPS ke server itu dan menggunakan HTTPS alih-alih HTTP. Hari-hari ini Anda bahkan dapat melakukannya untuk layanan menggunakan gratis seperti LetsEncrypt dan lain-lain
sisi Klien: Jika Anda menggunakan
HttpURLConnection
darijava.net
paket Anda dapat beralih keHttpsURLConnection
satujava.net.ssl
paket, ia memiliki serupa jika tidak identik API, sehingga saklar harus mudah.Jika Anda menggunakan layanan pihak ketiga, seperti Google, Facebook, layanan cuaca, dll.
Jika layanan yang Anda komunikasikan mendukung HTTPS (yang kemungkinan besar terjadi), Anda dapat mengubah URL permintaan Anda dari
http://abc.xyz
menjadihttps://abc.xyz
.Sebagai upaya terakhir, jika layanan pihak ketiga yang ingin Anda ajak berkomunikasi tidak mendukung HTTPS atau bentuk komunikasi aman lainnya, Anda dapat menggunakan jawaban ini , tetapi sekali lagi, ini tidak disarankan karena mengalahkan tujuan yang sangat dibutuhkan ini. fitur keamanan.
sumber
Dalam kasus saya, URL itu juga tidak berfungsi di browser.
Saya memeriksa dengan https://www.google.com/
Dan itu berhasil untuk saya.
sumber
Cukup tambahkan android: usingCleartextTraffic = "true" di dalam file AndroidManifest.xml
sumber
Untuk pengembang Xamarin.Android pastikan implementasi HttpClient dan SSL / TLS diatur ke Default.
Ini dapat ditemukan di bawah Opsi Andorid -> Opsi Android Lanjut.
sumber
Sementara jawaban yang berfungsi, bagi saya, adalah ini oleh @PabloCegarra:
Anda mungkin menerima peringatan keamanan mengenai
cleartextTrafficPermitted="true"
Jika Anda tahu domain menjadi 'daftar putih' Anda harus mencampur jawaban yang diterima dan yang di atas:
Kode ini berfungsi untuk saya, tetapi aplikasi saya perlu mengambil data hanya dari books.google.com. Dengan cara ini peringatan keamanan menghilang.
sumber
Kemudian 2 Langkah: -> manifes tambahkan di dalam tag aplikasi manifes
// Langkah 4 - >> Buat Drawable >> file Xml >> nama sebagai >> network_security_config.xml
sumber
Tingkatkan ke React Native 0.58.5 atau versi yang lebih tinggi. Mereka ada
includeSubdomain
di file konfigurasi mereka di RN 0,58.5.ChangeLog
Dalam Rn 0,58.5 mereka telah mendeklarasikan
network_security_config
dengan domain server mereka. Konfigurasi keamanan jaringan memungkinkan aplikasi mengizinkan traffic teks-jelas dari domain tertentu. Jadi tidak perlu melakukan upaya ekstra dengan mendeklarasikanandroid:usesCleartextTraffic="true"
dalam tag aplikasi file manifes Anda. Ini akan diselesaikan secara otomatis setelah memutakhirkan Versi RN.sumber
Setelah mengubah API versi 9.0, dapatkan kesalahan Cleartext HTTP traffic ke YOUR-API.DOMAIN.COM tidak diizinkan (targetSdkVersion = "28"). di xamarin, xamarin.android dan studio android.
Dua langkah untuk mengatasi kesalahan ini di xamarin, xamarin.android dan android studio.
Langkah 1: Buat sumber daya file / xml / network_security_config.xml
Di network_security_config.xml
Langkah 2: perbarui AndroidManifest.xml -
Tambah android: networkSecurityConfig = "@ xml / network_security_config" pada tag aplikasi. misalnya:
sumber
menambahkan parameter ini di header menyelesaikan masalah saya di apiSauce React Native
sumber
Jika Anda menggunakan ion dan mendapatkan kesalahan ini selama plugin http asli , perbaikan berikut perlu dilakukan-
goto
resources/android/xml/network_security_config.xml
Ubah ke-Itu berhasil bagi saya!
sumber
Menambahkan ... android: usingCleartextTraffic = "true" ... ke file manifes Anda mungkin terlihat untuk memperbaiki masalah tetapi itu membuka ancaman terhadap integritas data.
Demi alasan keamanan, saya menggunakan manifes placeholder dengan android: usingCleartextTraffic di dalam file manifes (seperti pada Opsi 3 dari jawaban yang diterima yaitu @ Hrishikesh Kadam 's response) untuk hanya mengizinkan cleartext pada lingkungan debug.
Di dalam file build.gradle (: app) saya, saya menambahkan placeholder nyata seperti ini:
Perhatikan nama placeholder cleartextTrafficPermitted pada baris ini di atas
Kemudian di Android Manifest saya, saya menggunakan placeholder yang sama ...
AndroidManifest.xml -
Dengan itu, lalu lintas cleartext hanya diizinkan di bawah lingkungan debug.
sumber
Saat aplikasi berkomunikasi dengan server yang menggunakan lalu lintas jaringan teks-jelas, seperti HTTP ( bukan https ), itu bisa meningkatkan risiko peretasan dan perusakan konten. Pihak ketiga dapat menyuntikkan data yang tidak sah atau membocorkan informasi tentang pengguna. Itu sebabnya pengembang didorong untuk mengamankan lalu lintas saja, seperti HTTPS. Berikut ini adalah implementasi dan referensi tentang cara mengatasi masalah ini.
sumber
Coba tekan URL dengan "https: //" daripada "http: //"
sumber
Saya menggunakan Cordova 8 dengan cordova-plugin-whitelist 1.3.4 dan konfigurasi default aplikasi saya tidak ada akses ke internet dan saya hanya menambahkan parameter di manifest.xml -> android: usingCleartextTraffic = "true"
Jalur mainfest berubah di Cordova 8: platform / android / app / src / main / AndroidManifest.xml.
ini benar-benar bodoh karena jelas bahwa aplikasi Anda memerlukan akses ke internet ....
sumber
Solusi Sederhana dan Termudah [Formulir Xamarin]
Android Project
, lalu KlikProperties
,AssemblyInfo.cs
dan tempel kode ini di sana:Gunakan
NSAppTransportSecurity
:Anda harus mengatur
NSAllowsArbitraryLoads
kunci diYES
bawahNSAppTransportSecurity
kamus dalaminfo.plist
file Anda .sumber