In questi giorni mi sto dedicando allo sviluppo di una app android/react-native e nel momento in cui ho fatto un test con Android 9, mi sono imbattuto nel seguente errore “java.io.IOException: Cleartext HTTP traffic not permitted“.
Cosa significa esattamente? L’errore fornisce un’indicazione sul fatto che è stata effettuata un’operazione non sicura. In sostanza questo errore si genera nel momento in cui un’app tenta di comunicare con un server scambiando dati non cifrati, su protocolli quali ad esempio HTTP. Le nuove versione di android, bloccano, per default la possibilità di effettuare comunicazioni non cifrate, incoraggiando gli sviluppatori ad usare metodi di cifratura come esempio HTTPS, ma l’incentivo non è un blocco insuperabile, tant’è che è possibile bypassare l’errore andando ad agire sul parametro CleartextTraffic da configurare nel file manifest. Questa opzione era già disponibile dalla versione 6.0 di Android ma l’attributo useCleartextTraffic era impostato per default a “false”. Bene come si può bypassare l’errore?
Opzione 1
Creare un file in res/xml/network_security_config.xml il cui contenuto dovrà essere simile a :
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">domain.com</domain> </domain-config> </network-security-config>
Nel file inserire il dominio o i domini da abilitare per la comunicazione in chiaro. A questo punto sarà necessario indicare nel file manifest il file di policy appena creato e da utilizzare.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:networkSecurityConfig="@xml/network_security_config"
...>
</application>
</manifest>
Opzione 2
nel caso in cui si voglia abilitare indiscriminatamente la comunicazione in chiaro sarà sufficiente settare a true il valore di android:usesCleartextTraffic in
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:usesCleartextTraffic="true"
...>
...
</application>
</manifest>
Sono amante della tecnologia e delle tante sfumature del mondo IT, ho partecipato, sin dai primi anni di università ad importanti progetti in ambito Internet proseguendo, negli anni, allo startup, sviluppo e direzione di diverse aziende; Nei primi anni di carriera ho lavorato come consulente nel mondo dell’IT italiano, partecipando attivamente a progetti nazionali ed internazionali per realtà quali Ericsson, Telecom, Tin.it, Accenture, Tiscali, CNR. Dal 2010 mi occupo di startup mediante una delle mie società techintouch S.r.l che grazie alla collaborazione con la Digital Magics SpA, di cui sono Partner la Campania, mi occupo di supportare ed accelerare aziende del territorio .
Attualmente ricopro le cariche di :
– CTO MareGroup
– CTO Innoida
– Co-CEO in Techintouch s.r.l.
– Board member in StepFund GP SA
Manager ed imprenditore dal 2000 sono stato,
CEO e founder di Eclettica S.r.l. , Società specializzata in sviluppo software e System Integration
Partner per la Campania di Digital Magics S.p.A.
CTO e co-founder di Nexsoft S.p.A, società specializzata nella Consulenza di Servizi in ambito Informatico e sviluppo di soluzioni di System Integration, CTO della ITsys S.r.l. Società specializzata nella gestione di sistemi IT per la quale ho partecipato attivamente alla fase di startup.
Sognatore da sempre, curioso di novità ed alla ricerca di “nuovi mondi da esplorare“.
Comments