Autorizzare l'accesso ai dati utente di Google

L'autenticazione stabilisce l'identità di una persona e viene comunemente definita registrazione o accesso 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 dell'app.

Se la tua app ha funzionalità che possono utilizzare i dati delle API di Google, ma non sono richieste come parte delle funzionalità principali 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 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 per accedere a Drive dell'utente ogni volta che l'utente tocca un pulsante "Salva su Drive".

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

Per l'autenticazione, ti consigliamo di utilizzare l'API Credential Manager. Per autorizzare azioni che richiedono l'accesso ai dati utente archiviati da Google, ti consigliamo di utilizzare AuthorizationClient.

Configura il progetto

  1. Apri il progetto in o creane uno se non ne hai già uno.
  2. Nella sezione , assicurati che tutte le informazioni siano complete e accurate.
    1. Assicurati che alla tua app siano assegnati un nome, un logo e una home page corretti. Questi valori verranno presentati agli utenti nella schermata del consenso di Accedi con Google durante la registrazione e nella schermata App e servizi di terze parti.
    2. Assicurati di aver specificato gli URL delle norme sulla privacy e dei termini di servizio della tua app.
  3. In , crea un ID client Android per la tua app se non ne hai già uno. Dovrai specificare il nome del pacchetto e la firma SHA-1 della tua app.
    1. Vai al .
    2. Fai clic su Crea cliente.
    3. Seleziona il tipo di applicazione Android.
  4. In , crea un nuovo ID client "Applicazione web" se non l'hai ancora fatto. Per il momento puoi ignorare i campi "Origini JavaScript autorizzate" e "URI di reindirizzamento autorizzati". Questo ID client verrà utilizzato per identificare il server di backend quando comunica con i servizi di autenticazione di Google.
    1. Vai al .
    2. Fai clic su Crea cliente.
    3. Seleziona il tipo Applicazione web.

Dichiarare le dipendenze

Nel file build.gradle del modulo, dichiara le dipendenze utilizzando l'ultima versione della libreria Google Identity Services.

dependencies {
  // ... other dependencies

  implementation "com.google.android.gms:play-services-auth:<latest version>"
}

Richiedere le 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, 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 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 (requestCode == MainActivity.REQUEST_AUTHORIZE) {
    AuthorizationResult authorizationResult = Identity.getAuthorizationClient(this).getAuthorizationResultFromIntent(data);
    saveToDriveAppFolder(authorizationResult);
  }
}

Se accedi alle API di Google lato server, puoi chiamare il metodo getServerAuthCode() di AuthorizationResult per ottenere un codice di autenticazione che invii al backend per lo scambio con un token di accesso e di aggiornamento.