Flutter Android OS 9 & 10 http permission internet not work (Aplikasi tidak bisa call API)

   

Hai, Ketika saya sedang mengembangkan Aplikasi Android dengan fungsi login (misalkan) atau call API kadang ada device tertentu (case pada Android 9 & 10) tidak berjalan dengan semestinya.

Pada tutorial ini Mari kita bahas masalah tersebut

Berikut ini merupakan source code potongannya

login() async {
    try {
      final response = await http.post(Uri.encodeFull("http://xxxxxx.ilmuprogram.com/public/api/auth/login"),
          body: {"EMAIL": email, "PASSWORD": password});
      final data = jsonDecode(response.body);
      print(data);
      int value = data['VALUE'];
      String pesan = data['MESSAGE'];
      String emailAPI = data['EMAIL'];
..dst
    } on Exception  catch (exception) {
      _ErrorSocker(exception.toString());
    }


  }

Dan saya sudah menambahkan

 <uses-permission android:name="android.permission.INTERNET"/>
    <application android:usesCleartextTraffic="true"/>

Pada semua manifest

Kemudian saya running & build dapatlah output 2 file yang memiliki size / ukuran yang berbeda

Uji Coba saya Install app-debug dengan size 62mb dan berhasil running (tidak ada kendala), namun masalah terjadi ketika saya menginstall hasil build dari flutter tersebut (app-release) maka di Aplikasi tidak bisa dipakai (tidak bisa login)

Solusi

The guidance in this section applies only to apps that target Android 8.1 (API level 27) or lower. Starting with Android 9 (API level 28), cleartext support is disabled by default.

Penjelasan
Aplikasi yang ingin terhubung ke tujuan hanya dengan menggunakan koneksi aman dapat memilih untuk tidak mendukung cleartext (menggunakan protokol HTTP yang tidak dienkripsi, bukan HTTPS) ke tujuan tersebut. Opsi ini membantu mencegah regresi yang tidak disengaja di aplikasi karena perubahan pada URL yang disediakan oleh sumber eksternal seperti server backend.

Misalnya, sebuah aplikasi mungkin ingin memastikan bahwa semua koneksi ke secure.example.com selalu dilakukan melalui HTTPS untuk melindungi lalu lintas sensitif dari jaringan yang tidak bersahabat.

Buka res/xml/network_security_config.xml:

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

Kita juga dapat menggunakan android: usingCleartextTraffic = “true” di AndroidManifest.xml untuk mode pengembangan, tetapi Kita tidak boleh menggunakannya dalam mode rilis.

Jadi, yang saya lakukan adalah (Pada flutter)
[1] Buat Folder xml pada menu res kemudian buat 1 file dengan nama network_security_config.xml
[2] Kemudian masukkan code berikut ini

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

Berikut tampilannya

Jangan lupa daftarkan xml tersebut di manifest nya.

Tambahkan juga pada manifest


            android:usesCleartextTraffic="true"
            android:cleartextTrafficPermitted="true"

Build ulang Aplikasi Android Anda, dan eng ing eng.. sukses 🙂
Semoga membantu rekan – rekan ya.

   

Wahyu Amaldi, M.Kom has written 191 articles

Hallo Pembaca,
Saya merupakan konsultan di dunia SAP dan merupakan Spesialis .Net Programming.
Saya gemar berbagi pengalaman mengenai SAP & Dunia Programming, dan jika ada sesuatu yang perlu ditanyakan, bisa hubungi saya di email berikut ini:

Email 1 : wahyu.amaldi@outlook.com
Email 2 : wahyu.amaldi@ilmuprogram.com

Semoga Artikel yang Anda baca di website ini berguna dan dapat membantu Anda dalam menemukan solusi.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>