Daftar dan Belajar Sekarang!

Error ssl saat mengikuti tutorial android-kotlin api

foto rious
8 Kontribusi 2 Coto
2 bulan yang lalu
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.
  • saat membahasa video tutorial tertentu di forum umum, biasakan sertakan link ya, biar orang tahu kamu menanyakan bagian yang mana - hilmanski
  • 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 ) - rious
  • btw, saya mengerjakannya sambil online, jadi koneksi aman-aman aja - rious
Tampikan semua komentar

Tag: android kotlin api

✔ Forum ini sudah terjawab


Jawaban
foto rious
8 Kontribusi 2 Coto
1 bulan yang lalu
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.
object Apifactory{

    // Add legacy cipher suite for Android 4

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

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

interface PlaceholderApi{
    @GET("api/json/get/N1WAZtL1u")
    fun getPosts() : Deferred<Response<List<BarangData>>>
}
Supaya support TSL 1.2 untuk android 4.4 ke bawah, saya menggunakan Google Play Sevices.
implementation "com.google.android.gms:play-services-auth:16.0.1"
Lalu panggil di MainActify sebelum setContentView atau saat aplikasi baru di jalankan.
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.
        }
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
answered icon
foto rious
8 Kontribusi 2 Coto
1 bulan yang lalu
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.
object Apifactory{

    // Add legacy cipher suite for Android 4

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

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

interface PlaceholderApi{
    @GET("api/json/get/N1WAZtL1u")
    fun getPosts() : Deferred<Response<List<BarangData>>>
}
Supaya support TSL 1.2 untuk android 4.4 ke bawah, saya menggunakan Google Play Sevices.
implementation "com.google.android.gms:play-services-auth:16.0.1"
Lalu panggil di MainActify sebelum setContentView atau saat aplikasi baru di jalankan.
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.
        }
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


Login untuk diksusi di forum sekolah koding