Richiedi ambiti aggiuntivi

Per garantire la migliore esperienza utente, devi richiedere il minor numero possibile di ambiti quando gli utenti accedono inizialmente. Se la funzionalità di base dell'app non è collegata a un servizio Google, la configurazione di GoogleSignInOptions.DEFAULT_SIGN_IN è spesso tutto ciò che ti serve per l'accesso.

Se la tua app ha funzionalità che possono utilizzare i dati delle API di Google, ma non sono richieste come parte della funzionalità principale dell'app, devi progettare l'app in modo che possa gestire correttamente i casi in cui i dati delle API non sono accessibili. Ad esempio, potresti nascondere un elenco di file salvati di recente quando l'utente non ha concesso l'accesso a Drive.

Devi richiedere ambiti aggiuntivi necessari per accedere alle API di Google solo quando l'utente esegue un'azione che richiede l'accesso a una determinata API. Ad esempio, potresti richiedere l'autorizzazione per accedere a Drive dell'utente solo quando l'utente tocca per la prima volta un pulsante "Salva su Drive".

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

Richiedere le 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 all'utente gli ambiti aggiuntivi necessari.

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

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 caso affermativo, eseguire l'azione dell'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 requestPermissions per controllare e acquisire un insieme di autorizzazioni in modo più comodo.