Best practice relative alle autorizzazioni app

Le richieste di autorizzazione proteggono le informazioni sensibili disponibili da un dispositivo e devono essere utilizzate solo quando l'accesso alle informazioni è necessario per il funzionamento dell'app. Questo documento fornisce suggerimenti sui modi in cui potresti ottenere la stessa funzionalità (o 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 quadro più generale delle autorizzazioni Android, consulta la Panoramica delle autorizzazioni. Per maggiori dettagli su come utilizzare le autorizzazioni nel codice, consulta 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 le autorizzazioni all'utente in fase di runtime, anziché prima dell'installazione. Ciò consente alle app di richiedere autorizzazioni quando l'app richiede effettivamente 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:

Un maggiore contesto situazionale

Nel contesto della tua app, agli utenti viene richiesta 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, in caso di mancata corrispondenza tra ciò che richiedi e lo scopo dell'app, è ancora più importante fornire loro una spiegazione dettagliata del motivo per cui richiedi l'autorizzazione. Se possibile, fornisci 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, invia una richiesta solo quando è richiesta 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 concedano l'autorizzazione che si aspettano.

Maggiore flessibilità nella concessione delle autorizzazioni

Gli utenti possono negare l'accesso alle singole autorizzazioni quando vengono richieste e nelle impostazioni, ma potrebbero comunque sorprendere se la funzionalità si interrompe. Ti consigliamo di monitorare quanti utenti negano le autorizzazioni (ad esempio, utilizzando Google Analytics) in modo da poter eseguire il refactoring della tua app per evitare in base a questa autorizzazione o fornire una spiegazione migliore del motivo per cui è necessaria l'autorizzazione affinché l'app funzioni correttamente. Devi inoltre assicurarti che l'app gestisca le eccezioni quando gli utenti negano le richieste di autorizzazione o disattivano le autorizzazioni nelle impostazioni.

Aumento del carico sulle transazioni

Agli utenti viene chiesto di concedere l'accesso ai gruppi di autorizzazioni individualmente e non per insieme. Per questo è estremamente importante ridurre al minimo il numero di autorizzazioni richieste. Ciò aumenta il carico degli utenti per la concessione delle autorizzazioni e, di conseguenza, la probabilità che almeno una delle richieste venga negata.

Autorizzazioni che richiedono di diventare un gestore predefinito

Alcune app dipendono dall'accesso a informazioni utente sensibili relative ai registri chiamate e agli 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 di base prima di richiedere queste autorizzazioni di runtime.

Per ulteriori informazioni sui gestori predefiniti, incluse le istruzioni su come mostrare agli utenti una richiesta relativa a un gestore predefinito, consulta la guida sulle autorizzazioni utilizzate solo nei gestori predefiniti.

Conoscere le librerie in uso

A volte le librerie che utilizzi nella tua app richiedono autorizzazioni. Ad esempio, le librerie di annunci e analisi potrebbero richiedere l'accesso al gruppo di autorizzazioni LOCATION per implementare la funzionalità richiesta. Dal punto di vista dell'utente, tuttavia, 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 dovrebbero esaminare le proprie librerie e selezionare SDK di terze parti che non utilizzano autorizzazioni non necessarie. Ad esempio, se utilizzi una libreria che fornisce la funzionalità relativa alla posizione, assicurati di non richiedere l'autorizzazione FINE_LOCATION a meno che non utilizzi la funzionalità di targeting basato sulla località.

Limita l'accesso in background alla posizione

Quando la tua app è in esecuzione in background, l'accesso alla posizione dovrebbe essere fondamentale per la sua funzionalità di base e mostrare un chiaro vantaggio agli utenti.

Testa entrambi i modelli di autorizzazioni

In Android 6.0 (livello API 23) e versioni successive, gli utenti concedono e revocano le autorizzazioni app in fase di esecuzione, anziché quando installano l'app. Di conseguenza, dovrai testare la tua app in una gamma più ampia di condizioni. Nelle versioni precedenti ad Android 6.0, si potrebbe ragionevolmente presumere che, se la propria app è in esecuzione, ha 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 test per assicurarti che l'app funzioni correttamente in vari scenari di autorizzazione.

I seguenti suggerimenti ti aiuteranno a individuare problemi relativi al codice relativi alle autorizzazioni sui dispositivi che eseguono il livello API 23 o versioni successive:

  • 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 e ACCESS_FINE_LOCATION nel file manifest. Devi testare l'app attivando e disattivando ciascuna di queste autorizzazioni, per assicurarti che sia in grado di 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> ...
  • Analizza la tua app per individuare i servizi che utilizzano autorizzazioni.

Risorse aggiuntive