Koneksi ke Websocket di Android menggunakan Scarlet

Halo selamat siang bagi yang merayakannya. Menyambut bulan suci Ramadan, mari kita isi dengan menulis sesuatu yang berfaedah. Kali ini saya akan menulis tentang koneksi ponsel Andriod ke websocket menggunakan librari Scarlet. Disclaimer: Ini cuma catatan pribadi saja supaya tidak lupa.

Sebelumnya, apa itu websocket? Menurut Wikipedia, websocket adalah salah satu protokol komunikasi yang menyediakan fitur chanel komunikasi full-duplex dalam koneksi TCP. Artinya apa? Entahlah, untuk detailnya silakan saja baca di sini.

Salah satu kegunaan websocket adalah dalam aplikasi chat yang mengharuskan peramban/ponsel kita selalu realtime menerima data. Kan tidak elok jika hari ini kita kirim pesan ke orang lain, baru diterima esok hari. Kegunaan lain dari protokol ini adalah buat aplikasi yang memang mengharuskan data dikirim secara realtime, misal skor judi bola terbaru atau harga komoditas saat ini.

Memang sih kita bisa menggunakan librari macam retrofit dan mengakses url REST APi biasa agar mendapatkan data yang berulang, menggunakan fitur interval dan repeat() seperti di bawah, tapi katanya langkah seperti ini tidak disarankan.

Salah satu cara yang katanya disarankan adalah lewat protokol websocket. Alih-alih berulangkali meminta server kasih data via REST API, kita melakukan subscribe dan menunggu server mengirimkan datanya secara terus menerus. Nah salah satu librari yang bisa digunakan adalah Scarlet buatan Tinder.

Dari deskripsi di reponya, Scarlet diklaim sebagai client websocket untuk Android yang terinspirasi dari Retrofit. Jika Retrofit banyak digunakan untuk kepentingan akses REST API, Scarlet untuk protokol websocket.

Saat tulisan ini dibuat, Scarlet baru mencapai versi 0.2.4 dengan dokumentasi yang masih menggunakan versi sebelumnya, 0.1.7. Ada beberapa perbedaan antara versi terbaru dengan sebelumnya, salah satunya tidak adanya fitur Scarlet.Builder(). Jadi bagi anda yang mau coba librari ini, pastikan dulu menggunakan versi yang mana, agar tidak bingung. Saya sendiri pakai versi 0.2.4.

Untuk mencoba websocket ini, kita contek mentah-mentah saja sampel yang dari repo Githubnya, dengan beberapa penyesuaian. Kita akan buat aplikasi yang menampilkan data harga Bitcoin ter-update yang bersumber dari Gdax.com alias coinbase.

Karena cuma sampel, mari kita buat aplikasinya sesimpel mungkin sehingga mari kurangi librari-librari lain yang digunakan, terutama Dagger dan kawan-kawannya :D. Juga tanpa arsitektur macam-macam seperti MVVM atau MVP. Spageti kode is debes!!!1!

Pertama, kita impor dulu librari-librari yang akan digunakan. Di sini saya menggunakan librari Scarlet (versi terbaru) beserta perintilannya, Gson, OkHttp, dan RxJava.

Kalau sudah disinkronisasi, mari buat berkas interface untuk akses servisnya. Kelas interface SocketServiceApi yang dibuat mirip dengan kelas interface pada Retrofit kebanyakan.

Berikut kelas data untuk Subscribe dan Ticker. Sampai sini, sekilas tidak ada beda dengan Retrofit kan ya.

Sekarang kita aplikasikan di MainActivity. Kita buat objek Subscribe, koin mana yang akan kita subscribe ke Gdax.

Lalu kita buat komponen-komponen yang akan digunakan oleh Scarlet, seperti klien okHttp dan Gson untuk menerjemahkan Json ke bentuk objek java eh kotlin.

Di Scarlet yang terbaru, alih-alih menggunakan Scarlet.Builder() sesuai contoh di readme-nya, inisialisasi servis socket kini harus menyertakan objek protocol dan configuration. Mari kita buat.

Di berkas layout, masukkan widget tombol ke dalam layout yang sudah disertakan:

Karena menggunakan Kotlin, kita tidak usah lagi memanggil findViewById, cukup panggil nama id-nya langsung di MainActivity. Di onCreate(), tambahkan kode berikut:

Implementasi interface SocketServiceApi dilakukan di fungsi doSubscribeSocket. Mari kita implementasikan.

Pada kode di atas, kita melakukan subscribe koin BTC sesuai yang didefinisikan oleh BITCOIN_TICKER_SUBSCRIBE_MESSAGE, dan hasilnya akan ditampilkan di logcat dan textView secara realtime. Setelah itu, mari kita build dan jalankan di ponsel atau emulator.

Berhasil? harusnya tidak ya. Karena kita belum memberikan izin agar aplikasi dapat mengakses jaringan internet. Silakan buka berkas AndroidManifest.xml dan masukkan izin untuk internet.

Seharusnya sekarang aplikasinya sudah bisa mengakses internet. Coba klik tombol OK dan lihat di logcat, apakah ada permintaan ke websocket atau tidak. Kalau berhasil, harusnya muncul logcat seperti ini:

Setelah itu tunggulah hingga ada jawaban dari server Gdax. Di saya, ada delay lumayan lama (sekitar 5-10 detik) sebelum data harga Bitcoin muncul di logcat.

Begini tampilan di aplikasinya.

Harga yang muncul akan diupdate secara otomatis

Kode lengkapnya bisa dilihat di sini.

Ya sudah, sekian saja tulisannya. Bagaimana, mudah sekali, kan, pemirsa?

1 Thought.

Ada komentar?

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: