L'authentification permet d'identifier une personne et est communément appelée "inscription" ou "connexion". L'autorisation consiste à accorder ou à refuser l'accès à des données ou à des ressources. Par exemple, votre application demande à l'utilisateur son autorisation pour accéder à son compte Google Drive.
Les appels d'authentification et d'autorisation doivent être deux flux distincts en fonction des besoins de l'application.
Si votre application comporte des fonctionnalités qui peuvent utiliser les données de l'API Google, mais qui ne sont pas obligatoires dans les fonctionnalités de base de votre application, vous devez la concevoir pour qu'elle puisse gérer correctement les cas où les données de l'API ne sont pas accessibles. Par exemple, vous pouvez masquer une liste de fichiers enregistrés récemment lorsque l'utilisateur n'a pas accordé l'accès à Drive.
Vous ne devez demander l'accès aux champs d'application dont vous avez besoin pour accéder aux API Google que lorsque l'utilisateur effectue une action nécessitant l'accès à une API particulière. Par exemple, vous devez demander l'autorisation d'accéder à Drive de l'utilisateur chaque fois que celui-ci appuie sur un bouton "Enregistrer dans Drive".
En séparant l'autorisation de l'authentification, vous pouvez éviter d'accabler les nouveaux utilisateurs ou de les dérouter quant à la raison pour laquelle certaines autorisations leur sont demandées.
Pour l'authentification, nous vous recommandons d'utiliser l'API Gestionnaire d'identifiants. Pour autoriser des actions qui nécessitent l'accès aux données utilisateur stockées par Google, nous vous recommandons d'utiliser AuthorizationClient.
Demander les autorisations requises par les actions de l'utilisateur
Chaque fois qu'un utilisateur effectue une action nécessitant une portée supplémentaire, appelez AuthorizationClient.authorize()
.
Par exemple, si un utilisateur effectue une action qui nécessite l'accès à l'espace de stockage de son application Drive, procédez comme suit:
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));
Dans le rappel onActivityResult
de votre activité, vous pouvez vérifier si les autorisations requises ont été acquises et, le cas échéant, effectuer l'action de l'utilisateur.
@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);
}
}