269 lines
6.2 KiB
Markdown
269 lines
6.2 KiB
Markdown
# 🎓 Sistem Absensi Akademik - Universitas Bhayangkara Jakarta Raya
|
|
|
|
## 📋 Deskripsi
|
|
Aplikasi mobile berbasis Android untuk sistem absensi mahasiswa dengan validasi lokasi GPS dan verifikasi foto.
|
|
|
|
---
|
|
|
|
## 🚀 Fitur Utama
|
|
|
|
### ✅ Sudah Diimplementasikan:
|
|
- 🔐 **Login Pengguna** - Autentikasi mahasiswa dengan NPM dan Password
|
|
- 📍 **Pengambilan Koordinat Lokasi** - GPS Latitude & Longitude otomatis
|
|
- 🏫 **Validasi Lokasi Absensi** - Validasi radius area kampus (100 meter)
|
|
- 📸 **Pengambilan Foto Mahasiswa** - Foto wajib saat absensi
|
|
- 🕒 **Pencatatan Waktu Absensi** - Timestamp otomatis
|
|
- 📄 **Riwayat Kehadiran** - History absensi mahasiswa
|
|
- ⚠️ **Notifikasi Ditolak** - Alert jika lokasi di luar radius atau error
|
|
|
|
---
|
|
|
|
## 📁 Struktur File
|
|
|
|
```
|
|
id.ac.ubharajaya.sistemakademik/
|
|
├── LoginActivity.kt # Halaman login
|
|
├── MainActivity.kt # Halaman absensi utama
|
|
├── HistoryActivity.kt # Halaman riwayat kehadiran
|
|
└── utils/
|
|
└── SessionManager.kt # Manajemen session login
|
|
```
|
|
|
|
---
|
|
|
|
## 🔧 Setup & Instalasi
|
|
|
|
### 1. **Buat File-File Berikut:**
|
|
|
|
**Struktur folder:**
|
|
```
|
|
app/src/main/java/id/ac/ubharajaya/sistemakademik/
|
|
├── LoginActivity.kt
|
|
├── MainActivity.kt
|
|
├── HistoryActivity.kt
|
|
└── utils/
|
|
└── SessionManager.kt
|
|
```
|
|
|
|
### 2. **Update AndroidManifest.xml**
|
|
Ganti file AndroidManifest.xml dengan yang sudah disediakan.
|
|
|
|
### 3. **Dependencies (build.gradle)**
|
|
Pastikan dependencies berikut sudah ada di `build.gradle.kts (Module: app)`:
|
|
|
|
```kotlin
|
|
dependencies {
|
|
implementation("androidx.core:core-ktx:1.12.0")
|
|
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0")
|
|
implementation("androidx.activity:activity-compose:1.8.2")
|
|
implementation(platform("androidx.compose:compose-bom:2024.02.00"))
|
|
implementation("androidx.compose.ui:ui")
|
|
implementation("androidx.compose.ui:ui-graphics")
|
|
implementation("androidx.compose.ui:ui-tooling-preview")
|
|
implementation("androidx.compose.material3:material3")
|
|
implementation("androidx.compose.material:material-icons-extended")
|
|
|
|
// Google Location Services
|
|
implementation("com.google.android.gms:play-services-location:21.1.0")
|
|
}
|
|
```
|
|
|
|
### 4. **Koordinat Kampus**
|
|
Di file `MainActivity.kt`, ganti koordinat kampus sesuai lokasi asli:
|
|
|
|
```kotlin
|
|
val kampusLat = -6.200000 // Latitude kampus
|
|
val kampusLon = 106.816666 // Longitude kampus
|
|
val maxRadius = 100.0 // Radius dalam meter
|
|
```
|
|
|
|
---
|
|
|
|
## 🌐 Endpoint API yang Dibutuhkan
|
|
|
|
### 1. **Login Endpoint**
|
|
```
|
|
POST https://n8n.lab.ubharajaya.ac.id/webhook/login-mahasiswa
|
|
|
|
Request Body:
|
|
{
|
|
"npm": "12345",
|
|
"password": "password123"
|
|
}
|
|
|
|
Response Success:
|
|
{
|
|
"success": true,
|
|
"nama": "Arif R D",
|
|
"prodi": "Teknik Informatika"
|
|
}
|
|
|
|
Response Failed:
|
|
{
|
|
"success": false,
|
|
"message": "NPM atau Password salah"
|
|
}
|
|
```
|
|
|
|
### 2. **Absensi Endpoint** (Sudah Ada)
|
|
```
|
|
POST https://n8n.lab.ubharajaya.ac.id/webhook/23c6993d-1792-48fb-ad1c-ffc78a3e6254
|
|
|
|
Request Body:
|
|
{
|
|
"npm": "12345",
|
|
"nama": "Arif R D",
|
|
"latitude": -6.200000,
|
|
"longitude": 106.816666,
|
|
"jarak_dari_kampus": 50,
|
|
"timestamp": 1704067200000,
|
|
"waktu": "14/01/2026 10:30:00",
|
|
"foto_base64": "base64_encoded_image"
|
|
}
|
|
```
|
|
|
|
### 3. **Riwayat Absensi Endpoint**
|
|
```
|
|
GET https://n8n.lab.ubharajaya.ac.id/webhook/riwayat-absensi?npm=12345
|
|
|
|
Response:
|
|
[
|
|
{
|
|
"id": "1",
|
|
"npm": "12345",
|
|
"nama": "Arif R D",
|
|
"waktu": "14/01/2026 10:30:00",
|
|
"latitude": -6.200000,
|
|
"longitude": 106.816666,
|
|
"jarak_dari_kampus": 50,
|
|
"foto_base64": "..."
|
|
}
|
|
]
|
|
```
|
|
|
|
---
|
|
|
|
## 📱 Cara Menggunakan Aplikasi
|
|
|
|
### **Login**
|
|
1. Buka aplikasi
|
|
2. Masukkan NPM dan Password
|
|
3. Klik tombol "Login"
|
|
4. Jika berhasil, akan masuk ke halaman absensi
|
|
|
|
### **Melakukan Absensi**
|
|
1. Pastikan GPS aktif
|
|
2. Aplikasi otomatis mengambil lokasi
|
|
3. Klik "Ambil Foto" untuk foto selfie
|
|
4. Klik "Kirim Absensi"
|
|
5. Sistem akan validasi:
|
|
- ✅ **Valid** jika dalam radius 100m dari kampus
|
|
- ❌ **Ditolak** jika di luar radius
|
|
|
|
### **Lihat Riwayat**
|
|
1. Klik icon History (jam) di toolbar
|
|
2. Lihat daftar riwayat absensi
|
|
3. Status ditampilkan:
|
|
- ✅ Valid (hijau)
|
|
- ❌ Ditolak (merah)
|
|
|
|
### **Logout**
|
|
- Klik icon Logout di toolbar
|
|
|
|
---
|
|
|
|
## 🔒 Keamanan
|
|
|
|
- **Session Management**: Login session tersimpan di SharedPreferences
|
|
- **Auto Login**: Otomatis login jika session masih aktif
|
|
- **Location Validation**: Validasi radius GPS otomatis
|
|
- **Photo Required**: Foto wajib untuk setiap absensi
|
|
|
|
---
|
|
|
|
## ⚙️ Pengaturan Validasi
|
|
|
|
**Validasi Radius (di MainActivity.kt):**
|
|
```kotlin
|
|
val maxRadius = 100.0 // Ubah sesuai kebutuhan (dalam meter)
|
|
```
|
|
|
|
**Koordinat Kampus:**
|
|
```kotlin
|
|
val kampusLat = -6.200000 // Ganti dengan koordinat kampus
|
|
val kampusLon = 106.816666 // Ganti dengan koordinat kampus
|
|
```
|
|
|
|
---
|
|
|
|
## 🐛 Troubleshooting
|
|
|
|
### **GPS Tidak Terdeteksi**
|
|
- Pastikan GPS/Location aktif di HP
|
|
- Coba klik "Refresh Lokasi"
|
|
- Pastikan permission lokasi sudah diberikan
|
|
|
|
### **Absensi Ditolak**
|
|
- Cek jarak dari kampus di pesan error
|
|
- Pastikan berada dalam radius yang ditentukan
|
|
- Koordinat kampus mungkin salah, cek lagi
|
|
|
|
### **Login Gagal**
|
|
- Cek koneksi internet
|
|
- Pastikan server n8n aktif
|
|
- Cek endpoint login sudah benar
|
|
|
|
### **Foto Tidak Muncul**
|
|
- Pastikan permission kamera sudah diberikan
|
|
- Coba ambil foto ulang
|
|
|
|
---
|
|
|
|
## 📝 Testing Checklist
|
|
|
|
- [ ] Login dengan NPM dan Password valid
|
|
- [ ] Login gagal dengan kredensial salah
|
|
- [ ] Auto-login setelah restart app
|
|
- [ ] Absensi berhasil dalam radius kampus
|
|
- [ ] Absensi ditolak di luar radius
|
|
- [ ] Refresh lokasi berfungsi
|
|
- [ ] Ambil foto berfungsi
|
|
- [ ] Preview foto tampil
|
|
- [ ] Riwayat absensi tampil
|
|
- [ ] Status valid/ditolak sesuai
|
|
- [ ] Logout berfungsi
|
|
|
|
---
|
|
|
|
## 🎯 Future Improvements
|
|
|
|
- [ ] Face Recognition untuk validasi foto
|
|
- [ ] Notifikasi push untuk jadwal absensi
|
|
- [ ] QR Code scanning
|
|
- [ ] Offline mode dengan sync
|
|
- [ ] Export riwayat ke PDF
|
|
- [ ] Multi-language support
|
|
- [ ] Dark mode
|
|
- [ ] Fingerprint authentication
|
|
|
|
---
|
|
|
|
## 👨💻 Developer
|
|
|
|
**Arif R D**
|
|
NPM: 12345
|
|
Universitas Bhayangkara Jakarta Raya
|
|
|
|
---
|
|
|
|
## 📄 License
|
|
|
|
Copyright © 2026 Universitas Bhayangkara Jakarta Raya
|
|
|
|
---
|
|
|
|
## 📞 Support
|
|
|
|
Jika ada pertanyaan atau bug, hubungi tim IT:
|
|
- Email: it@ubharajaya.ac.id
|
|
- Phone: (021) xxx-xxxx |