Ridurre al minimo le richieste di autorizzazione

Nell'ambito del miglioramento della qualità delle app e della protezione della privacy degli utenti, ti consigliamo di ridurre al minimo l'utilizzo delle autorizzazioni nelle tue app. In questo modo, gli utenti possono scoprire e utilizzare app di alta qualità che forniscono un ambiente utente sicuro e protetto.

La richiesta di autorizzazioni agli utenti interrompe il flusso utente e gli utenti possono negare la tua richiesta. Inoltre, ogni volta che dichiari una nuova autorizzazione, devi esaminare il modo in cui la tua app richiede e condivide i dati utente. Alcune autorizzazioni e API particolarmente sensibili richiedono di fornire un'informativa in-app relativa ad accesso ai dati, raccolta, utilizzo e condivisione.

Esistono diversi modi alternativi per ridurre al minimo l'utilizzo delle autorizzazioni:

  • Utilizza alternative a fedeltà inferiore per l'accesso alle autorizzazioni dei dati utente, ove applicabile, ad esempio richiedendo dati sulla posizione approssimativa anziché esatta quando non è necessario.
  • Utilizza selettori e alternative alle autorizzazioni che concedono l'accesso alle autorizzazioni sensibili in circostanze limitate, come il selettore di foto, il selettore di contatti e il pulsante posizione
  • Chiama le API che consentono alla tua app di eseguire la funzionalità scelta senza dichiarare le autorizzazioni.
  • Richiama intent o gestori di eventi specifici per eseguire la funzionalità, anziché dichiarare le autorizzazioni.
  • Il sistema fornisce contratti integrati per diverse operazioni sui file e supporta anche contratti personalizzati.

Se devi dichiarare un'autorizzazione, rispetta sempre la decisione dell'utente e fornisci un modo per ridurre gradualmente l'esperienza della tua app.

Questa pagina descrive diversi casi d'uso che la tua app può soddisfare senza dichiarare la necessità di autorizzazioni.

Mostra luoghi nelle vicinanze

La tua app potrebbe aver bisogno di conoscere la posizione approssimativa dell'utente. Questa funzionalità è utile per mostrare informazioni basate sulla posizione, ad esempio i ristoranti nelle vicinanze. Ogni caso d'uso della posizione ha un proprio insieme di requisiti di precisione e durata dell'accesso, e la maggior parte richiede solo un'approssimazione della posizione dell'utente. Se stai implementando una funzionalità nella tua app che dipende dalla posizione dell'utente, valuta le seguenti opzioni per scegliere l'approccio di accesso più adatto.

  • Se la funzionalità della tua app richiede la posizione esatta, ma solo in un determinato momento durante l'utilizzo dell'app, ad esempio "Cerca nelle vicinanze" o il completamento automatico di un indirizzo per l'e-commerce, l'utilizzo del pulsante posizione è probabilmente l'opzione migliore per ridurre sia l'attrito dell'utente sia la dipendenza dall'autorizzazione con ambito più ampio.
  • Se la tua app ha bisogno spesso della posizione, dichiara l' ACCESS_COARSE_LOCATION autorizzazione. L'autorizzazione fornisce una stima della posizione del dispositivo dai servizi di localizzazione, come descritto nella documentazione su precisione della posizione approssimativa.
  • Se la tua app ha bisogno della posizione meno spesso o solo una volta, valuta la possibilità di chiedere all'utente di inserire un indirizzo o un codice postale.

Altri casi d'uso potrebbero richiedere una stima più precisa della posizione di un dispositivo. Queste situazioni sono le uniche in cui è consentito dichiarare l'autorizzazione ACCESS_FINE_LOCATION.

Creare e accedere ai file

Android ti consente di creare e accedere ai file senza dover dichiarare autorizzazioni relative all'archiviazione o ai sensori.

Aprire file multimediali

La tua app potrebbe consentire agli utenti di scegliere tra foto e video, ad esempio per gli allegati dei messaggi o le immagini del profilo.

Per supportare questa funzionalità, utilizza il selettore di foto. Il selettore di foto non richiede autorizzazioni di runtime per l'utilizzo. Quando un utente interagisce con il selettore di foto per selezionare foto o video da condividere con la tua app, il sistema concede l'accesso in lettura temporaneo all'URI associato ai file multimediali selezionati.

Se la tua app deve accedere ai file multimediali senza utilizzare il selettore di foto, non devi dichiarare autorizzazioni di archiviazione:

Aprire documenti

La tua app potrebbe mostrare i documenti creati dall'utente, nella tua app o in un'altra app. Un esempio comune è un file di testo.

In questa situazione, dichiara READ_EXTERNAL_STORAGE solo per la compatibilità con i dispositivi meno recenti. Imposta android:maxSdkVersion su 28.

A seconda dell'app che ha creato il documento, esegui una delle seguenti operazioni:

Scattare una foto

Gli utenti potrebbero scattare foto nella tua app utilizzando l'app Fotocamera di sistema preinstallata.

In questa situazione, non dichiarare l'autorizzazione CAMERA. Richiama invece l' ACTION_IMAGE_CAPTURE azione intent.

Registrare un video

Gli utenti potrebbero registrare video nella tua app utilizzando l'app Fotocamera di sistema preinstallata.

In questa situazione, non dichiarare l'autorizzazione CAMERA. Richiama invece l' ACTION_VIDEO_CAPTURE azione intent.

Identificare il dispositivo su cui è in esecuzione un'istanza della tua app

Una particolare istanza della tua app potrebbe aver bisogno di sapere su quale dispositivo è in esecuzione. Questa funzionalità è utile per le app che hanno preferenze o messaggi specifici per il dispositivo, ad esempio playlist diverse per TV e dispositivi indossabili.

In questa situazione, non accedere direttamente all'IMEI del dispositivo. Infatti, a partire da Android 10, non puoi farlo. In alternativa, esegui una delle seguenti operazioni:

  • Ottieni un identificatore di dispositivo univoco per l'istanza della tua app utilizzando la libreria Instance ID.
  • Crea il tuo identificatore con ambito di archiviazione dell'app. Utilizza le funzioni di sistema di base, ad esempio randomUUID().

Accoppiare un dispositivo tramite Bluetooth

La tua app potrebbe offrire un'esperienza migliorata trasferendo i dati a un altro dispositivo tramite Bluetooth.

Per supportare questa funzionalità, non dichiarare le autorizzazioni ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATIION o BLUETOOTH_ADMIN. Utilizza invece l' accoppiamento dei dispositivi complementari.

Inserire automaticamente il numero di una carta di pagamento

Google Play Services offre una libreria che ti consente di inserire automaticamente il numero di una carta di pagamento. Anziché dichiarare l'autorizzazione CAMERA, puoi utilizzare la libreria di riconoscimento delle carte di debito e di credito.

Gestire chiamate e messaggi di testo

Android e Google Play Services offrono librerie che ti consentono di gestire chiamate e messaggi di testo senza dover dichiarare autorizzazioni relative a chiamate o messaggi SMS.

Inserire automaticamente un passcode monouso

Per semplificare un flusso di lavoro di autenticazione a due fattori, la tua app potrebbe inserire automaticamente il passcode monouso inviato al dispositivo di un utente per verificarne l'identità.

Per supportare questa funzionalità sui dispositivi con Google Play Services, non dichiarare l'autorizzazione READ_SMS. Utilizza invece l'API SMS Retriever.

Su altri dispositivi, se la tua app ha come target Android 8.0 (livello API 26) o versioni successive, genera un token specifico dell'app utilizzando createAppSpecificSmsToken(). Passa questo token a un'altra app o a un altro servizio che può inviare un messaggio SMS di verifica.

Verificare il numero di telefono di un utente

Per consentire alla tua app di verificare in modo sicuro il numero di telefono di un utente, la soluzione consigliata è l'API Digital Credentials. L'utilizzo di questa API direttamente o tramite un'ampia gamma di aggregatori compatibili ti consente di verificare in modo affidabile le informazioni dell'account utente senza richiedere autorizzazioni sensibili del dispositivo. Per una soluzione Firebase, consulta Verifica del numero di telefono di Firebase.

In alternativa, puoi verificare il numero di telefono di un utente utilizzando un passcode monouso, tramite l'API SMS Retriever.

Inserire automaticamente il numero di telefono dell'utente

Per fornire vendite o assistenza più efficienti, la tua app potrebbe consentire all'utente di inserire automaticamente il numero di telefono del dispositivo.

Per supportare questa funzionalità sui dispositivi con Google Play Services, non dichiarare l'autorizzazione READ_PHONE_STATE. Utilizza invece la libreria Phone Number Hint.

Filtrare le chiamate

Per ridurre al minimo le interruzioni non necessarie per l'utente, la tua app potrebbe filtrare le chiamate per lo spam.

Per supportare questa funzionalità, non dichiarare l'autorizzazione READ_PHONE_STATE. Utilizza invece l'API CallScreeningService.

Effettuare chiamate

La tua app potrebbe offrire la possibilità di effettuare una chiamata toccando le informazioni di un contatto.

Per supportare questa funzionalità, utilizza l'azione intent ACTION_DIAL anziché l'azione ACTION_CALL. ACTION_CALL richiede l'autorizzazione di installazione CALL_PHONE, che impedisce ai dispositivi che non possono effettuare chiamate, come alcuni tablet, di installare la tua applicazione.

Mettere in pausa i contenuti multimediali quando l'app viene interrotta

Se l'utente riceve una chiamata o se si verifica un allarme configurato dall'utente, l'app deve mettere in pausa la riproduzione di contenuti multimediali finché non riacquista lo stato di messa a fuoco audio.

Per supportare questa funzionalità, non dichiarare l'autorizzazione READ_PHONE_STATE. Implementa invece il gestore di eventi onAudioFocusChange(), che viene eseguito automaticamente quando il sistema sposta lo stato di messa a fuoco audio. Scopri di più su come implementare lo stato di messa a fuoco audio.

Scansionare i codici a barre

Android include il supporto per l'API Google Code Scanner, basata su Google Play Services, che ti consente di decodificare i codici a barre senza dichiarare autorizzazioni della fotocamera. Questa API contribuisce a proteggere la privacy degli utenti e riduce la probabilità di dover creare un'interfaccia utente personalizzata per il caso d'uso della scansione dei codici a barre.

L'API esegue la scansione del codice a barre e restituisce solo i risultati della scansione alla tua app. Le immagini vengono elaborate sul dispositivo e Google non memorizza dati o risultati della scansione.

Se la tua app deve supportare casi d'uso o formati di codici a barre complessi o se ri chiede un'interfaccia utente personalizzata, utilizza invece l'API di scansione dei codici a barre di ML Kit.

Reimpostare le autorizzazioni inutilizzate

Android offre diversi modi per reimpostare le autorizzazioni di runtime inutilizzate allo stato predefinito, ovvero negato.

Leggi le linee guida di progettazione.

Richiedere autorizzazioni di runtime

Dopo aver valutato che la tua app deve dichiarare e richiedere autorizzazioni di runtime, segui un flusso di lavoro specifico per farlo.

Leggi le linee guida di progettazione.

Spiegare perché la tua app ha bisogno di autorizzazioni

L'utilizzo di requestPermissions() mostra una finestra di dialogo che indica le autorizzazioni che la tua app vuole utilizzare, ma non spiega il motivo, il che potrebbe confondere l'utente.

Per ulteriori dettagli e consigli su come e quando mostrare questa finestra di dialogo, leggi le linee guida di progettazione.

Gestire i rifiuti di autorizzazioni

La tua app deve aiutare gli utenti a comprendere le implicazioni del rifiuto di un'autorizzazione prima e dopo che scelgono di farlo.

Leggi le linee guida di progettazione.