- Travelbound, yang menampilkan jadwal perjalanan, info penginapan, dan PDF, pada praktiknya hanya menampilkan konten yang diambil dari web sambil menyertakan pelacakan dan bahkan iklan perjalanan, jadi dicoba diganti dengan halaman web yang menyediakan informasi yang sama
- Dengan me-root perangkat virtual Android dan mencegat trafik memakai HTTP Toolkit, terungkap bahwa API yang menggabungkan nama pengguna dan kata sandi ke dalam URL mengembalikan seluruh konten aplikasi dalam bentuk JSON
- Dengan skrip Ruby dan Cron, JSON terbaru diambil secara berkala lalu diubah menjadi HTML, sambil mengecualikan data iklan dan hanya mengekspos file yang diperlukan seperti jadwal dan PDF
- Versi web memungkinkan menyalin, mencetak, menyimpan, memberi bookmark, dan mencari, berjalan di lebih banyak jenis perangkat, serta menghapus kode pelacakan dan iklan dari aplikasi asli
- Aplikasi asli membesar dari 43MB menjadi 124MB setelah mengunduh konten, sedangkan halaman web hanya 0.05MB dan gambar opsionalnya hanya 35MB, sehingga web lebih cocok untuk konten bergaya dokumen yang dikirim lewat HTML dan HTTP
Travelbound yang sebenarnya cukup jadi halaman web
- Untuk memeriksa jadwal perjalanan Disneyland, transportasi, dan info penginapan sekolah seni pertunjukan yang akan dihadiri anaknya, pengguna harus memasang aplikasi Travelbound
- Konten inti aplikasi dikirim lewat web dalam bentuk teks, gambar, dan tautan PDF
- Fitur yang membedakannya dari halaman web justru dua hal yang merugikan pengguna
- Mengirim data pelacakan yang terhubung dengan Google Account ke pengembang
- Mengiklankan produk perjalanan lain dari agen yang sama dengan nama
inspirations
- Jika berupa halaman web, kontennya bisa disalin, dicetak, disimpan, diberi bookmark, dan dicari, dapat digunakan di hampir semua perangkat, dan berpotensi punya aksesibilitas lebih baik
Mencegat trafik aplikasi Android
- Membuat perangkat virtual baru di Virtual Device Manager milik Android Studio lalu memastikan
adb shellberfungsi - Me-root perangkat virtual Android 33 dengan rootAVD
./rootAVD.sh system-images/android-33/google_apis_playstore/x86_64/ramdisk.img - Root diperlukan agar aplikasi yang memakai Certificate Pinning mempercayai sertifikat TLS self-signed milik proxy man-in-the-middle
- Tanpa root, aplikasi seperti Travelbound akan menganggap sertifikat tidak valid dan menolak komunikasi
- Setelah cold boot, menjalankan Magisk dan mengatur agar akses
suuntuk aplikasi yang memintanya diizinkan otomatis- Jika tidak diizinkan otomatis, HTTP Toolkit berjalan dalam mode non-privileged tanpa menunggu respons pengguna
- Mencegat trafik perangkat virtual Android dengan HTTP Toolkit
- Memasang penyedia VPN palsu untuk meneruskan trafik perangkat ke proxy
- Karena batasan keamanan Android, sertifikat root CA yang dipasang harus ditambahkan secara manual
- Setelah memasang Travelbound dari Play Store, pengaturan dibuat agar hanya trafik aplikasi itu yang diproksikan untuk mengurangi noise
Panggilan API dan struktur data
- Aplikasi memanggil URL API dengan format berikut dengan menyambungkan nama pengguna dan kata sandi milik grup perjalanan
https://travelbound.api.vamoos.com/api/itineraries/…} - Nama pengguna dan kata sandi dibagikan ke seluruh grup perjalanan sebagai kredensial bersama
- JSON respons API berisi seluruh konten yang ditampilkan aplikasi
- Array yang memuat tiap bagian jadwal perjalanan
- Array iklan
inspirations - Array referensi silang yang memuat file seperti gambar yang dirujuk dari bagian lain
- Bahkan kode HTML yang akan ditampilkan aplikasi juga termasuk dalam data, sehingga cara penyampaian kontennya sendiri mirip halaman web
- URL gambar S3 memiliki waktu kedaluwarsa yang relatif singkat, jadi JSON perlu diambil ulang secara berkala meski kontennya tidak berubah
- Alternatifnya adalah menyimpan gambar dalam cache lokal, dan tampaknya aplikasi asli memakai cara ini
Mengubah JSON menjadi HTML
- Menulis skrip Ruby dan mengatur Cron agar mengambil JSON terbaru sesuai jadwal lalu membuat halaman HTML
- Dalam proses pembuatan, iklan
inspirationsyang termasuk dalamoverlayRowspada skema data dihapus sepenuhnya - Halaman web hanya menampilkan informasi berikut
- Item jadwal perjalanan
- Semua file yang tidak dirujuk oleh iklan atau jadwal
- Daftar kedua dipakai sebagai cara sederhana untuk mengumpulkan semua tautan unduhan PDF di satu tempat
- Halaman yang dihasilkan dilindungi dengan kata sandi yang sama seperti yang diberikan ke grup perjalanan yang ada
- JSON asli dimasukkan ke dalam elemen
<details>agar bisa memeriksa apakah nantinya muncul data skema yang belum dipahami skrip yang ada
Versi web yang lebih kecil dan fleksibel
- Halaman web memang tidak seatraktif aplikasi asli, tetapi ukurannya jauh lebih kecil dan menyediakan kemampuan dasar web tanpa implementasi tambahan
- Konten bisa disalin, dicetak, disimpan, diberi bookmark, dan dicari, serta dapat diakses dari lebih banyak jenis perangkat
- Dengan menghapus kode pelacakan dan iklan, dua fungsi tak perlu dari aplikasi asli juga ikut hilang
- Meski belum diaudit secara formal dari sisi aksesibilitas, aplikasi asli tampak memiliki elemen yang lebih sulit digunakan dengan teknologi bantu dibanding versi web sederhana
Perbandingan ukuran dan cara distribusi
- Aplikasi Travelbound asli berukuran 43MB pada awalnya dan membesar hingga 124MB setelah mengunduh konten tambahan
- Halaman web pengganti hanya 0.05MB, dan jika semua gambar diunduh secara opsional, hanya menambah 35MB
- Kedua pendekatan dibagikan ke grup perjalanan agar pengguna bisa memilih apakah ingin memakai aplikasi atau halaman web
- Untuk sebagian tugas, aplikasi memang cocok, tetapi konten Travelbound yang sudah ditulis dalam HTML dan dikirim lewat HTTP bukanlah kasus yang memerlukan aplikasi
- Distribusi lewat app store menambah biaya dan beban pengembangan, dan membatasi konten bergaya dokumen seperti ini ke aplikasi membuat jumlah orang yang bisa mengaksesnya serta fitur bawaan yang tersedia menjadi lebih sedikit dibanding memublikasikannya langsung di web
1 komentar
Komentar di Lobste.rs
Saya sudah muak melihat layanan yang pada dasarnya tidak lebih dari halaman web berubah menjadi aplikasi yang membengkak, jadi lega rasanya ternyata bukan cuma saya
Di Android, pembuatan pintasan halaman web tidak terlalu terlihat oleh pengguna, jadi saya juga bisa memahami mengapa perusahaan lebih memilih aplikasi. Namun jika sebuah layanan mengirimkan kata sandi lewat SMS bersama tautan aplikasi, web app adalah pilihan yang paling tepat. Cukup tautkan langsung ke halaman kata sandi, selesai
Di toko aplikasi /e/OS juga ada bagian “web apps” yang mengumpulkan item seperti versi web Google Maps. PWA sendiri mudah digunakan, tetapi saya tidak tahu seberapa aktif dan menonjol Chrome bawaan atau Android dari produsen perangkat mengarahkan pengguna untuk membuat pintasan
Jelas bahwa cara saat ini bukan untuk kepentingan pengguna, dan perlu dipikirkan bagaimana memperbaikinya
Bagi pengguna biasa, terutama orang yang tidak akrab dengan komputer, perbedaan antara aplikasi dan halaman web pada praktiknya hanyalah pintasan di desktop atau layar utama
Jika pintasan halaman web bisa didistribusikan secara langsung, itu akan menjadi cara yang sangat murah untuk mengembangkan aplikasi, dan mungkin sebagian besar aplikasi sebenarnya bisa dibuat seperti itu
Ketika ikon ini ditekan, yang terbuka bukan tab browser baru, melainkan jendela mandiri seperti aplikasi biasa. Saya mendistribusikan alat pengeluaran keluarga buatan sendiri dengan cara ini tanpa menerbitkannya di App Store
Banyak sekali “aplikasi” sebenarnya cukup berupa halaman web saja. Menjengkelkan sekali melihat begitu banyak situasi ketika orang harus memasang aplikasi dulu hanya untuk memakai fungsi kecil tanpa alasan yang jelas
Menggunakan aplikasi untuk koneksi ke perangkat lokal masih bisa dimengerti, tetapi ada juga sistem yang justru membuat aplikasi berkomunikasi dengan perangkat lokal melalui server pusat. Kalau begitu, satu-satunya alasan untuk harus memasang aplikasi pun hilang
iPhone generasi awal sempat mencoba menjadikan halaman web sebagai platform aplikasi, tetapi pada akhirnya ekosistemnya berubah menjadi kekacauan seperti sekarang