Autorizza l'accesso ai dati utente su Android

L'autenticazione stabilisce chi è un utente e viene comunemente indicato come registrazione o accesso dell'utente. L'autorizzazione è il processo di concessione o rifiuto dell'accesso a dati o risorse. Ad esempio, la tua app richiede il consenso dell'utente per accedere al suo Google Drive.

Le chiamate di autenticazione e autorizzazione devono essere due flussi separati e distinti in base alle esigenze del sito o dell'app.

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

Devi richiedere l'accesso agli ambiti necessari per accedere alle API di Google solo quando l'utente esegue un'azione che richiede l'accesso a una determinata API. Ad esempio, devi richiedere l'autorizzazione ad accedere a Drive dell'utente ogni volta che l'utente tocca il pulsante "Salva in Drive".

Separando l'autorizzazione dall'autenticazione, puoi evitare di sovraccaricare i nuovi utenti o di confondere gli utenti sul motivo per cui vengono richieste determinate autorizzazioni.

Nei Servizi di identità Google, l'autenticazione viene eseguita utilizzando SignInClient. Per autorizzare le azioni che richiedono l'accesso ai dati utente archiviati da Google, ti consigliamo di utilizzare AuthorizationClient.

Richiesta di autorizzazioni richieste dalle azioni dell'utente

Ogni volta che un utente esegue un'azione che richiede un ambito aggiuntivo, chiama AuthorizationClient.authorize().

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

List<Scopes> requestedScopes = Arrays.asList(DriveScopes.DRIVE_APPDATA);
AuthorizationRequest authorizationRequest = AuthorizationRequest.builder().setRequestedScopes(requestedScopes).build();
Identity.getAuthorizationClient(this)
        .authorize(authorizationRequest)
        .addOnSuccessListener(
            authorizationResult -> {
              if (authorizationResult.hasResolution()) {
                    // Access needs to be granted by the user
                PendingIntent pendingIntent = authorizationResult.getPendingIntent();
                try {
startIntentSenderForResult(pendingIntent.getIntentSender(),
REQUEST_AUTHORIZE, null, 0, 0, 0, null);
                } catch (IntentSender.SendIntentException e) {
                Log.e(TAG, "Couldn't start Authorization UI: " + e.getLocalizedMessage());
                }
              } else {
            // Access already granted, continue with user action
                saveToDriveAppFolder(authorizationResult);
              }
            })
        .addOnFailureListener(e -> Log.e(TAG, "Failed to authorize", e));

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

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  if (requestCode == MainActivity.REQUEST_AUTHORIZE) {
    AuthorizationResult authorizationResult = Identity.getAuthorizationClient(this).getAuthorizationResultFromIntent(data);
    saveToDriveAppFolder(authorizationResult);
  }
}