3.7 KiB
3.7 KiB
📱 Fix Crash APK di Android 13 Vivo
🔍 Penyebab Crash Ditemukan:
1. Missing Permission: SCHEDULE_EXACT_ALARM ❌ → ✅
- Masalah: Background service & notification crash karena permission tidak dideklarasikan
- Solusi: Tambah permission di
AndroidManifest.xml
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>
2. Runtime Permission POST_NOTIFICATIONS ❌ → ✅
- Masalah: Android 13+ memerlukan runtime permission untuk POST_NOTIFICATIONS
- Solusi: Tambah permission handler & request saat app launch
if (Platform.isAndroid) {
await Permission.notification.request();
await Permission.scheduleExactAlarm.request();
}
3. Double Firebase Initialization ❌ → ✅
- Masalah: Firebase diinit di main() DAN di onStart() → memory leak & crash
- Solusi: Hapus Firebase.initializeApp() di background service onStart()
4. Null Safety Issue ❌ → ✅
- Masalah: Akses field tanpa null check → NullPointerException
- File:
lib/data_siswa.dart - Solusi: Cek null sebelum akses
final rfidData = siswa['rfid'];
if (rfidData == null) continue;
final rfid = rfidData as String;
5. Missing Error Handling ❌ → ✅
- Masalah: Exception di Firestore listener tidak ditangani → app crash
- Solusi: Wrap dengan try-catch & onError callback
.listen((event) async {
try {
// ...
} catch (e) {
debugPrint('Error notif: $e');
}
}, onError: (error) {
debugPrint('Error listen absensi: $error');
});
📝 File yang Diubah:
✏️ android/app/src/main/AndroidManifest.xml
- Tambah
SCHEDULE_EXACT_ALARMpermission
✏️ lib/main.dart
- Import
permission_handlerdandart:io - Request permission di main()
- Hapus Firebase init di background service
- Tambah try-catch di Firestore listener
- Tambah null safety checks untuk siswa data
✏️ lib/data_siswa.dart
- Cek null sebelum akses field
- Skip row jika ortu_uid kosong
✏️ pubspec.yaml
- Tambah dependency:
permission_handler: ^11.4.4
🚀 Langkah Selanjutnya:
-
Run flutter pub get
flutter pub get -
Clean build
flutter clean flutter pub get -
Build APK baru
flutter build apk --release -
Test di Vivo Android 13
- Uninstall APK lama
- Install APK baru
- Tunggu 5-10 menit untuk background service berjalan
- Cek logcat untuk error messages:
flutter logs
🔧 Testing Background Service:
Untuk test apakah background service jalan:
- Buka app
- Login dengan akun parent
- Keluar dari app
- Tunggu 1-2 menit
- Cek notification - seharusnya muncul "Absensi Aktif"
📊 Logcat Debug:
Jika masih ada crash, check logcat:
flutter logs | grep -E "Error|Exception|Crash"
Atau di Android Studio:
- Logcat → Filter:
absensi
⚠️ Catatan Penting:
- Permission Request: User harus approve notification permission saat app launch
- Background Service: Tidak akan jalan jika app tidak pernah di-login
- Android 13+: Foreground service notif wajib ada
- Debugging: Gunakan
debugPrint()bukanprint()untuk log
✅ Checklist Fix:
- SCHEDULE_EXACT_ALARM permission ditambah
- Runtime permission request ditambah
- Firebase double init dihapus
- Null safety checks ditambah
- Error handling ditambah
- Permission_handler dependency ditambah
Status: Siap di-test! 🎉