Error ssl saat mengikuti tutorial android-kotlin api

Assalamualaikum.

Mastah, saya coba langkah per langkah sesuai dengan video tutorial, tapi saat saya jalankan, koneksinya fail.

Saat saya ubah di view modelnya di onFailure :

_response.value = t.message.toString()

Saya dapat detail errornya :

javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb82ec780: Failure in SSL library, usually a protocol error
eroor:1407742E:SSL routines: SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version (external/openssl/ssl/s23_clnt.c:741 0x9317e925:0x00000000)

Mohon pencerahannya mastah...

Terima kasih sebelumnya

Tutorial video : Mengkonsumsi API di aplikasi android - menggunakan retrofit untuk request https://sekolahkoding.com/kelas/mengkonsumsi-api-di-aplikasi-android/video/menggunakan-retrofit-untuk-request

Catatan tambahan : Saya coba ganti emulatornya, yang sebelumnya menggunakan emulator dari android studionya langsung (Pixel 2 API 16), menjadi emulator luar (NOX 6.5.0.1, Android 7 (API 24)) dan hasilnya berhasil (masuk ke onResponse).

Btw, project yang saya buat min sdknya versi 14, jadi kemungkinan sumber masalahnya bukan dari versi sdknya

Dan scriptnya tetap sama, jadi yang jelas bukan dari scriptnya.

Sedangkan emulator android studio (Pixel 2 API 16) berjalan normal kalau scriptnya tidak berhubungan dengan retrofit (request API). Sedangkan browser di dalam emulator bisa terhubungan dengan internet.

Walaupun script bisa jalan, tetep saya penasaran... Kalau ada yang tahu, mohon pencerahannya. Saya takutnya aplikasi yang saya buat dibeberapa user tidak bisa dijalankan.

avatar rious
@rious

8 Kontribusi 2 Poin

Dipost 4 tahun yang lalu

Tanggapan

saat membahasa video tutorial tertentu di forum umum, biasakan sertakan link ya, biar orang tahu kamu menanyakan bagian yang mana

Tutorial menggunakan retrofit untuk request, https://sekolahkoding.com/kelas/mengkonsumsi-api-di-aplikasi-android/video/menggunakan-retrofit-untuk-request

Semua kodenya sesuai dengan tutorial, tapi saat saya jalankan di emulator android studio (Pixel 2 API 16), yang keluar onFailure bukan onResponse, dan saat saya ganti _response di onFailure jadi _response.value = t.message.toString() value dari _response adalah seperti yang ada di atas ( SSL handshake aborted )

btw, saya mengerjakannya sambil online, jadi koneksi aman-aman aja

taro linknya di atas ya (di pertanyaan), biar yang mau bantu bisa lihat refrensi video yang kamu maksud

Sudah sy update kang, Saya juga berhasil menjalankan onResponse, tapi sumber masalahnya belum ketemu...

maksudnya programnya berhasil berjalan, tapi ada warning itu ya?

mungkin link SO ini bisa jadi refrensi https://stackoverflow.com/questions/29916962/javax-net-ssl-sslhandshakeexception-javax-net-ssl-sslprotocolexception-ssl-han

referensinya membantu banget, terimakasih mastah

silahkan share di bawah ya di kolom "jawaban" kalau sudah ketemu. biar yang lain bisa belajar juga

1 Jawaban:

Jawaban Terpilih

Akhirnya ketemu inti permasalah sama cara memperbaikinya.

Masalah SSL handshake error itu karena android versi 4 sampai 4.4 menggunakan TSL 1.2, yang sudah tidak dipakai di versi android di atasnya.

Selain menggunakan retrofit + moshi, saya pakai Okhttp untuk membangun jembatan ke API. <pre> object Apifactory{

// Add legacy cipher suite for Android 4

fun retrofit() : Retrofit = Retrofit.Builder()
    .client(OkHttpClient().newBuilder().build())
    .baseUrl(&quot;https://next.json-generator.com/&quot;)
    .addConverterFactory(MoshiConverterFactory.create())
    .addCallAdapterFactory(CoroutineCallAdapterFactory())
    .build()

val placeHolderApi : PlaceholderApi = retrofit().create(PlaceholderApi::class.java)

}

interface PlaceholderApi{ @GET("api/json/get/N1WAZtL1u") fun getPosts() : Deferred&lt;Response&lt;List&lt;BarangData&gt;&gt;&gt; } </pre>

Supaya support TSL 1.2 untuk android 4.4 ke bawah, saya menggunakan Google Play Sevices.

<pre> implementation "com.google.android.gms:play-services-auth:16.0.1" </pre>

Lalu panggil di MainActify sebelum setContentView atau saat aplikasi baru di jalankan.

<pre> try { ProviderInstaller.installIfNeeded(this) } catch (e: GooglePlayServicesRepairableException) { // Prompt the user to install/update/enable Google Play services. GoogleApiAvailability.getInstance() .showErrorNotification(this, e.connectionStatusCode) } catch (e: GooglePlayServicesNotAvailableException) { // Indicates a non-recoverable error: let the user know. } </pre>

Semua cara itu berhasil di coba di API 19 dan API 24

Dan cara lain selain menggunakan Google Play Services, menggunakan Okhttp, cuman caranya lebih rumit.

Sumber dan detail lebih jelas : https://stackoverflow.com/questions/55702470/retrofit-okhttp-on-android-4-ssl https://medium.com/tech-quizlet/working-with-tls-1-2-on-android-4-4-and-lower-f4f5205629a

Semoga semua itu bisa membantu teman-teman yang memiliki masalah yang sama. Kalau ada tambahan, tolong komentar, saya juga masih baru dalam pemrograman kotlin-android

avatar rious
@rious

8 Kontribusi 2 Poin

Dipost 4 tahun yang lalu

Login untuk ikut Jawaban