Autoriser l'accès aux données utilisateur Google

L'authentification permet d'établir l'identité d'une personne. Elle est généralement appelée "inscription" ou "connexion" d'un utilisateur. L'autorisation est le processus qui consiste à accorder ou refuser l'accès à des données ou des ressources. Par exemple, votre application demande à l'utilisateur d'autoriser l'accès à 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 requises dans les fonctionnalités principales de votre application, vous devez concevoir votre application 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 récemment enregistrés lorsque l'utilisateur n'a pas accordé l'accès à Drive.

Vous ne devez demander l'accès aux niveaux d'accès dont vous avez besoin pour accéder aux API Google que lorsque l'utilisateur effectue une action nécessitant l'accès à une API spécifique. 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 de submerger les nouveaux utilisateurs ou de les dérouter en leur demandant certaines autorisations.

Pour l'authentification, nous vous recommandons d'utiliser l'API Credential Manager. Pour autoriser les actions qui nécessitent d'accéder aux données utilisateur stockées par Google, nous vous recommandons d'utiliser AuthorizationClient.

Configurer votre projet

  1. Ouvrez votre projet dans ou créez-en un si vous n'en avez pas encore.
  2. Sur la page , assurez-vous que toutes les informations sont complètes et exactes.
    1. 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 d'autorisation Se connecter avec Google lors de l'inscription et sur l'écran Applications et services tiers.
    2. Assurez-vous d'avoir spécifié les URL des règles de confidentialité et des conditions d'utilisation de votre application.
  3. 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.
    1. Accédez à .
    2. Cliquez sur Créer un client.
    3. Sélectionnez le type d'application Android.
  4. Dans , créez un ID client "Application Web" si vous ne l'avez 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 de backend lorsqu'il communiquera avec les services d'authentification de Google.
    1. Accédez à .
    2. Cliquez sur Créer un client.
    3. Sélectionnez le type Application Web.

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 un champ d'application supplémentaire, appelez AuthorizationClient.authorize().

Par exemple, si un utilisateur effectue une action qui nécessite d'accéder au 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é obtenues 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.