Model de privacy
Rezumat de arhitectură
Modelul de privacy al Notification Guard se sprijină pe trei proprietăți structurale:
- Doar date locale. Totul este salvat în baza de date SQLite privată a aplicației. Fără cloud sync, fără stare server-side, fără cont.
- Fără permisia de rețea în manifest.
android.permission.INTERNETnu este declarată în AndroidManifest. Aplicația nu poate face apeluri de rețea — punct. Asta este verificabil prinaapt dump badging. - Prefiltru de privacy. Categoriile sensibile de aplicații (bancare, 2FA/authenticator, sănătate, aplicații guvernamentale) sunt filtrate înainte ca motorul de reguli să le vadă notificările. Conținuturile lor nu ajung niciodată în baza de date.
Ce este salvat
Când o notificare este capturată pentru evaluare, în baza de date SQLite locală ajunge următorul:
- Numele pachetului aplicației sursă (de exemplu
com.whatsapp). - Un timestamp.
- Categoria atribuită (Social, Games, News, Shopping, Streaming etc.).
- Decizia regulii: Allow, Snooze sau Block.
- La Block: titlul și textul corpului notificării (ca să poată utilizatorul să verifice ce a fost suprimat).
Pentru notificările blocate, titlul și corpul sunt în plus supuse curățării TTL — implicit 24 de ore după capturare. „Șterge tot" golește totul instantaneu.
Ce nu este niciodată salvat
Pentru notificări de la aplicații din categoriile sensibile:
- Pachetul este recunoscut la granița serviciului de listener.
- Notificarea este trecută imediat mai departe, fără evaluare și fără salvare.
- Niciun titlu, niciun corp, niciun metadate al acestei notificări nu ajunge vreodată în baza de date.
Lista de categorii sensibile este cablată în motorul de reguli. Cuprinde (neexhaustiv):
- Aplicații bancare (BCR, BRD, Banca Transilvania, Raiffeisen, ING…)
- Aplicații 2FA/authenticator (Google Authenticator, Authy…)
- Aplicații de asigurări de sănătate (CASS, RCA online…)
- Aplicații guvernamentale (mObywatel/echivalente RO, e-Guvernare, ANAF…)
Lista poate fi extinsă la build prin configurare — pentru deployments care trebuie să adauge categorii sensibile suplimentare (de exemplu aplicații interne ale firmei care nu trebuie filtrate niciodată).
Constrângeri de compliance Google Play
Arhitectura este structurată în jurul a șase constrângeri dure de compliance din politicile actuale Google Play:
| ID | Constrângere | Cum o îndeplinește aplicația |
|---|---|---|
| C1 | Prominent disclosure și consent | Wizard de onboarding în 4 pași înainte de activarea permisiei de listener. |
| C2 | Fără SYSTEM_ALERT_WINDOW | Re-notificările rulează prin NotificationManager, fără fereastră overlay. |
| C3 | TTL de retenție a datelor | Retenție configurabilă (24h implicit), task periodic de cleanup, ștergere manuală. |
| C4 | Contact picker în loc de READ_CONTACTS | Permisia completă READ_CONTACTS nu este folosită. Regulile viitoare conștiente de contact folosesc Android Contact Picker. |
| C5 | Filtru de privacy (blocklistă de categorii sensibile) | Prefiltru hardcoded la intrarea motorului. |
| C6 | Fără strat de rețea | android.permission.INTERNET nu este în manifest. Fără dependențe HTTP client în niciun Cargo.toml. |
Acestea nu sunt declarații de intenție — sunt structurale. Eliminarea oricăreia ar cere o modificare de arhitectură, nu doar un flip de configurare.
Permisiile din manifest
Patru permisii declarate, fiecare legată de o funcție concretă:
BIND_NOTIFICATION_LISTENER_SERVICE— funcția centrală. Fără ea, aplicația nu poate citi sau filtra notificări. Activată de utilizator prin setările sistemului.RECEIVE_BOOT_COMPLETED— Reconectează listenerul după restart de dispozitiv.WAKE_LOCK— Declanșează timerele de snooze fiabil din modul Doze (planificat pentru faza 2).POST_NOTIFICATIONS— Afișează propriile re-notificări (released sau snoozed) fără fereastră overlay (vezi C2).
Fără permisii runtime, fără restricted special-access dincolo de listener-ul de notificări.
Cum să verifici
Dacă evaluezi rolarea acestuia în organizația ta:
Inspecția manifestului APK.
aapt dump badging notification-guard.apk | grep -i permissionConfirmă că
android.permission.INTERNETnu apare.Observă comportamentul de rețea.
Lasă aplicația să ruleze pe un dispozitiv de test cu capturare completă de trafic (PCAP, un proxy transparent). Confirmă că nu apar conexiuni de ieșire.
Inspecția bazei de date.
Fișierul SQLite stă în storage-ul privat al aplicației. Pe un dispozitiv de test rooted, copiază-l afară și confirmă că nu apar notificări de la aplicații din categoriile sensibile.
Dacă vreunul dintre aceste check-uri dă un rezultat la care nu te aștepți, te rog trimite detalii prin pagina Contact. Întregul produs depinde de faptul că aceste garanții sunt verificabile.