EAS-202310715274-DimasHendr.../IMPLEMENTATION_GUIDE.md
2026-01-14 21:13:18 +07:00

7.7 KiB

📱 Aplikasi Absensi Akademik Berbasis Koordinat dan Foto

📋 Daftar Fitur yang Diimplementasikan

Fitur Utama

  • 🔐 Login Screen - Interface login untuk mahasiswa dengan input NPM dan Nama
  • 📍 Validasi Lokasi (GPS) - Menggunakan Fused Location Provider dari Google Play Services
    • Menampilkan koordinat latitude dan longitude
    • Validasi radius area (default: 100m dari titik kampus)
    • Indikator visual status lokasi (hijau = dalam area, merah = di luar area)
  • 📸 Pengambilan Foto Selfie - Integrase dengan kamera perangkat
    • Menggunakan Camera Intent
    • Validasi foto sebelum submit
  • 🕒 Pencatatan Waktu - Otomatis mencatat timestamp saat absensi dikirim
  • 📄 Riwayat Kehadiran - History screen dengan daftar absensi
    • Menampilkan tanggal, waktu, status (accepted/rejected), koordinat
    • Sortir berdasarkan waktu terbaru
  • ⚠️ Notifikasi Status - Feedback real-time untuk user
    • Success message ketika absensi berhasil
    • Error message dengan penjelasan jika ditolak
  • 🔄 Integrasi N8n Webhook - Mengirim data ke backend workflow automation

🏗️ Arsitektur Aplikasi

id.ac.ubharajaya.sistemakademik/
├── data/
│   ├── database/
│   │   ├── AppDatabase.kt          # Room Database setup
│   │   └── AttendanceDao.kt        # Data Access Object
│   ├── model/
│   │   ├── User.kt                 # User data class
│   │   ├── Attendance.kt           # Attendance entity (Room)
│   │   └── LocationConfig.kt       # Campus location config
│   ├── preferences/
│   │   └── UserPreferences.kt      # DataStore untuk session user
│   └── repository/
│       └── AttendanceRepository.kt # Abstraksi data access & N8n integration
├── domain/
│   └── usecase/
│       └── LocationValidator.kt    # Business logic untuk validasi lokasi
├── presentation/
│   ├── screens/
│   │   ├── LoginScreen.kt          # Screen login
│   │   ├── AttendanceScreen.kt     # Screen utama absensi
│   │   └── HistoryScreen.kt        # Screen riwayat kehadiran
│   └── viewmodel/
│       └── AttendanceViewModel.kt  # ViewModel untuk state management
├── ui/
│   └── theme/
│       ├── Color.kt
│       ├── Theme.kt
│       └── Type.kt
└── MainActivity.kt                  # Activity utama dengan Navigation

🔧 Dependencies yang Digunakan

Database & Local Storage

  • Room - Local database untuk menyimpan riwayat absensi
  • DataStore Preferences - Lightweight key-value storage untuk user session

Navigation

  • Navigation Compose - Screen routing dan state management

Location Services

  • Google Play Services Location - Fused Location Provider untuk GPS

Async Processing

  • Coroutines - Untuk async operations dan threading

🗺️ Flow Aplikasi

1. Login Flow

LoginScreen → Validasi NPM & Nama → Save ke DataStore → Navigate to Attendance

2. Attendance Flow

AttendanceScreen
├─ Request Location Permission → Get GPS coordinates
├─ Validate Location (within 100m radius)
├─ Request Camera Permission → Take selfie photo
├─ Validate all data collected
├─ Send to N8n webhook (async)
├─ Save to local Room database
└─ Show status (success/error)

3. History Flow

HistoryScreen → Load from Room database → Display sorted by timestamp

4. Logout Flow

Logout button → Clear DataStore → Navigate to LoginScreen

📍 Konfigurasi Lokasi

File: data/model/LocationConfig.kt

data class LocationConfig(
    val latitude: Double = -6.8961,    // Latitude kampus Ubharajaya
    val longitude: Double = 107.6100,  // Longitude kampus Ubharajaya
    val radius: Float = 100f           // Radius validasi dalam meter
)

Catatan: Koordinat dapat diubah sesuai lokasi kampus yang sebenarnya. Untuk privacy, koordinat dapat ditambah/kurangi dengan offset tertentu.

🔐 Permissions yang Diperlukan

File: app/src/main/AndroidManifest.xml

<!-- Location Permissions -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

<!-- Camera Permission -->
<uses-permission android:name="android.permission.CAMERA"/>

<!-- Network Permission -->
<uses-permission android:name="android.permission.INTERNET"/>

Request permission dilakukan secara runtime menggunakan ActivityResultContracts.

🌐 N8n Webhook Integration

Endpoint

Request Format (JSON)

{
  "npm": "12345678",
  "nama": "John Doe",
  "latitude": -6.8961234,
  "longitude": 107.6100567,
  "timestamp": 1704067200000,
  "foto_base64": "[base64 encoded image]"
}

Response Handling

  • HTTP 200: Absensi diterima (status = "accepted")
  • HTTP lainnya: Absensi ditolak (status = "rejected")

💾 Database Schema

Attendance Table

CREATE TABLE attendance (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  npm TEXT NOT NULL,
  nama TEXT NOT NULL,
  latitude REAL NOT NULL,
  longitude REAL NOT NULL,
  timestamp INTEGER NOT NULL,
  fotoBase64 TEXT NOT NULL,
  status TEXT DEFAULT 'pending',  -- pending, accepted, rejected
  message TEXT DEFAULT ''
)

🛣️ Navigation Routes

Route Screen Purpose
login LoginScreen Input NPM & Nama
attendance AttendanceScreen Main attendance interface
history HistoryScreen View attendance history

🚀 Cara Menjalankan

Prerequisites

  • Android Studio (latest)
  • Android SDK 28+ (minSdk)
  • Target SDK 36
  • Kotlin 2.0.21

Build & Run

# Build project
./gradlew build

# Run on emulator/device
./gradlew installDebug

# Or dari Android Studio
- Click "Run" atau tekan Shift+F10

📝 Notes & Future Enhancements

Current Implementation

  • Basic location validation dengan radius check
  • Photo capture dari camera intent
  • Local database dengan Room
  • Session management dengan DataStore
  • N8n webhook integration
  • Responsive UI dengan Jetpack Compose

Possible Improvements

  1. Location Tracking - Real-time location updates selama proses absensi
  2. Image Compression - Compress foto sebelum upload untuk efisiensi bandwidth
  3. Offline Mode - Queue absensi jika offline, sync saat online
  4. Face Recognition - Validasi foto dengan face detection
  5. Map Integration - Google Maps untuk visualisasi area absensi
  6. Biometric Auth - Fingerprint/Face unlock untuk login
  7. Export Data - Export riwayat absensi ke format CSV/PDF

🐛 Troubleshooting

Masalah Permission

  • Lokasi tidak tersedia: Pastikan GPS device nyala dan permission diizinkan
  • Kamera tidak berfungsi: Periksa izin camera di system settings

Masalah Network

  • N8n webhook timeout: Pastikan device terhubung internet
  • HTTPS error: Webhook URL sudah benar (https, bukan http)

Masalah Database

  • Error saat insert: Pastikan Room migration sudah sesuai dengan schema

📧 Support & Contact


Created: 2025 Version: 1.0 Status: In Development