Richiesta di ambiti aggiuntivi

Per un'esperienza utente ottimale, quando inizialmente accedono gli utenti devi richiedere il minor numero possibile di ambiti. Se la funzionalità di base dell'app non è associata a un servizio Google, spesso la configurazione di GoogleSignInOptions.DEFAULT_SIGN_IN è sufficiente al momento dell'accesso.

Se la tua app dispone di funzionalità che possono utilizzare i dati delle API di Google, ma non sono necessarie per la funzionalità di base dell'app, devi progettare l'app in modo che sia in grado di gestire agevolmente i casi in cui i dati dell'API non sono accessibili. Ad esempio, potresti nascondere un elenco di file salvati di recente se l'utente non ha concesso l'accesso a Drive.

Devi richiedere gli ambiti aggiuntivi di cui hai bisogno per accedere alle API di Google solo quando l'utente esegue un'azione che richiede l'accesso a un'API specifica. Ad esempio, puoi richiedere l'autorizzazione per accedere al Drive dell'utente solo quando quest'ultimo tocca il pulsante "Salva in Drive" per la prima volta.

Utilizzando questa tecnica, puoi evitare di confondere i nuovi utenti o di confondere gli utenti sul motivo per cui vengono richieste determinate autorizzazioni.

Richiesta delle autorizzazioni richieste dalle azioni dell'utente

Ogni volta che un utente esegue un'azione che richiede un ambito non richiesto al momento dell'accesso, chiama GoogleSignIn.hasPermissions per verificare se l'utente ha già concesso le autorizzazioni richieste. In caso contrario, chiama GoogleSignIn.requestPermissions per avviare un'attività che richieda gli ambiti aggiuntivi richiesti all'utente.

Ad esempio, se un utente esegue un'azione che richiede l'accesso allo spazio di archiviazione dell'app Drive:

if (!GoogleSignIn.hasPermissions(
        GoogleSignIn.getLastSignedInAccount(getActivity()),
        Drive.SCOPE_APPFOLDER)) {
    GoogleSignIn.requestPermissions(
            MyExampleActivity.this,
            RC_REQUEST_PERMISSION_SUCCESS_CONTINUE_FILE_CREATION,
            GoogleSignIn.getLastSignedInAccount(getActivity()),
            Drive.SCOPE_APPFOLDER);
} else {
    saveToDriveAppFolder();
}

Nel callback onActivityResult dell'attività, puoi verificare se le autorizzazioni richieste sono state acquisite correttamente e, in questo caso, eseguire l'azione utente.

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
        if (RC_REQUEST_PERMISSION_SUCCESS_CONTINUE_FILE_CREATION == requestCode) {
            saveToDriveAppFolder();
        }
    }
}

Puoi anche passare un GoogleSignInOptionsExtension a hasPermissions e un requestPermissions per verificare e acquisire più comodamente un insieme di autorizzazioni.