Le richieste di autorizzazione proteggono le informazioni sensibili disponibili su un dispositivo e devono essere utilizzate solo quando l'accesso alle informazioni è necessario per il funzionamento della tua app. Questo documento fornisce suggerimenti su come potresti essere in grado di ottenere la stessa funzionalità (o una migliore) senza richiedere l'accesso a queste informazioni. Non si tratta di una discussione esaustiva sul funzionamento delle autorizzazioni nel sistema operativo Android.
Per un'analisi più generale delle autorizzazioni Android, consulta la Panoramica delle autorizzazioni. Per maggiori dettagli su come utilizzare le autorizzazioni nel tuo codice, consulta la sezione Richiesta di autorizzazioni app.
Autorizzazioni in Android 6.0 e versioni successive
In Android 6.0 (livello API 23) e versioni successive, le app possono richiedere autorizzazioni all'utente in fase di runtime anziché prima dell'installazione. In questo modo le app possono richiedere autorizzazioni quando effettivamente richiedono i servizi o i dati protetti dai servizi. Anche se questo non modifica (necessariamente) il comportamento complessivo dell'app, vengono apportate alcune modifiche pertinenti al modo in cui vengono gestiti i dati utente sensibili:
Aumento del contesto situazionale
In fase di runtime, nel contesto della tua app, agli utenti viene chiesto di autorizzare l'accesso alle funzionalità coperte da questi gruppi di autorizzazioni. Gli utenti sono più sensibili al contesto in cui viene richiesta l'autorizzazione e, se non c'è corrispondenza tra ciò che richiedi e lo scopo della tua app, è ancora più importante fornire all'utente una spiegazione dettagliata del motivo per cui richiedi l'autorizzazione. Se possibile, devi fornire una spiegazione della tua richiesta sia al momento della richiesta sia in una finestra di dialogo di follow-up se l'utente rifiuta la richiesta.
Per aumentare le probabilità di accettazione di una richiesta di autorizzazione, chiedi di conferma solo quando è necessaria una funzionalità specifica. Ad esempio, chiedi solo per il microfono quando un utente fa clic sul pulsante del microfono. Gli utenti sono più propensi a consentire un'autorizzazione che si aspettano.
Maggiore flessibilità nella concessione delle autorizzazioni
Gli utenti possono negare l'accesso a singole autorizzazioni nel momento in cui vengono richieste e nelle impostazioni, ma potrebbero comunque rimanere sorpresi quando la funzionalità viene potrebbe non funzionare correttamente. È consigliabile controllare quanti utenti negano autorizzazioni (ad es. utilizzando Google Analytics) per eseguire il refactoring evitare in base a questa autorizzazione o fornire una migliore spiegazione del motivo per cui è necessaria l'autorizzazione per il corretto funzionamento dell'app. Devi anche assicurarti che la tua app gestisca le eccezioni quando gli utenti rifiutano le richieste di autorizzazione o disattivano le autorizzazioni nelle impostazioni.
Aumento del carico delle transazioni
Agli utenti viene chiesto di concedere l'accesso per i gruppi di autorizzazioni singolarmente e non come insieme. Questo rende estremamente importante ridurre al minimo il numero di autorizzazioni richiesta. Ciò aumenta il carico per l'utente per la concessione delle 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 sensibili dell'utente relative ai registri chiamate e SMS. Se vuoi richiedere autorizzazioni specifiche per i registri chiamate e SMS e pubblicare la tua app sul Play Store, devi inserire all'utente di impostare l'app come gestore predefinito di una funzione di sistema di base prima richiedendo queste autorizzazioni di runtime.
Per ulteriori informazioni sui gestori predefiniti, incluse le indicazioni sulla visualizzazione di un richiesta relativa al gestore predefinito agli utenti, consulta la guida sulle autorizzazioni utilizzate solo in e gestori predefiniti.
Conoscere le librerie con cui si lavora
A volte le autorizzazioni sono richieste dalle librerie che utilizzi nella tua app. Per
Ad esempio, le librerie di annunci e analisi potrebbero richiedere l'accesso ai
LOCATION
gruppo di autorizzazioni per implementare la richiesta
funzionalità. 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 SDK di terze parti che non utilizzano autorizzazioni non necessarie. Ad esempio, se
stai utilizzando una libreria che offre funzionalità di localizzazione, assicurati di
non stai richiedendo l'autorizzazione FINE_LOCATION
a meno che tu non
utilizzando la funzionalità di targeting basato sulla località.
Limitare l'accesso in background alla posizione
Quando l'app è in esecuzione in background, l'accesso alla posizione deve essere fondamentale per la funzionalità di base dell'app e offrire un chiaro vantaggio agli utenti.
Eseguire il test per entrambi i modelli di autorizzazione
In Android 6.0 (livello API 23) e versioni successive, gli utenti concedono e revocano l'accesso le autorizzazioni in fase di esecuzione, invece che al momento dell'installazione dell'app. Come dovrai testare l'app in un maggior numero di condizioni. Prima di Android 6.0, potresti ragionevolmente presumere che, se la tua app è in esecuzione, abbia tutte le autorizzazioni dichiarate nel file manifest dell'app. Ora l'utente può attivare o disattivare le autorizzazioni per qualsiasi app, indipendentemente dal livello dell'API. Devi verificare che la tua app funzioni correttamente in vari scenari di autorizzazione.
I seguenti suggerimenti ti aiuteranno a individuare i problemi con il codice relativi alle autorizzazioni su dispositivi con livello API 23 o superiore:
- Identifica le autorizzazioni attuali della tua app e i relativi percorsi di codice.
- Testare i flussi utente tra servizi e dati protetti da autorizzazione.
- Esegui test con varie combinazioni di autorizzazioni concesse o revocate. Ad esempio, un'app Fotocamera potrebbe elencare
CAMERA
,READ_CONTACTS
eACCESS_FINE_LOCATION
nel file manifest. Devi testare l'app con ognuna di queste autorizzazioni attivati e disattivati, per assicurarti che l'app possa gestire tutte le autorizzazioni le configurazioni in modo controllato. - 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 individuare i servizi che utilizzano le autorizzazioni.
Risorse aggiuntive
- Linee guida di Material Design per le autorizzazioni Android
- Android Marshmallow 6.0: richiesta di autorizzazione: questo video spiega il modello di autorizzazione di runtime di Android e il modo corretto di chiedere le autorizzazioni agli utenti.
- Spiega il motivo per cui l'app ha bisogno delle autorizzazioni
- Best practice per gli identificatori univoci