Le richieste di autorizzazioni proteggono le informazioni sensibili disponibili su un dispositivo e devono essere utilizzate solo quando l'accesso alle informazioni è necessario per il funzionamento dell'app. Questo documento fornisce suggerimenti su come ottenere la stessa (o migliore) funzionalità senza richiedere l'accesso a queste informazioni. Non è una discussione esaustiva sul funzionamento delle autorizzazioni nel sistema operativo Android.
Per una panoramica più generale delle autorizzazioni di Android, consulta Panoramica delle autorizzazioni. Per informazioni dettagliate su come utilizzare le autorizzazioni nel codice, consulta Richiedere le autorizzazioni dell'app.
Autorizzazioni in Android 6.0 e versioni successive
In Android 6.0 (livello API 23) e versioni successive, le app possono richiedere le autorizzazioni da all'utente in fase di runtime, anziché prima dell'installazione. In questo modo, le app possono richiedere le autorizzazioni quando effettivamente richiedono i servizi o i dati protetti dai servizi. Anche se questo non modifica (necessariamente) il comportamento generale dell'app comportamento, crea alcune modifiche rilevanti per il modo in cui vengono gestiti i dati utente sensibili vengono gestiti:
Aumento del contesto situazionale
Agli utenti viene chiesto in fase di runtime, nel contesto della tua app, l'autorizzazione ad accedere alla funzionalità coperta da questi gruppi di autorizzazioni. Gli utenti sono più sensibili al contesto in cui viene richiesta l'autorizzazione e, se c'è una discrepanza tra ciò che stai richiedendo e lo scopo della tua app, è ancora più importante fornire all'utente una spiegazione dettagliata del motivo per cui stai richiedendo l'autorizzazione. Quando possibile, devi fornire una spiegazione della richiesta sia al momento della richiesta sia in una finestra di dialogo di follow-up se l'utente rifiuta la richiesta.
Per aumentare la probabilità che una richiesta di autorizzazione venga accettata, chiedi l'autorizzazione solo quando è necessaria una funzionalità specifica. Ad esempio, chiedi l'accesso al microfono solo quando un utente fa clic sul pulsante del microfono. È più probabile che gli utenti consentano un'autorizzazione che si aspettano.
Maggiore flessibilità nella concessione delle autorizzazioni
Gli utenti possono negare l'accesso alle singole autorizzazioni al momento della richiesta e nelle impostazioni, ma potrebbero comunque rimanere sorpresi quando la funzionalità non funziona di conseguenza. È una buona idea monitorare il numero di utenti che negano le autorizzazioni (ad es. utilizzando Google Analytics) in modo da poter eseguire il refactoring dell'app per evitare di dipendere da quell'autorizzazione o fornire una spiegazione migliore del motivo per cui hai bisogno dell'autorizzazione per il corretto funzionamento dell'app. Devi anche assicurarti che la tua app gestisca le eccezioni quando gli utenti negano le richieste di autorizzazione o disattivano le autorizzazioni nelle impostazioni.
Aumento dell'onere transazionale
Agli utenti viene chiesto di concedere l'accesso ai gruppi di autorizzazioni singolarmente e non come insieme. Per questo motivo, è estremamente importante ridurre al minimo il numero di autorizzazioni richieste. In questo modo, aumenta l'onere per l'utente di concedere le autorizzazioni e, di conseguenza, aumenta la probabilità che almeno una delle richieste venga rifiutata.
Autorizzazioni che richiedono di diventare un gestore predefinito
Alcune app dipendono dall'accesso a informazioni utente sensibili relative ai registri chiamate e ai messaggi SMS. Se vuoi richiedere le autorizzazioni specifiche per i registri chiamate e i messaggi SMS e pubblicare la tua app sul Play Store, devi chiedere all' utente di impostare la tua app come gestore predefinito per una funzione di sistema di base prima di richiedere queste autorizzazioni di runtime.
Per ulteriori informazioni sui gestori predefiniti, incluse le indicazioni su come mostrare agli utenti una richiesta di gestore predefinito, consulta la guida sulle autorizzazioni utilizzate solo nei gestori predefiniti.
Conosci le librerie con cui stai lavorando
A volte le autorizzazioni sono richieste dalle librerie che utilizzi nella tua app. Ad
esempio, le librerie di annunci e analisi potrebbero richiedere l'accesso al
LOCATION gruppo di autorizzazioni per implementare la funzionalità
richiesta. Tuttavia, dal punto di vista dell'utente, la richiesta di autorizzazione proviene
dalla tua app, non dalla libreria.
Proprio come gli utenti selezionano le app che utilizzano meno autorizzazioni per la stessa
funzionalità, gli sviluppatori devono esaminare le proprie librerie e selezionare
gli SDK di terze parti che non utilizzano autorizzazioni non necessarie. Ad esempio, se
utilizzi una libreria che fornisce funzionalità di localizzazione, assicurati di non richiedere l'autorizzazione FINE_LOCATION a meno che tu non stia
utilizzando la funzionalità di targeting basato sulla località.
Limita l'accesso alla posizione in background
Quando l'app è in esecuzione in background, l'accesso alla posizione deve essere fondamentale per la funzionalità di base dell'app e mostrare un chiaro vantaggio per gli utenti.
Testa entrambi i modelli di autorizzazioni
In Android 6.0 (livello API 23) e versioni successive, gli utenti concedono e revocano le autorizzazioni delle app in fase di runtime, anziché durante l'installazione dell'app. Di conseguenza, dovrai testare la tua app in una gamma più ampia di condizioni. Prima di Android 6.0, potevi ragionevolmente presumere che, se la tua app è in esecuzione, dispone di tutte le autorizzazioni dichiarate nel file manifest dell'app. Ora, l'utente può attivare o disattivare le autorizzazioni per qualsiasi app, indipendentemente dal livello API. Devi eseguire dei test per assicurarti che la tua app funzioni correttamente in vari scenari di autorizzazioni.
I seguenti suggerimenti ti aiuteranno a trovare i problemi di codice relativi alle autorizzazioni sui dispositivi con livello API 23 o superiore:
- Identifica le autorizzazioni attuali della tua app e i relativi percorsi di codice.
- Testa i flussi utente su servizi e dati protetti da autorizzazioni.
- Esegui test con varie combinazioni di autorizzazioni concesse o revocate. Ad
esempio, un'app per la fotocamera potrebbe elencare
CAMERA,READ_CONTACTSeACCESS_FINE_LOCATIONnel file manifest. Devi testare l'app con ciascuna di queste autorizzazioni attivate e disattivate per assicurarti che l'app possa gestire correttamente tutte le configurazioni delle autorizzazioni. - Utilizza lo strumento adb per gestire
le autorizzazioni dalla riga di comando:
- Elenca le autorizzazioni e lo stato per gruppo:
$ adb shell pm list permissions -d -g
- Concedi o revoca una o più autorizzazioni:
$ adb shell pm [grant|revoke] <permission-name> ...
- Elenca le autorizzazioni e lo stato per gruppo:
- Analizza la tua app per i servizi che utilizzano le autorizzazioni.
Risorse aggiuntive
- Linee guida di Material Design per le autorizzazioni di Android
- Android Marshmallow 6.0: Asking For Permission: Questo video spiega il modello di autorizzazioni di runtime di Android e il modo corretto per chiedere le autorizzazioni agli utenti.
- Spiega perché l'app ha bisogno delle autorizzazioni
- Best practice per gli identificatori univoci