# 🚀 Smart-Attendance: Sistem Absensi Mahasiswa Terintegrasi Cloud **Smart-Attendance** adalah aplikasi Android berbasis **Jetpack Compose** yang dirancang untuk revolusi absensi perkuliahan. Aplikasi ini menjamin integritas data kehadiran dengan menggabungkan verifikasi **Geografis (GPS)**, **Biometrik Visual (Kamera)**, dan **Identitas Digital (SQLite)** dalam satu alur kerja otomatis yang terhubung ke **Google Sheets** via **n8n Automation**. --- ## 🌟 Fitur Utama - **Otentikasi Ganda**: Sistem login dan registrasi berbasis database **SQLite** lokal untuk memastikan akun unik per mahasiswa (berdasarkan NPM). - **Geo-Fencing Validation**: Mendeteksi lokasi presisi hingga 6 digit desimal menggunakan *High Accuracy Priority* dari Google Play Services. - **Visual Identity Verification**: Pengambilan foto wajah langsung (*Real-time Camera*) yang dienkripsi ke format **Base64** untuk bukti kehadiran autentik. - **Dashboard Akademik**: Mahasiswa dapat memilih atau memasukkan Mata Kuliah yang sedang berlangsung. - **Sinkronisasi Instan**: Data dikirim dalam milidetik ke server cloud menggunakan protokol `HttpURLConnection` yang ringan. - **UI Modern & Adaptif**: Antarmuka responsif dengan desain kartu modern dan tema gradasi Hijau-Kuning-Putih yang segar. --- ## 🛠️ Stack Teknologi | Komponen | Teknologi | | :--- | :--- | | **Framework UI** | Jetpack Compose (Modern Toolkit) | | **Bahasa** | Kotlin (100%) | | **Lokasi** | Google Fused Location Provider API | | **Database** | SQLite (Manajemen User Lokal) | | **Networking** | Java URLConnection (JSON Payload) | | **Integrasi** | n8n Webhook & Google Sheets API | | **Image Handling** | Android Graphics Bitmap & Base64 Encoding | --- ## 🏗️ Arsitektur Data ### 1. Database Schema (SQLite) Tabel `users` menyimpan kredensial aman di dalam memori internal perangkat: - `nama` (TEXT): Nama Lengkap Mahasiswa. - `npm` (TEXT - UNIQUE): Nomor Pokok Mahasiswa sebagai identitas unik. - `password` (TEXT): Kata sandi terenkripsi. ### 2. JSON Payload Integration Data dikirim ke Webhook dengan struktur berikut: ```json { "npm": "2021xxxxxx", "nama": "Nabila Suwandira", "latitude": -6.229728, "longitude": 106.989250, "mata_kuliah": "Pemrograman Perangkat Bergerak", "timestamp": 1739456789000, "foto_base64": "/9j/4AAQSkZJRg..." } ``` --- ## 📱 Panduan Penggunaan 1. **Registrasi**: Pengguna baru harus mendaftarkan Nama, NPM, dan Password pada layar "Daftar Akun". 2. **Login**: Masuk menggunakan NPM dan Password yang telah terdaftar. 3. **Izin Akses**: Aplikasi akan meminta izin **Kamera** dan **Lokasi Presisi** (Wajib diberikan untuk melakukan absensi). 4. **Cek Lokasi**: Pastikan koordinat muncul. Jika koordinat belum muncul atau ingin diperbarui, klik tombol **Refresh Lokasi**. 5. **Ambil Foto**: Klik "AMBIL FOTO" untuk membuka kamera. Ambil foto wajah dengan jelas. 6. **Kirim**: Klik "KIRIM ABSENSI". Notifikasi akan muncul jika data berhasil diterima oleh server cloud. --- ## 🔧 Persyaratan Sistem - **Min SDK**: API 28 (Android 9.0 Pie) - **Target SDK**: API 34 (Android 14) - **Hardware**: Perangkat harus memiliki sensor GPS dan Kamera belakang/depan. - **Internet**: Diperlukan koneksi aktif untuk mengirim data absensi. --- ## 🔐 Keamanan & Izin (Permissions) Aplikasi mengimplementasikan standar keamanan Android: - `ACCESS_FINE_LOCATION`: Untuk mendapatkan akurasi GPS terbaik. - `CAMERA`: Digunakan hanya saat proses pengambilan foto bukti hadir. - `INTERNET`: Untuk sinkronisasi data ke database cloud Universitas. --- ## 📊 Monitoring Real-Time Admin dan Mahasiswa dapat memverifikasi status pengiriman secara langsung: - **NTFY Channel**: [Live Notification EAS](https://ntfy.ubharajaya.ac.id/EAS) - **Google Sheets Database**: [Sheet Kehadiran Mahasiswa](https://docs.google.com/spreadsheets/d/1jH15MfnNgpPGuGeid0hYfY7fFUHCEFbCmg8afTyyLZs/edit?gid=0#gid=0) --- ## 🎓 Identitas Mahasiswa **Nabila Suwandira** **NPM**: [Input NPM Anda Disini] **Prodi**: Teknik Informatika **Instansi**: Universitas Bhayangkara Jakarta Raya **Mata Kuliah**: Pemrograman Perangkat Bergerak **Project**: Evaluasi Akhir Semester (EAS) 2025-2026