Un'autorizzazione speciale protegge l'accesso alle risorse di sistema che sono sensibili o non direttamente correlati alla privacy dell'utente. Queste autorizzazioni sono diverso rispetto al momento di installazione autorizzazioni e runtime autorizzazioni.
Alcuni esempi di autorizzazioni speciali includono:
- Programmazione di sveglie esatte.
- Visualizzazione e disegno su altre app.
- Accesso a tutti i dati di archiviazione.
Le app che dichiarano un'autorizzazione speciale vengono mostrate nella sezione Accesso speciale per le app nelle impostazioni di sistema (Figura 1). Per concedere un'autorizzazione speciale all'app, devi l'utente deve accedere a questa pagina: Impostazioni > App > Accesso speciale per le app.
Flusso di lavoro
Per richiedere un'autorizzazione speciale:
- Nel file manifest dell'app, dichiara lo speciale autorizzazioni necessarie alla tua app richiesta.
- Progetta l'esperienza utente della tua app in modo che vengano associate azioni specifiche al suo interno con autorizzazioni speciali specifiche. Fai sapere agli utenti quali azioni potrebbero richiedi alla tua app di concedere l'autorizzazione ad accedere ai dati utente privati.
- Attendi che l'utente richiami l'attività o l'azione nella tua app che richiede l'accesso a un utente privato specifico e i dati di Google Cloud. A questo punto, la tua app può richiedere l'autorizzazione speciale necessaria per accedere a tali dati.
- Verifica se l'utente ha già concesso l'autorizzazione speciale che richiede l'uso dell'app. Per farlo, devi usare il controllo personalizzato di ciascuna autorizzazione personalizzata. Se concesso, la tua app può accedere all'utente privato e i dati di Google Cloud. In caso contrario, vai al passaggio successivo. Nota: devi verificare se disporre dell'autorizzazione ogni volta che esegui un'operazione che richiede autorizzazione.
- Presentare una motivazione all'utente in un elemento dell'interfaccia utente che mostri in modo chiaro che spiega a quali dati l'app cerca di accedere e quali vantaggi l'app può fornire all'utente se concede l'autorizzazione speciale. Inoltre, poiché la tua app rimanda gli utenti alle impostazioni di sistema per concedere l'autorizzazione, includi brevi istruzioni che spieghino come gli utenti possono concedere l'autorizzazione là. La logica dell'interfaccia utente deve fornire una chiara opzione per consentire all'utente di disattivare la concessione dell'autorizzazione. Dopo che l'utente conferma il della logica, vai al passaggio successivo.
- Richiedi l'autorizzazione speciale a cui la tua app deve accedere per accedere i dati privati dell'utente. Ciò comporta probabilmente l'intenzione nelle impostazioni di sistema in cui l'utente può concedere l'autorizzazione. Non mi piace autorizzazioni di runtime, finestra di dialogo nessuna autorizzazione popup.
- Controlla la risposta dell'utente, se ha scelto di concedere o negare l'offerta speciale
, nel metodo
onResume()
. - Se l'utente ha concesso l'autorizzazione alla tua app, puoi accedere ai dati utente. Se invece l'utente ha negato l'autorizzazione, esegui la riduzione graduale della qualità la tua esperienza con l'app, fornisce funzionalità all'utente senza le informazioni protetti da tale autorizzazione.
Richiedi autorizzazioni speciali
A differenza delle autorizzazioni di runtime,
l'utente deve concedere autorizzazioni speciali dalla pagina Accesso speciale alle app in
impostazioni di sistema. Le app possono indirizzare gli utenti a questa pagina utilizzando un intent, che la mette in pausa
e avvia la pagina delle impostazioni corrispondente a una determinata autorizzazione speciale.
Dopo che l'utente torna nell'app, quest'ultima può controllare se l'autorizzazione è stata
concesso nella funzione onResume()
.
Il seguente codice di esempio mostra come richiedere l'oggetto
SCHEDULE_EXACT_ALARMS
autorizzazione speciale degli utenti:
val alarmManager = getSystemService<AlarmManager>()!!
when {
// if permission is granted, proceed with scheduling exact alarms…
alarmManager.canScheduleExactAlarms() -> {
alarmManager.setExact(...)
}
else -> {
// ask users to grant the permission in the corresponding settings page
startActivity(Intent(ACTION_REQUEST_SCHEDULE_EXACT_ALARM))
}
}
Codice campione per verificare l'autorizzazione e gestire le decisioni degli utenti in onResume()
:
override fun onResume() {
// ...
if (alarmManager.canScheduleExactAlarms()) {
// proceed with the action (setting exact alarms)
alarmManager.setExact(...)
}
else {
// permission not yet approved. Display user notice and gracefully degrade
your app experience.
alarmManager.setWindow(...)
}
}
Best practice e suggerimenti
Le seguenti sezioni forniscono alcune best practice e considerazioni da fare quando richiedere autorizzazioni speciali.
Ogni autorizzazione ha il proprio metodo di controllo
Le autorizzazioni speciali funzionano in modo diverso rispetto al runtime
autorizzazioni. Invece,
consulta la documentazione di riferimento sull'API autorizzazioni
pagina e utilizzare il controllo di accesso personalizzato
per ogni autorizzazione speciale. Ecco alcuni esempi:
AlarmManager#canScheduleExactAlarms()
per
SCHEDULE_EXACT_ALARMS
autorizzazione e
Environment#isExternalStorageManager()
per
MANAGE_EXTERNAL_STORAGE
autorizzazione.
Richiesta nel contesto
Analogamente alle autorizzazioni di runtime, le app devono richiedere autorizzazioni speciali
nel contesto, quando l'utente richiede un'azione specifica che richiede
autorizzazione. Ad esempio, attendi di richiedere l'autorizzazione SCHEDULE_EXACT_ALARMS
finché l'utente non pianifica l'invio di un'email a un'ora specifica.
Spiega la richiesta
Fornisci una motivazione prima di eseguire il reindirizzamento alle impostazioni di sistema. Poiché gli utenti lasciano il un'app per concedere autorizzazioni speciali, mostra un'interfaccia utente in-app prima di lancia l'intent nella pagina Accesso speciale per le app nelle impostazioni di sistema. Questa UI Deve spiegare chiaramente perché l'app ha bisogno dell'autorizzazione e come l'utente deve nella pagina delle impostazioni.