230 lines
6.6 KiB
Markdown
230 lines
6.6 KiB
Markdown
# 📱 Aplikasi Absensi Akademik Berbasis Koordinat dan Foto
|
|
|
|
## 📋 Deskripsi Proyek
|
|
Aplikasi mobile Android untuk sistem absensi akademik yang menggunakan **lokasi GPS** dan **pengambilan foto** untuk validasi kehadiran mahasiswa. Aplikasi ini dirancang untuk mencegah kecurangan absensi dan meningkatkan integritas sistem kehadiran.
|
|
|
|
## ✨ Fitur Utama
|
|
- 🔐 **Login Pengguna** - Autentikasi mahasiswa
|
|
- 📍 **Tracking Lokasi Real-time** - Menggunakan Fused Location Provider
|
|
- 🏫 **Validasi Area Absensi** - Radius-based location validation
|
|
- 📸 **Pengambilan Foto Selfie** - Dokumentasi kehadiran
|
|
- ✓ **Validasi Data** - Memastikan semua data lengkap sebelum submit
|
|
- 📡 **Integrasi N8n Webhook** - Pengiriman data ke server
|
|
- ⚠️ **Error Handling** - Pesan error yang user-friendly
|
|
- 🔄 **Loading States** - Visual feedback untuk proses async
|
|
|
|
## 🛠️ Tech Stack
|
|
- **Platform**: Android 12+ (API 28+)
|
|
- **Language**: Kotlin
|
|
- **UI Framework**: Jetpack Compose
|
|
- **Location Services**: Google Play Services (Fused Location Provider)
|
|
- **Camera**: Android Camera Intent
|
|
- **Networking**: HttpURLConnection + JSON
|
|
- **Build Tool**: Gradle Kotlin DSL
|
|
|
|
## 📦 Struktur Proyek
|
|
```
|
|
app/src/main/
|
|
├── java/id/ac/ubharajaya/sistemakademik/
|
|
│ ├── MainActivity.kt # Main UI dan Activity
|
|
│ ├── config/
|
|
│ │ └── AttendanceConfig.kt # Konfigurasi aplikasi
|
|
│ ├── models/
|
|
│ │ └── AttendanceRecord.kt # Data models
|
|
│ ├── network/
|
|
│ │ └── N8nService.kt # API service untuk N8n
|
|
│ ├── utils/
|
|
│ │ ├── LocationValidator.kt # Validasi lokasi
|
|
│ │ └── ErrorHandler.kt # Error handling
|
|
│ └── ui/
|
|
│ ├── components/
|
|
│ │ └── AttendanceComponents.kt # Reusable UI components
|
|
│ └── theme/
|
|
│ └── Theme.kt # Material 3 theme
|
|
└── res/ # Resources
|
|
```
|
|
|
|
## 🚀 Cara Menjalankan
|
|
|
|
### Prerequisites
|
|
- Android Studio (Flamingo atau lebih baru)
|
|
- Android SDK 28 atau lebih baru
|
|
- Device/Emulator dengan Google Play Services
|
|
|
|
### Setup
|
|
1. **Clone atau buka project**
|
|
```bash
|
|
cd Starter-EAS-2025-2026
|
|
```
|
|
|
|
2. **Sinkronisasi Gradle**
|
|
- Android Studio akan otomatis sinkronisasi atau jalankan:
|
|
```bash
|
|
./gradlew sync
|
|
```
|
|
|
|
3. **Update Konfigurasi** (opsional)
|
|
- Edit `AttendanceConfig.kt` untuk mengubah:
|
|
- Koordinat referensi kampus
|
|
- Radius area absensi
|
|
- NPM dan Nama mahasiswa
|
|
- Webhook URL
|
|
|
|
4. **Build & Run**
|
|
```bash
|
|
./gradlew installDebug
|
|
```
|
|
atau gunakan tombol "Run" di Android Studio
|
|
|
|
## ⚙️ Konfigurasi
|
|
|
|
### AttendanceConfig.kt
|
|
File ini berisi semua konfigurasi aplikasi:
|
|
|
|
```kotlin
|
|
// Lokasi kampus (latitude, longitude)
|
|
const val REFERENCE_LATITUDE = -7.0
|
|
const val REFERENCE_LONGITUDE = 110.4
|
|
|
|
// Radius area absensi (meter)
|
|
const val ALLOWED_RADIUS_METERS = 100.0
|
|
|
|
// Data mahasiswa
|
|
const val STUDENT_NPM = "202310715082"
|
|
const val STUDENT_NAMA = "Fazri Abdurrahman"
|
|
|
|
// Webhook endpoints
|
|
const val WEBHOOK_PRODUCTION = "https://n8n.lab.ubharajaya.ac.id/webhook/..."
|
|
const val WEBHOOK_TEST = "https://n8n.lab.ubharajaya.ac.id/webhook-test/..."
|
|
```
|
|
|
|
### Mengubah Koordinat Referensi
|
|
1. Buka `AttendanceConfig.kt`
|
|
2. Update `REFERENCE_LATITUDE` dan `REFERENCE_LONGITUDE`
|
|
3. Atur `ALLOWED_RADIUS_METERS` sesuai kebutuhan
|
|
4. Rebuild aplikasi
|
|
|
|
## 🔐 Permissions
|
|
Aplikasi memerlukan permissions berikut:
|
|
- `ACCESS_FINE_LOCATION` - Untuk GPS precision
|
|
- `ACCESS_COARSE_LOCATION` - Fallback lokasi
|
|
- `CAMERA` - Untuk pengambilan foto
|
|
- `INTERNET` - Untuk komunikasi dengan server
|
|
|
|
Semua permissions diminta secara runtime (Android 6+).
|
|
|
|
## 📡 API Integration
|
|
|
|
### Webhook N8n
|
|
Aplikasi mengirim data ke N8n webhook dengan format:
|
|
```json
|
|
{
|
|
"npm": "202310715082",
|
|
"nama": "Fazri Abdurrahman",
|
|
"latitude": -7.0251,
|
|
"longitude": 110.4105,
|
|
"timestamp": 1705250400000,
|
|
"foto_base64": "base64_encoded_image_string"
|
|
}
|
|
```
|
|
|
|
### Response Handling
|
|
- **Status 200**: Absensi diterima, akan reset form setelah 2 detik
|
|
- **Status lain**: Error, tampilkan pesan error
|
|
|
|
## 🎨 UI Components
|
|
|
|
### 1. PhotoPreviewCard
|
|
Menampilkan preview foto yang diambil dengan opsi untuk ambil ulang.
|
|
|
|
### 2. LocationStatusCard
|
|
Menampilkan status lokasi, koordinat, dan jarak dari titik referensi.
|
|
|
|
### 3. ErrorAlertCard
|
|
Card untuk menampilkan error messages yang dismissable.
|
|
|
|
### 4. SubmitButtonWithLoader
|
|
Button dengan loading indicator untuk submit.
|
|
|
|
## 🔧 Validasi Lokasi
|
|
|
|
### Haversine Formula
|
|
Aplikasi menggunakan Haversine formula untuk menghitung jarak antara dua koordinat GPS:
|
|
```kotlin
|
|
d = 2 * R * asin(sqrt(sin²(Δφ/2) + cos(φ1) * cos(φ2) * sin²(Δλ/2)))
|
|
```
|
|
|
|
### Proses Validasi
|
|
1. Ambil koordinat mahasiswa dari GPS
|
|
2. Hitung jarak ke koordinat referensi
|
|
3. Bandingkan dengan ALLOWED_RADIUS_METERS
|
|
4. Tampilkan status valid/invalid
|
|
|
|
## 🐛 Troubleshooting
|
|
|
|
### GPS tidak berfungsi
|
|
- Pastikan aplikasi memiliki izin GPS
|
|
- Nyalakan location services di device
|
|
- Gunakan device dengan Google Play Services
|
|
|
|
### Foto tidak terakses
|
|
- Pastikan izin CAMERA granted
|
|
- Coba restart aplikasi
|
|
|
|
### Koneksi ke N8n gagal
|
|
- Cek internet connection
|
|
- Verifikasi webhook URL di `AttendanceConfig.kt`
|
|
- Test dengan `WEBHOOK_TEST` terlebih dahulu
|
|
|
|
### Lokasi selalu invalid
|
|
- Update koordinat referensi di `AttendanceConfig.kt`
|
|
- Tingkatkan `ALLOWED_RADIUS_METERS` jika diperlukan
|
|
|
|
## 📊 Testing
|
|
|
|
### Test dengan N8n Webhook Test
|
|
1. Set `isTest = true` di MainActivity submit button
|
|
2. Data akan dikirim ke `WEBHOOK_TEST`
|
|
3. Lihat response di N8n dashboard
|
|
|
|
### Manual Testing Checklist
|
|
- [ ] Permission request berfungsi
|
|
- [ ] GPS location terakses
|
|
- [ ] Camera foto terakses
|
|
- [ ] Foto preview ditampilkan
|
|
- [ ] Validasi lokasi bekerja
|
|
- [ ] Submit ke webhook berhasil
|
|
- [ ] Error handling tampil dengan baik
|
|
|
|
## 📝 Notes
|
|
|
|
### Privacy & Security
|
|
- Foto disimpan sebagai JPEG dengan quality 80%
|
|
- Koordinat dapat di-offset untuk privacy (lihat `AttendanceConfig.LATITUDE_OFFSET`)
|
|
- Gunakan HTTPS untuk komunikasi dengan server
|
|
- Implementasikan authentication token di N8n
|
|
|
|
### Future Improvements
|
|
- [ ] Attendance history dengan Room Database
|
|
- [ ] User login screen
|
|
- [ ] Multiple course support
|
|
- [ ] Biometric verification
|
|
- [ ] Offline mode dengan sync
|
|
- [ ] Push notifications untuk deadline
|
|
- [ ] QR code verification
|
|
|
|
## 📧 Support
|
|
Untuk pertanyaan atau masalah, silakan hubungi:
|
|
- **Institusi**: Universitas Bhakti Raharya
|
|
- **Mata Kuliah**: Pemrograman Mobile
|
|
- **Tahun Ajaran**: 2025-2026
|
|
|
|
## 📄 License
|
|
Project ini dibuat sebagai tugas akademik. Gunakan dengan bijak.
|
|
|
|
---
|
|
|
|
**Version**: 1.0
|
|
**Last Updated**: January 14, 2026
|
|
|