Modifiche alla privacy in Android 10

Android 10 (livello API 29) introduce una serie di funzionalità e modifiche del comportamento per proteggere meglio la privacy degli utenti. Queste modifiche estendono la trasparenza e il controllo che gli utenti hanno sui loro dati e sulle funzionalità che offrono alle app. Queste funzionalità potrebbero indicare che comportamenti o dati specifici a cui si basa la tua app possono comportarsi in modo diverso rispetto alle versioni precedenti della piattaforma. L'impatto sulla tua app dovrebbe essere minimo se quest'ultima rispetta le best practice attuali per la gestione dei dati utente.

In questa pagina viene riportato un riepilogo di ogni modifica.

Modifiche principali

Questa sezione include le modifiche principali di Android 10 relative alla privacy.

Accesso allo spazio di archiviazione esterno limitato all'ambito di file di app e contenuti multimediali

Per impostazione predefinita, alle app destinate ad Android 10 e versioni successive viene concesso accesso con ambito a unità di archiviazione esterna o archiviazione con ambito. Queste app possono accedere ai seguenti tipi di file all'interno di un dispositivo di archiviazione esterno senza dover richiedere autorizzazioni utente correlate allo spazio di archiviazione:

Per scoprire di più sull'archiviazione mirata e su come condividere, accedere e modificare i file salvati su dispositivi di archiviazione esterni, consulta le guide su come gestire i file nella memoria esterna e accedere ai file multimediali e modificarli.

L'accesso alla posizione del dispositivo in background richiede l'autorizzazione

Per supportare il controllo aggiuntivo che gli utenti hanno sull'accesso di un'app alle informazioni sulla posizione, Android 10 introduce l'autorizzazione ACCESS_BACKGROUND_LOCATION.

A differenza delle autorizzazioni ACCESS_FINE_LOCATION e ACCESS_COARSE_LOCATION, l'autorizzazione ACCESS_BACKGROUND_LOCATION influisce sull'accesso alla posizione di un'app solo quando viene eseguita in background. Un'app viene considerata che accede alla posizione in background, a meno che non venga soddisfatta una delle seguenti condizioni:

  • È visibile un'attività appartenente all'app.
  • L'app esegue un servizio in primo piano che ha dichiarato un tipo di servizio in primo piano pari a location.

    Per dichiarare il tipo di servizio in primo piano per un servizio nella tua app, imposta il valore targetSdkVersion o compileSdkVersion dell'app su 29 o un valore superiore. Scopri di più su come i servizi in primo piano possono continuare con le azioni avviate dall'utente che richiedono l'accesso alla posizione.

Se la tua app crea e monitora i recinti virtuali e ha come target Android 10 (livello API 29) o versioni successive, devi dichiarare l'autorizzazione ACCESS_BACKGROUND_LOCATION.

Accesso concesso automaticamente quando scegli come target Android 9 o versioni precedenti

Se la tua app viene eseguita su Android 10 o versioni successive, ma ha come target Android 9 (livello API 28) o versioni precedenti, la piattaforma applica il seguente comportamento:

  • Se la tua app dichiara un elemento <uses-permission> per ACCESS_FINE_LOCATION o ACCESS_COARSE_LOCATION, il sistema aggiunge automaticamente un elemento <uses-permission> per ACCESS_BACKGROUND_LOCATION durante l'installazione.
  • Se la tua app richiede ACCESS_FINE_LOCATION o ACCESS_COARSE_LOCATION, il sistema aggiunge automaticamente ACCESS_BACKGROUND_LOCATION alla richiesta.

Accedi quando viene eseguito l'upgrade del dispositivo ad Android 10

Se un utente concede alla tua app l'accesso alla posizione del dispositivo (ACCESS_COARSE_LOCATION o ACCESS_FINE_LOCATION) e poi esegui l'upgrade del dispositivo da Android 9 ad Android 10, il sistema aggiorna automaticamente l'insieme di autorizzazioni basate sulla posizione concesse alla tua app. L'insieme di autorizzazioni ricevute dall'app dopo l'upgrade dipende dalla versione dell'SDK di destinazione e dalle autorizzazioni definite, come mostrato nella seguente tabella:

Tabella 1. Modifiche allo stato dell'autorizzazione di accesso alla posizione dopo l'upgrade del dispositivo ad Android 10

Versione piattaforma di destinazione È stata concessa l'autorizzazione
generica o specifica?
Autorizzazione in background
definita nel file manifest?
Stato di autorizzazione predefinito aggiornato
Android 10 Accesso in primo piano e in background
Android 10 No Accesso solo in primo piano
Android 10 No (Ignorato dal sistema) Nessun accesso
Android 9 o versioni precedenti Aggiunta automaticamente dal sistema al momento dell'upgrade del dispositivo Accesso in primo piano e in background
Android 9 o versioni precedenti No (Ignorato dal sistema) Nessun accesso

Tieni presente che l'utente può modificare questo livello di accesso anche dopo che il sistema aggiorna automaticamente l'accesso dell'app alla posizione del dispositivo. Ad esempio, l'utente potrebbe ridurre l'accesso dell'app solo in primo piano o revocare del tutto l'accesso. Prima di tentare di accedere alla posizione del dispositivo, in particolare nell'ambito di un servizio in primo piano, l'app deve verificare se l'utente consente ancora all'app di ricevere queste informazioni sulla posizione.

Accesso revocato durante l'aggiornamento del livello API target sui dispositivi Android 10

Considera il caso in cui la tua app è già installata su un dispositivo che esegue Android 10. Se in questa situazione aggiorni l'app in modo che abbia come target Android 10, il dispositivo revocherà l'autorizzazione ACCESS_BACKGROUND_LOCATION.

Per ulteriori informazioni su come recuperare la posizione del dispositivo mentre l'app è in background, consulta la guida sulla ricezione di aggiornamenti periodici della posizione.

Limitazioni relative all'avvio di attività in background

A partire da Android 10, il sistema applica limitazioni relative all'avvio di attività in background. Questo cambiamento del comportamento consente di ridurre al minimo le interruzioni per l'utente e di mantenere un maggiore controllo su ciò che viene mostrato sullo schermo. Se la tua app avvia le attività come risultato diretto dell'interazione dell'utente, è molto probabile che l'app non sia interessata da queste limitazioni.

Per scoprire di più sull'alternativa consigliata all'avvio di attività in background, consulta la guida su come avvisare gli utenti in caso di eventi sensibili al fattore tempo nella tua app.

Identificatori e dati

In questa sezione sono elencate le modifiche specifiche relative all'uso dei dati e degli identificatori dei dispositivi.

Rimozione dell'affinità dei contatti

A partire da Android 10, la piattaforma non tiene traccia delle informazioni sull'affinità dei contatti. Di conseguenza, se l'app esegue una ricerca nei contatti dell'utente, i risultati non vengono ordinati in base alla frequenza di interazione.

La guida su ContactsProvider contiene una notifica che descrive i campi e i metodi obsoleti su tutti i dispositivi che iniziano in Android 10.

Randomizzazione degli indirizzi MAC

Sui dispositivi con Android 10 o versioni successive, il sistema trasmette gli indirizzi MAC casuali per impostazione predefinita.

Se l'app gestisce un caso d'uso aziendale, la piattaforma fornisce API per diverse operazioni relative agli indirizzi MAC:

  • Ottieni un indirizzo MAC casuale: le app del proprietario del dispositivo e le app del proprietario del profilo possono recuperare l'indirizzo MAC casuale assegnato a una rete specifica chiamando getRandomizedMacAddress().
  • Ottenere l'indirizzo MAC di fabbrica effettivo: le app proprietarie del dispositivo possono recuperare l'indirizzo MAC hardware effettivo di un dispositivo chiamando getWifiMacAddress(). Questo metodo è utile per monitorare gruppi di dispositivi.

Limitazione di accesso al file system /proc/net

Sui dispositivi con Android 10 o versioni successive, le app non possono accedere a /proc/net, incluse le informazioni sullo stato della rete di un dispositivo. Le app che devono accedere a queste informazioni, ad esempio le VPN, dovrebbero utilizzare la classe NetworkStatsManager o ConnectivityManager.

Limitazione degli identificatori dei dispositivi non reimpostabili

A partire da Android 10, le app devono disporre dell'autorizzazione privilegiata READ_PRIVILEGED_PHONE_STATE per poter accedere agli identificatori non reimpostabili del dispositivo, che includono sia il codice IMEI sia il numero di serie.

I metodi interessati includono:

Se la tua app non ha l'autorizzazione e provi comunque a chiedere informazioni sugli identificatori non reimpostabili, la risposta della piattaforma varia in base alla versione target dell'SDK:

  • Se la tua app ha come target Android 10 o versioni successive, si verifica un errore SecurityException.
  • Se la tua app ha come target Android 9 (livello API 28) o versioni precedenti, il metodo restituisce dati null o segnaposto se l'app dispone dell'autorizzazione READ_PHONE_STATE. In caso contrario, si verifica un SecurityException.

Molti casi d'uso non richiedono identificatori dei dispositivi non reimpostabili. Ad esempio, se la tua app utilizza identificatori di dispositivi non reimpostabili per scopi di monitoraggio degli annunci o di analisi degli utenti, utilizza un ID pubblicità di Android per i casi d'uso specifici. Per scoprire di più, consulta le best practice per gli identificatori univoci.

Accesso limitato ai dati degli appunti

A meno che la tua app non sia l'editor del metodo di input (IME) predefinito o l'app attualmente attiva, l'app non può accedere ai dati degli appunti su Android 10 o versioni successive.

Protezione del numero di serie del dispositivo USB

Se la tua app ha come target Android 10 o versioni successive, non può leggere il numero di serie finché l'utente non concede all'app l'autorizzazione ad accedere al dispositivo o all'accessorio USB.

Per scoprire di più sull'utilizzo dei dispositivi USB, consulta la guida alla configurazione degli host USB.

Videocamera e connettività

In questa sezione sono elencate le modifiche specifiche apportate ai metadati della videocamera e alle API di connettività.

Limitazione dell'accesso ai dettagli e ai metadati della videocamera

Android 10 cambia l'ampiezza delle informazioni restituite per impostazione predefinita dal metodo getCameraCharacteristics(). In particolare, la tua app deve disporre dell'autorizzazione CAMERA per accedere a metadati potenzialmente specifici del dispositivo inclusi nel valore restituito di questo metodo.

Per scoprire di più su queste modifiche, consulta la sezione sui campi relativi alle videocamere che richiedono l'autorizzazione.

Limitazione dell'attivazione e della disattivazione del Wi-Fi

Le app destinate ad Android 10 o versioni successive non possono attivare o disattivare il Wi-Fi. Il metodo WifiManager.setWifiEnabled() restituisce sempre false.

Se devi chiedere agli utenti di attivare e disattivare il Wi-Fi, utilizza un riquadro delle impostazioni.

Limitazioni relative all'accesso diretto alle reti Wi-Fi configurate

Per proteggere la privacy degli utenti, la configurazione manuale dell'elenco di reti Wi-Fi è limitata alle app di sistema e ai controller dei criteri dei dispositivi (DPC). Un determinato DPC può essere il proprietario del dispositivo o del profilo.

Se la tua app ha come target Android 10 o versioni successive e non è un'app di sistema o un DPC, i seguenti metodi non restituiscono dati utili:

Se la tua app deve connettersi a reti Wi-Fi, utilizza i seguenti metodi alternativi:

  • Per attivare una connessione locale istantanea a una rete Wi-Fi, utilizza WifiNetworkSpecifier in un oggetto NetworkRequest standard.
  • Per aggiungere reti Wi-Fi da considerare per fornire l'accesso a internet all'utente, utilizza gli oggetti WifiNetworkSuggestion. Puoi aggiungere e rimuovere le reti visualizzate nella finestra di dialogo di selezione della rete per la connessione automatica chiamando rispettivamente addNetworkSuggestions() e removeNetworkSuggestions(). Questi metodi non richiedono alcuna autorizzazione di accesso alla posizione.

Alcune API di telefonia, Bluetooth e Wi-Fi richiedono l'autorizzazione di accesso alla posizione FINE

Se la tua app ha come target Android 10 o versioni successive, deve disporre dell'autorizzazione ACCESS_FINE_LOCATION per poter utilizzare diversi metodi all'interno delle API Wi-Fi, Wi-Fi Aware o Bluetooth. Le classi e i metodi interessati sono elencati nelle sezioni seguenti.

Telefonia

Wi-Fi

Bluetooth

Autorizzazioni

In questa sezione vengono descritti gli aggiornamenti al modello di autorizzazioni Android.

Accesso limitato ai contenuti dello schermo

Per proteggere i contenuti sullo schermo degli utenti, Android 10 impedisce l'accesso silenzioso ai contenuti dello schermo del dispositivo modificando l'ambito delle autorizzazioni READ_FRAME_BUFFER, CAPTURE_VIDEO_OUTPUT e CAPTURE_SECURE_VIDEO_OUTPUT. A partire da Android 10, queste autorizzazioni sono solo di accesso per firma.

Le app che devono accedere ai contenuti dello schermo del dispositivo devono utilizzare l'API MediaProjection, che mostra una richiesta di consenso all'utente.

Controllo delle autorizzazioni delle app precedenti rivolto agli utenti

Se la tua app ha come target Android 5.1 (livello API 22) o versioni precedenti, gli utenti vedranno una schermata delle autorizzazioni quando utilizzano per la prima volta l'app su un dispositivo con Android 10 o versioni successive, come mostrato nella Figura 1. Questa schermata offre agli utenti l'opportunità di revocare l'accesso alle autorizzazioni che il sistema aveva precedentemente concesso alla tua app al momento dell'installazione.

Acquisizione schermata di finestre di dialogo
Figura 1. Finestra di dialogo rivolta agli utenti che consente di esaminare le autorizzazioni precedenti

Riconoscimento dell'attività fisica

Android 10 introduce l'autorizzazione di runtime android.permission.ACTIVITY_RECOGNITION per le app che devono rilevare il numero di passi dell'utente o classificarne l'attività fisica, ad esempio camminata, ciclismo o spostamento in un veicolo. Questa funzionalità è progettata per offrire agli utenti visibilità su come vengono utilizzati i dati dei sensori del dispositivo nelle Impostazioni.

Alcune librerie all'interno di Google Play Services, come l'API di riconoscimento attività e l'API Google Fit, non forniscono risultati a meno che l'utente non abbia concesso questa autorizzazione alla tua app.

Gli unici sensori integrati sul dispositivo che richiedono questa autorizzazione sono il contatore di passi e il rilevatore di passi.

Se la tua app ha come target Android 9 (livello API 28) o versioni precedenti, il sistema concede automaticamente l'autorizzazione android.permission.ACTIVITY_RECOGNITION alla tua app, se necessario, se soddisfa ognuna delle seguenti condizioni:

  • Il file manifest include l'autorizzazione com.google.android.gms.permission.ACTIVITY_RECOGNITION.
  • Il file manifest non include l'autorizzazione android.permission.ACTIVITY_RECOGNITION.

Se l'autorizzazione automatica di sistema concede l'autorizzazione android.permission.ACTIVITY_RECOGNITION, la tua app la manterrà dopo l'aggiornamento dell'app in modo che abbia come target Android 10. Tuttavia, l'utente può revocare questa autorizzazione in qualsiasi momento nelle impostazioni di sistema.

Gruppi di autorizzazioni rimossi dalla UI

A partire da Android 10, le app non possono cercare il modo in cui vengono raggruppate le autorizzazioni nell'interfaccia utente.