denis156 / notification-listener
Capture system-wide notifications in real-time and manage 'Notification Access' permissions on Android.
Package info
github.com/denis156/notification-listener
Language:Kotlin
Type:nativephp-plugin
pkg:composer/denis156/notification-listener
Requires
- php: ^8.2
- nativephp/mobile: ^3.0
Requires (Dev)
- pestphp/pest: ^3.0
README
Plugin khusus Android untuk menangkap notifikasi sistem secara real-time dan mengelola izin "Notification Access". Sangat berguna untuk aplikasi yang membutuhkan integrasi mendalam dengan notifikasi perangkat lain seperti aplikasi monitoring transaksi, otomasi pesan, atau log sistem.
Caution
PENAFIAN (DISCLAIMER): Plugin ini memiliki kemampuan untuk membaca konten notifikasi dari aplikasi lain di perangkat pengguna. Penyalahgunaan plugin ini untuk aktivitas mata-mata (spying), pencurian data, atau pelanggaran privasi adalah DILARANG KERAS. Pengembang (denis156) TIDAK BERTANGGUNG JAWAB atas segala penyalahgunaan yang dilakukan oleh pihak ketiga.
Fitur Unggulan
- Real-time Capture: Mendengarkan notifikasi masuk secara instan dari aplikasi apa pun (WhatsApp, Perbankan, E-wallet, dll).
- Metadata Lengkap: Mengambil Judul, Isi Pesan, Nama Paket Aplikasi (
com.whatsapp, dll), dan Timestamp. - Manajemen Izin: Menyediakan shortcut native untuk membuka halaman "Notification Access" di pengaturan Android secara langsung.
- Background Persistence: Berjalan sebagai layanan latar belakang (Service) yang tetap aktif meskipun aplikasi tidak di foreground.
- V3 Bridge Standards: Menggunakan struktur direktori
resources/yang sepenuhnya kompatibel dengan NativePHP Plugin Kit v3.
Instalasi
Tambahkan plugin ke proyek Laravel Anda melalui Composer:
composer require denis156/notification-listener
Daftarkan plugin di proyek NativePHP Anda untuk mengaktifkan fungsionalitas native:
php artisan native:plugin:register denis156/notification-listener
Jalankan build untuk mengkompilasi plugin ke dalam aplikasi native:
php artisan native:run android
Penggunaan
Sisi PHP (Laravel/Inertia/Livewire)
Gunakan facade NotificationListener untuk mengecek status dan meminta izin:
use Denis156\NotificationListener\Facades\NotificationListener; // 1. Cek apakah izin akses notifikasi sudah diberikan $isGranted = NotificationListener::getStatus(); // 2. Buka pengaturan sistem Android jika belum diizinkan if (! $isGranted) { NotificationListener::requestPermission(); }
Menangkap Notifikasi (Event Listener)
Setiap kali notifikasi masuk, plugin akan memicu event NotificationReceived. Anda bisa menangkapnya menggunakan Listener Laravel:
namespace App\Listeners; use Denis156\NotificationListener\Events\NotificationReceived; class LogIncomingNotification { public function handle(NotificationReceived $event) { // Data yang tersedia: // $event->title (Judul Notifikasi) // $event->body (Isi Pesan) // $event->app_package (Nama Paket Aplikasi, misal: com.whatsapp) // $event->captured_at (Timestamp saat diterima) } }
Sisi JavaScript (Vue/React/Inertia)
Anda juga bisa memanggil fungsi native langsung dari frontend:
import { notificationListener } from '@denis156/notification-listener'; // Ambil status izin const isGranted = await notificationListener.getStatus(); // Minta izin (Buka pengaturan) if (!isGranted) { await notificationListener.requestPermission(); }
Panduan Debugging
Jika notifikasi tidak masuk atau status selalu false:
- Pantau Log Native: Gunakan
php artisan native:tailuntuk melihat aktivitas bridge dan log dari Android Service. - Aktivasi Manual: Pada beberapa perangkat, izin harus diaktifkan manual di:
Settings > Apps > Special app access > Notification access - Optimasi Baterai: Pastikan aplikasi Anda tidak dibatasi oleh fitur penghemat baterai Android agar Service tetap berjalan di background.
Struktur Direktori (Standar v3)
packages/denis156/notification-listener/
├── nativephp.json # Manifest Plugin & Bridge Functions
├── src/ # Kode PHP (Service Provider, Facade, Events)
└── resources/
├── android/src/ # Kode Kotlin (NotificationListenerService)
└── boost/guidelines/ # Instruksi spesifik untuk AI assistants