Autorizza l'accesso ai dati utente su Android

L'autenticazione stabilisce chi è una persona e viene comunemente definita utente registrazione o accesso. 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 a Google Drive dell'utente.

Le chiamate di autenticazione e autorizzazione devono essere due operazioni distinte dei flussi di dati in base alle esigenze del sito o dell'app.

Se la tua app include funzionalità che possono usare i dati delle API di Google, ma non come parte delle funzionalità principali della tua app, devi progettare l'app 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 l'accesso.

Devi richiedere l'accesso agli ambiti a cui hai bisogno solo per accedere alle API di Google Quando l'utente esegue un'azione che richiede l'accesso a una determinata API. Per Ad esempio, devi richiedere l'autorizzazione ad accedere al Drive dell'utente ogni volta che l'utente tocca "Salva in Drive" .

Separando l'autorizzazione dall'autenticazione, è possibile evitare di sovraccaricare o confondere gli utenti sul motivo per cui vengono richiesti autorizzazioni aggiuntive.

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

Richiesta delle autorizzazioni richieste dalle azioni dell'utente

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

Ad esempio, se un utente esegue un'azione che richiede l'accesso al proprio Drive spazio di archiviazione per le app, procedi nel seguente modo:

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 relativo alle tue attività, puoi controllare se le richieste sono state acquisite correttamente e, in tal 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);
  }
}