4.4 KiB
Fix Notifikasi untuk Release Build
Masalah
Notifikasi tidak muncul pada aplikasi release (APK yang sudah di-install), padahal berfungsi normal saat debug.
Penyebab
- ProGuard/R8 Code Shrinking: Pada release build, Android secara otomatis menghapus kode yang dianggap tidak digunakan, termasuk komponen notifikasi plugin.
- Minify Enabled: Setting minifyEnabled di build.gradle menyebabkan code shrinking aktif.
Solusi yang Diterapkan
1. File proguard-rules.pro (BARU)
File ini berisi rules untuk mencegah ProGuard menghapus kode notifikasi:
- Keep Flutter plugin classes
- Keep flutter_local_notifications classes
- Keep Android notification components
- Keep MQTT client classes
2. Update build.gradle.kts
Menambahkan konfigurasi:
isMinifyEnabled = false // Disable code shrinking
isShrinkResources = false // Disable resource shrinking
proguardFiles(...) // ProGuard rules (untuk jika diaktifkan nanti)
3. Update MainActivity.kt
Menambahkan pembuatan notification channel saat aplikasi start:
- Membuat channel "pengering_ikan_channel"
- Set importance ke HIGH
- Enable vibration dan lights
Cara Build Ulang Aplikasi
Option 1: Build APK (Tanpa minify - Recommended)
flutter clean
flutter pub get
flutter build apk --release
APK akan ada di: build/app/outputs/flutter-apk/app-release.apk
Option 2: Build APK (Dengan minify + ProGuard)
Jika ingin APK lebih kecil, edit build.gradle.kts:
isMinifyEnabled = true
isShrinkResources = true
Lalu build:
flutter clean
flutter pub get
flutter build apk --release
Option 3: Build App Bundle (untuk Google Play)
flutter clean
flutter pub get
flutter build appbundle --release
AAB akan ada di: build/app/outputs/bundle/release/app-release.aab
Testing Notifikasi
1. Uninstall aplikasi lama
adb uninstall com.example.aplikasi_novil
2. Install APK baru
adb install build/app/outputs/flutter-apk/app-release.apk
3. Test notifikasi
- Buka aplikasi
- Pastikan permission notifikasi sudah di-allow (Android 13+)
- Jalankan proses pengeringan
- Tunggu hingga selesai
- Notifikasi harus muncul
4. Check via Logcat
adb logcat | grep -i notification
Verifikasi Permission
Check di Settings Android:
- Buka Settings > Apps > Pengering Ikan
- Pilih Notifications
- Pastikan notifikasi ENABLED
- Check channel "Pengering Ikan" harus ada
Check via ADB:
adb shell dumpsys notification_listener
adb shell cmd notification list
Troubleshooting
Notifikasi masih tidak muncul?
-
Check permission di runtime:
- Aplikasi harus request permission POST_NOTIFICATIONS untuk Android 13+
- Sudah di-handle di
NotificationService.initialize()
-
Check notification channel:
- Channel harus dibuat di native (MainActivity.kt) ✅
- Channel ID harus sama dengan yang di Dart ✅
-
Check battery optimization:
- Buka Settings > Battery > Battery Optimization
- Set aplikasi ke "Don't optimize"
-
Check Do Not Disturb:
- Pastikan DND mode tidak aktif
- Atau allow aplikasi bypass DND
-
Test dengan notification sederhana: Tambahkan button test notifikasi di UI untuk memastikan sistem notifikasi bekerja.
Files yang Diubah/Ditambahkan
Baru:
- ✅
android/app/proguard-rules.pro
Diubah:
- ✅
android/app/build.gradle.kts - ✅
android/app/src/main/kotlin/com/example/aplikasi_novil/MainActivity.kt
Tidak berubah (sudah benar):
- ✅
android/app/src/main/AndroidManifest.xml(permission sudah lengkap) - ✅
lib/services/notification_service.dart(channel ID sudah benar)
Catatan Penting
-
Setiap kali build release, pastikan:
flutter cleanduluflutter pub get- Uninstall APK lama sebelum install yang baru
-
minifyEnabled = false akan membuat APK lebih besar (~10-20MB lebih besar)
- Tapi notifikasi dijamin bekerja
- Jika ingin APK lebih kecil, gunakan minify + ProGuard rules
-
Testing harus di device fisik, bukan emulator
- Emulator kadang tidak akurat untuk notifikasi
-
Versi Android yang didukung:
- Android 5.0+ (API 21+) untuk notifikasi dasar
- Android 8.0+ (API 26+) untuk notification channels
- Android 13+ (API 33+) perlu permission POST_NOTIFICATIONS
Kontak
Jika masih ada masalah, check:
- Logcat untuk error messages
- Notification settings di Android
- Battery optimization settings