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 qu'il 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.
Configurer votre projet
- Ouvrez votre projet dans ou créez-en un si vous n'en avez pas encore.
- Sur la page , assurez-vous que toutes les informations sont complètes et exactes.
- Assurez-vous que le nom, le logo et la page d'accueil de votre application sont corrects. Ces valeurs seront présentées aux utilisateurs sur l'écran de consentement Se connecter avec Google lors de l'inscription et sur l'écran Applications et services tiers.
- Assurez-vous d'avoir spécifié les URL des règles de confidentialité et des conditions d'utilisation de votre application.
- Dans , créez un ID client Android pour votre application si vous n'en avez pas déjà un. Vous devrez spécifier le nom du package et la signature SHA-1 de votre application.
- Dans , créez un ID client "Application Web" si ce n'est pas déjà fait. Vous pouvez ignorer les champs "Origines JavaScript autorisées" et "URI de redirection autorisés" pour le moment. Cet ID client servira à identifier votre serveur backend lorsqu'il communiquera avec les services d'authentification de Google.
Déclarer des dépendances
Dans le fichier build.gradle de votre module, déclarez les dépendances à l'aide de la dernière version de la bibliothèque Google Identity Services.
dependencies {
// ... other dependencies
implementation "com.google.android.gms:play-services-auth:<latest version>"
}
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);
}
}
Si vous accédez aux API Google côté serveur, vous pouvez appeler la méthode getServerAuthCode() d'AuthorizationResult pour obtenir un code d'autorisation que vous envoyez à votre backend pour l'échanger contre un jeton d'accès et d'actualisation.