Bagaimana cara mengizinkan semua jenis koneksi Jaringan HTTP dan HTTPS di Android (9) Pie?

154

Dari Android 9 Pie sekarang, permintaan tanpa enkripsi tidak akan pernah berfungsi. Dan secara default, Sistem akan mengharapkan Anda untuk menggunakan TLS secara default. Anda dapat membaca fitur ini di sini Jadi jika Anda hanya membuat permintaan melalui HTTPS Anda aman. Tapi bagaimana dengan aplikasi yang membuat permintaan melalui situs berbeda, misalnya, aplikasi seperti browser.

Bagaimana cara mengaktifkan permintaan ke semua jenis koneksi HTTP dan HTTPS di Android 9 Pie?

Xenolion
sumber

Jawaban:

276

Cara mudah untuk menerapkannya adalah dengan menggunakan atribut ini ke AndroidManifest.xmltempat Anda mengizinkan semua httpuntuk semua permintaan:

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

Tetapi jika Anda menginginkan beberapa konfigurasi lagi untuk tautan yang berbeda misalnya, mengizinkan httpbeberapa domain tetapi tidak domain lain Anda harus menyediakan res/xml/networkSecurityConfig.xmlfile.

Untuk melakukan ini di Android 9 Pie, Anda harus menetapkan tag networkSecurityConfigManifest applicationseperti ini:

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




    </application>
</manifest>

Kemudian di xmlfolder Anda, Anda sekarang harus membuat file dengan nama network_security_configseperti yang Anda beri nama di Manifest dan dari sana konten file Anda harus seperti ini untuk mengaktifkan semua permintaan tanpa enkripsi:

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

Dari sana Anda siap berangkat. Sekarang aplikasi Anda akan membuat permintaan untuk semua jenis koneksi. Untuk informasi tambahan tentang topik ini baca di sini .

Xenolion
sumber
1
@Xenolion Setelah saya membuat perubahan ini (dengan aplikasi React Native) tidak lagi dibangun. "Penggabungan nyata tidak berhasil". "Aplikasi atribut @ networkSecurityConfig value = (@ xml / react_native_config) dari AndroidManifest.xml: 7: 7-67 juga ada di AndroidManifest.xml: 7: 7-67 value = (@ xml / network_security_config). Ada ide?
Wyatt
@Wyatt im mengalami masalah yang sama dengan Anda, apakah Anda menemukan solusi?
Dante Cervantes
1
@DanteCervantes lihat jawaban saya di atas.
Harshit Agrawal
4
Di mana saya dapat menemukan folder xml di react native project
CraZyDroiD
2
Buang banyak waktu untuk mencari tahu ini sebenarnya masalah HTTP. biasanya itu menunjukkan ERROR pada HTTP RESPONSE
Mihir Bhatt
31

The SOLUSI SEPENUHNYA KERJA untuk kedua Androidatau React-nativepengguna menghadapi masalah ini hanya menambahkan ini android:usesCleartextTraffic="true" di AndroidManifest.xml file seperti ini:

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

di antara <application>.. </application>tag seperti ini:

<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>
Harshit Agrawal
sumber
2
Wow, terima kasih berfungsi dengan baik di aplikasi saya, sebelum masalah kegagalan i / o yang ditampilkan sekarang terpecahkan
Venkatesh
3
jika Anda mendapatkan tools:ignorekesalahan, pastikan untuk menambahkan xmlns:tools="http://schemas.android.com/tools"di dalam file application. Seperti itu<application xmlns:tools="http://schemas.android.com/tools" ...
Ziyo
2
Saya tahu ini adalah pertanyaan android tetapi mungkin membantu untuk pengembang react-native, solusi ios adalah menambahkan NSAppTransportSecurityinfo.plist. stackoverflow.com/questions/38418998/…
Abdul Sadik Yalcin
@HarshitAgrawal Saya masih tidak dapat mengunduh file pdf (memiliki url http) di Aplikasi React Native. Padahal, https urlbekerja dengan baik. Saya telah mencoba menambahkan android:usesCleartextTraffic="true"dan uses-libraryberpisah, tetapi masih tidak berhasil :(
Narendra Singh
@NarendraSingh coba cek apakah url pdf tersebut valid atau tidak dan juga gunakan react-native-fs untuk mengakses sistem file aplikasi untuk mendownload pdf.
Harshit Agrawal
18

Sebuah cara sederhana tersedia android:usesCleartextTraffic="true"untuk AndaAndroidManifest.xml

android:usesCleartextTraffic="true"

Anda AndroidManifest.xmlterlihat seperti

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

Saya harap ini akan membantu Anda.

Mehul Solanki
sumber
11

Jalan mudah

Tambahkan usesCleartextTrafficke AndroidManifest.xml

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

Menunjukkan apakah aplikasi bermaksud menggunakan traffic jaringan cleartext, seperti HTTP cleartext. Nilai default untuk aplikasi yang menargetkan API level 27 atau lebih rendah adalah "true". Aplikasi yang menargetkan API level 28 atau lebih tinggi secara default ke "false".

Arshid KV
sumber
9

Cukup setel usesCleartextTraffictanda di tag aplikasi AndroidManifest.xmlfile. Tidak perlu membuat file konfigurasi untuk Android.

 <application
   android:usesCleartextTraffic="true"
   .
   .
   .>
Asif Patel
sumber
8

Untuk React Nativeaplikasi saat menjalankan debug, tambahkan yang xml blockdisebutkan oleh @Xenolion ke react_native_config.xmldalam<project>/android/app/src/debug/res/xml

Mirip dengan cuplikan berikut:

<?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>
Kaviyarasu Duraisamy
sumber
2

saya mendapat masalah yang sama dan saya perhatikan bahwa konfigurasi keamanan saya memiliki TAG yang berbeda seperti jawaban @Xenolion mengatakan

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

jadi saya mengubah TAGS "domain-config" untuk "base-config" dan bekerja, seperti ini:

<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
    </base-config>
</network-security-config>
Sandy Veliz
sumber
bisakah Anda menjawab stackoverflow.com/questions/59116787/…
pratik jaiswal
0

Anda dapat memeriksa apakah Anda mengirim clearText melalui Perbaikan HTTP: https://medium.com/@son.rommer/fix-cleartext-traffic-error-in-android-9-pie-2f4e9e2235e6
ATAU
Dalam Kasus klien HTTP Apache deprecation (Dari Google): Dengan Android 6.0, kami menghapus dukungan untuk klien HTTP Apache. Mulai Android 9, library tersebut dihapus dari bootclasspath dan tidak tersedia untuk aplikasi secara default. Untuk terus menggunakan klien HTTP Apache, aplikasi yang menargetkan Android 9 dan lebih tinggi dapat menambahkan yang berikut ini ke AndroidManifest.xml:

Sumber https://developer.android.com/about/versions/pie/android-9.0-changes-28

pengguna11091094
sumber