L'autenticazione stabilisce chi è una persona ed è comunemente indicata 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 a Google Drive.
Le chiamate di autenticazione e autorizzazione devono essere due flussi distinti e separati in base alle esigenze dell'app.
Se la tua app include funzionalità che possono utilizzare i dati dell'API Google, ma non sono obbligatorie come parte delle funzionalità di base dell'app, devi progettarla in modo che possa gestire in modo corretto 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 l'accesso agli ambiti di cui hai bisogno 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 in Drive".
Separando l'autorizzazione dall'autenticazione, puoi evitare di sopraffare i nuovi utenti o di confonderli sul motivo per cui gli 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, consigliamo di utilizzare AuthorizationClient.
Configura il tuo progetto
- Apri il progetto in o crea un progetto se non ne hai ancora uno.
- Su ,
assicurati che tutte le informazioni siano complete e accurate.
- Assicurati che all'app siano assegnati un nome, un logo e una home page corretti. Questi valori verranno mostrati agli utenti nella schermata del consenso di Accedi con Google al momento della registrazione e nella schermata App e servizi di terze parti.
- Assicurati di aver specificato gli URL delle norme sulla privacy e dei Termini di servizio della tua app.
- 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.
- 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.
Dichiarazione di dipendenze
Nel file build.gradle del modulo, dichiara le dipendenze utilizzando la versione più recente della libreria Google Identity Services.
dependencies {
// ... other dependencies
implementation "com.google.android.gms:play-services-auth:<latest version>"
}
Richiedi 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 da inviare al tuo backend per scambiarlo con un token di accesso e di aggiornamento.