TKK_E32230254/CRASH_FIX_GUIDE.md

145 lines
3.7 KiB
Markdown

# 📱 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`
```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
```dart
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
```dart
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
```dart
.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`
- [x] Tambah `SCHEDULE_EXACT_ALARM` permission
### ✏️ `lib/main.dart`
- [x] Import `permission_handler` dan `dart:io`
- [x] Request permission di main()
- [x] Hapus Firebase init di background service
- [x] Tambah try-catch di Firestore listener
- [x] Tambah null safety checks untuk siswa data
### ✏️ `lib/data_siswa.dart`
- [x] Cek null sebelum akses field
- [x] Skip row jika ortu_uid kosong
### ✏️ `pubspec.yaml`
- [x] Tambah dependency: `permission_handler: ^11.4.4`
---
## 🚀 Langkah Selanjutnya:
1. **Run flutter pub get**
```bash
flutter pub get
```
2. **Clean build**
```bash
flutter clean
flutter pub get
```
3. **Build APK baru**
```bash
flutter build apk --release
```
4. **Test di Vivo Android 13**
- Uninstall APK lama
- Install APK baru
- Tunggu 5-10 menit untuk background service berjalan
- Cek logcat untuk error messages:
```bash
flutter logs
```
---
## 🔧 Testing Background Service:
Untuk test apakah background service jalan:
1. Buka app
2. Login dengan akun parent
3. Keluar dari app
4. Tunggu 1-2 menit
5. Cek notification - seharusnya muncul "Absensi Aktif"
---
## 📊 Logcat Debug:
Jika masih ada crash, check logcat:
```bash
flutter logs | grep -E "Error|Exception|Crash"
```
Atau di Android Studio:
- Logcat → Filter: `absensi`
---
## ⚠️ Catatan Penting:
1. **Permission Request**: User harus approve notification permission saat app launch
2. **Background Service**: Tidak akan jalan jika app tidak pernah di-login
3. **Android 13+**: Foreground service notif wajib ada
4. **Debugging**: Gunakan `debugPrint()` bukan `print()` untuk log
---
## ✅ Checklist Fix:
- [x] SCHEDULE_EXACT_ALARM permission ditambah
- [x] Runtime permission request ditambah
- [x] Firebase double init dihapus
- [x] Null safety checks ditambah
- [x] Error handling ditambah
- [x] Permission_handler dependency ditambah
**Status**: Siap di-test! 🎉