Autorizzazioni runtime

In Android 6.0 e versioni successive, il modello di autorizzazioni delle app per Android è progettato per autorizzazioni più comprensibili, utili e sicure per gli utenti. Il modello ha spostato Android che richiedono autorizzazioni pericolose (vedi Autorizzazioni interessate) da un un modello di autorizzazione al momento dell'installazione a un modello di autorizzazione di runtime:

  • Autorizzazioni al momento dell'installazione

    (Android 5.1 e versioni precedenti) Gli utenti concedono autorizzazioni pericolose a un'app quando installano o aggiornano l'app. Dispositivo produttori e operatori possono preinstallare app con autorizzazioni preconcesse senza informare il utente.

  • Autorizzazioni di runtime

    (Android 6.0-9) Gli utenti concedono autorizzazioni pericolose a un'app quando è in esecuzione. Quando vengono richieste le autorizzazioni (ad esempio all'avvio dell'app o quando l'utente accede a un funzionalità) dipende dall'app, ma l'utente concede o nega l'accesso all'app a specifiche gruppi di autorizzazioni. Gli OEM/gli operatori possono preinstallare le app, ma non possono preconcedere le autorizzazioni a meno che non segui la procedura di eccezione. Consulta la sezione Creazione di eccezioni.

    (Android 10). Gli utenti notano una maggiore trasparenza e hanno controllo sulle app con autorizzazioni di runtime AR (Riconoscimento attività). Gli utenti vengono suggeriti da finestra di dialogo delle autorizzazioni di runtime per consentire sempre, consentire durante l'uso o negare le autorizzazioni. In un upgrade del sistema operativo ad Android 10, le autorizzazioni concesse alle app vengono mantenute, ma gli utenti possono andare in Impostazioni e modificarle.

Le autorizzazioni di runtime impediscono alle app di accedere a dati privati senza il consenso dell'utente. e fornire loro ulteriore contesto e visibilità sui tipi di autorizzazioni che che le app cercano o sono state concesse. Il modello di runtime incoraggia gli sviluppatori aiutare gli utenti a capire perché le app richiedono le autorizzazioni richieste, e offre una maggiore in modo che gli utenti possano prendere decisioni migliori in merito alla concessione o al rifiuto.

Autorizzazioni interessate

Android 6.0 e versioni successive richiedono autorizzazioni pericolose per usare un modello di autorizzazioni di runtime. Le autorizzazioni pericolose sono autorizzazioni ad alto rischio (ad esempio READ_CALENDAR) che concedono Richiedere l'accesso delle app a dati privati dell'utente o il controllo di un dispositivo, il che può essere negativo avere un impatto sull'utente. Per visualizzare un elenco delle autorizzazioni pericolose, esegui il comando:

adb shell pm list permissions -g -d

Android 6.0 e versioni successive non modifica il comportamento normale autorizzazioni. Queste sono tutte autorizzazioni non pericolose, tra cui quelle normali, le autorizzazioni di accesso al sistema e le autorizzazioni di firma. Le autorizzazioni normali sono autorizzazioni a rischio inferiore (come SET_WALLPAPER) che concedono l'accesso alle app di richiesta a livello di app isolata funzionalità con rischi minimi per altre app, il sistema o l'utente. Come in Android 5.1 e release precedenti, il sistema concede automaticamente le normali autorizzazioni a un'app richiedente all'indirizzo l'installazione senza richiedere l'approvazione dell'utente. Per maggiori dettagli sulle autorizzazioni, leggi l'articolo <permission> .

Limitazioni rigide e flessibili in Android 10

Oltre a essere pericolosa, un'autorizzazione può essere soggetta a restrizioni o con restrizioni temporanee. In entrambi i casi, anche l'autorizzazione limitata deve essere inclusa nella lista consentita. Non incluso nella lista consentita le limitazioni rigidi si comportano in modo diverso rispetto alle restrizioni non consentite nella lista consentita restrizioni:

  • (Limitazioni rigorose) Alle app non è possibile concedere autorizzazioni che non sono inserito nella lista consentita.
  • (Limitazioni tecniche) Le app che non sono state inserite nella lista consentita si comportano in base ai l'autorizzazione specifica richiesta. Il comportamento viene descritto pubblicamente documentazione relativa all'autorizzazione richiesta.

Durante l'installazione di un'app, il programma di installazione (ad esempio Google Play Store) potrebbe selezionare per non inserire nella lista consentita le autorizzazioni limitate per l'app. Le autorizzazioni sono sono limitati dalla piattaforma e sono concessi solo se un'app soddisfa criteri speciali in base ai criteri della piattaforma. Esempi di tipi di autorizzazioni con restrizioni hard includono gli SMS e le autorizzazioni Registro chiamate.

La lista consentita viene inserita durante l'installazione e

  • un'app è già installata durante un upgrade di Android dalla versione 9 alla 10.
  • è stata preconcessa un'autorizzazione o un'app è preinstallata.
  • è necessaria un'autorizzazione per un ruolo già definito autorizzazione.
  • il programma di installazione (ad esempio Google Play Store) contrassegna l'autorizzazione come inserito nella lista consentita.

Gli utenti non possono inserire manualmente le autorizzazioni nella lista consentita.

Requisiti

Il modello di autorizzazione di runtime si applica a tutte le app, incluse le app e le app preinstallate inviati al dispositivo durante la procedura di configurazione. I requisiti del software dell'app includono:

  • Il modello di autorizzazione di runtime deve essere coerente tra tutti i dispositivi con Android 6.0 e superiori. Questo requisito viene applicato dai test della suite per il test di compatibilità Android (CTS).
  • Le app devono richiedere agli utenti di concedere le autorizzazioni app in fase di runtime. Per maggiori dettagli, consulta Aggiornamento Google Cloud. Possono essere concesse eccezioni limitate ad app e gestori predefiniti che forniscono funzionalità di base del dispositivo fondamentali per il funzionamento previsto del dispositivo. Ad esempio, l'app Telefono predefinita del dispositivo per la gestione di ACTION_CALL potrebbe avere Accesso alle autorizzazioni del telefono. Per maggiori dettagli, consulta la sezione Creare eccezioni.
  • App precaricate con autorizzazioni pericolose deve avere il livello API target 23 e mantenere il modello di autorizzazioni di runtime. ovvero il flusso dell'interfaccia utente durante l'installazione dell'app non devono discostarsi dall'implementazione AOSP PermissionController, gli utenti possono revocare autorizzazioni pericolose di app preinstallate e così via attiva.
  • Le app headless devono utilizzare un'attività per richiedere autorizzazioni o per UID di un'altra app che dispone delle autorizzazioni necessarie. Per maggiori dettagli, vedi App headless.

Migrazione delle autorizzazioni

Le autorizzazioni concesse alle app su Android 5.x rimangono concesse dopo l'aggiornamento ad Android 6.0 o superiore, ma gli utenti possono revocare queste autorizzazioni in qualsiasi momento.

In un aggiornamento di Android da 9 a 10, tutte le autorizzazioni limitate ricevono inserito nella lista consentita. Per maggiori dettagli sull'implementazione delle autorizzazioni di suddivisione in primo piano/in background, consulta Modifica della privacy di Android 10, che inizia con Richiedi background posizione.

Integrazione

Quando integri il modello di autorizzazioni di runtime delle app per Android 6.0 e versioni successive, devi: aggiornare le app preinstallate affinché siano compatibili con il nuovo modello. Puoi anche definire eccezioni per le app che sono gestori/provider predefiniti per la funzionalità di base, definiscono autorizzazioni personalizzate e personalizza il tema utilizzato nell'app PermissionController.

Aggiorna le app

Le app nell'immagine di sistema e le app preinstallate non vengono preconcesse automaticamente autorizzazioni aggiuntive. Ti invitiamo a collaborare con sviluppatori di app preinstallate (OEM, operatore e parte) di apportare le modifiche necessarie all'app utilizzando lo strumento di generazione linee guida. Nello specifico, devi assicurarti che le app preinstallate vengano modificate per evitare arresti anomali e altri problemi quando gli utenti revocano le autorizzazioni.

App precaricate

In Android 9 e versioni precedenti, le app precaricate che usano autorizzazioni pericolose devono avere il livello API target 23 o versioni successive e mantieni il modello di autorizzazione AOSP Android 6.0 e versioni successive. Ad esempio, il flusso UI durante l'installazione di un'app non devono discostarsi dall'implementazione AOSP PermissionController. Gli utenti possono anche revocare autorizzazioni pericolose di app preinstallate.

Nelle versioni da 6.0 a 9 di Android, alcune autorizzazioni vengono concesse durante il flusso di installazione. Tuttavia, a partire da in 10, il flusso di installazione (eseguito dall'app Package Installer) è una funzione separata dalla concessione delle autorizzazioni (nel Permission Controller).

App headless

Solo le attività possono richiedere autorizzazioni. I servizi non possono richiedere le autorizzazioni direttamente.

  • In Android 5.1 e versioni precedenti, le app headless possono richiedere autorizzazioni quando installati o se sono stati preinstallati senza l'utilizzo di alcuna attività.
  • Nella Per le app headless di Android 6.0 e versioni successive è necessario usare uno dei seguenti metodi richiedi le autorizzazioni:
    • Aggiungi un'attività per richiedere le autorizzazioni. Questo è il metodo preferito.
    • Condividere un UID con un'altra app che dispone delle autorizzazioni necessarie. Usa questa solo quando è necessario che la piattaforma gestisca più APK come singole dell'app.

L'obiettivo è evitare di confondere gli utenti con richieste di autorizzazione che appaiono fuori contesto.

Personalizzare l'interfaccia utente di PackageInstaller

Se vuoi, puoi personalizzare il tema dell'interfaccia utente Autorizzazioni aggiornamento dei temi predefiniti del dispositivo (Theme.DeviceDefault.Settings) e Theme.DeviceDefault.Light.Dialog.NoActionBar) utilizzati da PackageInstaller. Tuttavia, poiché la coerenza è fondamentale per gli sviluppatori di app, non puoi personalizzare il posizionamento, la posizione e le regole relative a quando le autorizzazioni nell'interfaccia utente.

Per includere stringhe per altre lingue, aggiungi il da stringhe ad AOSP.

Crea eccezioni

Puoi pre-concedere autorizzazioni ad app che sono gestori predefiniti o ai provider per le funzionalità di base del sistema operativo DefaultPermissionGrantPolicy.java classe in PackageManager. Esempi:

ACTION_CALL (Dialer) Default
Phone, Contacts, SMS, Microphone
SMS_DELIVER_ACTION (SMS/MMS) Default
Phone, Contacts, SMS

Definisci autorizzazioni personalizzate

Puoi definire autorizzazioni e gruppi personalizzati come normale o pericoloso e aggiungi autorizzazioni specifiche dell'operatore/OEM alle gruppi di autorizzazioni, proprio come in Android 5.x e versioni precedenti.

In Android 6.0 e versioni successive, se aggiungi una nuova autorizzazione pericolosa, questa deve essere gestita in allo stesso modo di altre autorizzazioni pericolose (richieste durante il runtime dell'app e revocabile dagli utenti). Nello specifico:

  • Puoi aggiungere nuove autorizzazioni a un gruppo corrente, ma non puoi modificare le Mappatura AOSP di autorizzazioni pericolose e gruppi di autorizzazioni pericolosi. (In altre parole, non può rimuovere un'autorizzazione da un gruppo per assegnarla a un altro gruppo).
  • Puoi aggiungere nuovi gruppi di autorizzazioni nelle app installate sul dispositivo. ma non puoi aggiungere nuovi gruppi di autorizzazioni nel file manifest della piattaforma.

Autorizzazioni di test

Android include test della Compatibility Test Suite (CTS) che verificano le singole autorizzazioni siano mappate ai gruppi corretti. Il superamento di questi test è un requisito per la compatibilità con Android 6.0 e versioni successive di CTS.

Revoca autorizzazioni

In Android 13 e versioni successive, puoi revocare le tue autorizzazioni le autorizzazioni di runtime Context.revokeSelfPermissionsOnKill(). La revoca avviene in modo asincrono e viene attivata quando è sicuro farlo senza interrompere per l'utente. Quando la revoca viene attivata, tutti i processi in esecuzione nell'UID di chiamata vengono terminati.

È importante capire che la revoca di una singola autorizzazione potrebbe non avere effetto nel di Google Cloud, che gestisce le autorizzazioni per gruppo. Generalmente, un gruppo di autorizzazioni viene visualizzato come purché sia concessa almeno una delle autorizzazioni del gruppo. Se devi assicurarti che gli utenti verificare che la revoca nelle impostazioni sia importante per te, assicurati di revocare ogni nel gruppo di autorizzazioni. Per sapere quali autorizzazioni appartengono a un determinato gruppo, puoi usa PackageManager.getGroupOfPlatformPermission e PackageManager.getPlatformPermissionsForGroup.

Quando il sistema revoca le autorizzazioni richieste, revoca anche lo sfondo corrispondente autorizzazioni se nessuna delle autorizzazioni in primo piano corrispondenti è ancora concessa.

La revoca non viene attivata finché il processo rimane in primo piano, ma può possono essere attivati immediatamente terminando manualmente tutti i processi in esecuzione nell'uid corrente, utilizzando System.exit(). Tuttavia, è consigliabile lasciare che sia il sistema a decidere quando attivarlo.

Una volta che la revoca di un'autorizzazione diventa effettiva, potrai richiederla nuovamente e l'utente potrà se viene richiesto di accettare o rifiutare la richiesta. Non è possibile richiedere un'autorizzazione con sia stata rifiutata in precedenza dall'utente. Nonostante ti invitiamo a revocare le autorizzazioni che ti al momento sono sospesi ma non sono più necessari, devi prestare attenzione a non informare l'utente del revoca fino alla sua entrata in vigore.