Best practice relative alle autorizzazioni app

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 una panoramica più generale delle autorizzazioni Android, consulta Panoramica delle autorizzazioni. Per informazioni dettagliate su come gestire le autorizzazioni nel codice, consulta Richiedere le 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, comporta alcune modifiche pertinenti alla modalità di gestione dei dati utente sensibili:

Maggiore 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. In caso di mancata corrispondenza tra la richiesta e lo scopo della tua app, è ancora più importante fornire una spiegazione dettagliata del motivo per cui richiedi l'autorizzazione. Se 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 le probabilità di accettazione di una richiesta di autorizzazione, chiedi di conferma solo quando è necessaria una funzionalità specifica. Ad esempio, chiedi di accedere al microfono solo 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 alle singole autorizzazioni al momento della richiesta e nelle impostazioni, ma potrebbero comunque rimanere sorpresi quando la funzionalità risulta compromessa. È buona norma monitorare il numero di utenti che negano le autorizzazioni (ad es. l'utilizzo di Google Analytics) in modo da poter eseguire il refactoring dell'app per evitare di dipendere da questa 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 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. Per questo motivo, è estremamente importante ridurre al minimo il numero di autorizzazioni richieste. 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 a registri chiamate e messaggi SMS. Se vuoi richiedere autorizzazioni specifiche per registri chiamate e SMS e pubblicare la tua app sul Play Store, devi chiedere all'utente di impostare l'app come gestore predefinito per una funzione di sistema principale prima di richiedere queste autorizzazioni di runtime.

Per ulteriori informazioni sui gestori predefiniti, incluse indicazioni sulla visualizzazione di una richiesta relativa al gestore predefinito agli utenti, consulta la guida sulle autorizzazioni utilizzate solo nei gestori predefiniti.

Conoscere 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 gruppo di autorizzazioni LOCATION 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 SDK di terze parti che non utilizzano autorizzazioni non necessarie. Ad esempio, se utilizzi una libreria che fornisce funzionalità di geolocalizzazione, assicurati di non richiedere l'autorizzazione FINE_LOCATION, a meno che non stia utilizzando la funzionalità di targeting per 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.

Testa entrambi i modelli di autorizzazione

In Android 6.0 (livello API 23) e versioni successive, gli utenti concedono e revocano le autorizzazioni dell'app in fase di esecuzione, anziché al momento dell'installazione. Di conseguenza, dovrai testare la tua app in una gamma più ampia di condizioni. Prima di Android 6.0, si poteva ragionevolmente supporre 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 API. Devi verificare che la tua app funzioni correttamente in vari scenari di autorizzazione.

I seguenti suggerimenti ti aiuteranno a trovare problemi di codice relativi alle autorizzazioni su dispositivi con livello API 23 o versioni successive:

  • Identifica le autorizzazioni attuali della tua app e i percorsi di codice correlati.
  • 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 e ACCESS_FINE_LOCATION nel file manifest. Devi testare l'app con ciascuna di queste autorizzazioni attivata e disattivata, per assicurarti che l'app possa gestire agevolmente tutte le configurazioni di 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> ...
  • Analizza la tua app per individuare i servizi che utilizzano le autorizzazioni.

Risorse aggiuntive