Autoriser l'accès aux données utilisateur sur Android

L'authentification établit qui est une personne et est communément appelée utilisateur pour s'inscrire ou se connecter. L'autorisation est le processus qui consiste à accorder ou à refuser l'accès aux données ou aux ressources. Par exemple, votre application demande le consentement de l'utilisateur pour accéder au Google Drive de l'utilisateur.

Les appels d'authentification et d'autorisation doivent être distincts en fonction des besoins du site ou de l'application.

Si votre application dispose de fonctionnalités qui peuvent utiliser les données de l'API Google, mais qui ne sont pas requises par les fonctionnalités de base de votre application, vous devez la concevoir être capable de gérer efficacement les cas où les données de l'API ne sont pas accessibles. Par exemple : vous pouvez masquer la liste des fichiers récemment enregistrés lorsque l'utilisateur n'a pas accordé à Drive y accéder.

Demandez l'accès aux niveaux d'accès dont vous avez besoin uniquement pour accéder aux API Google Lorsque l'utilisateur effectue une action qui nécessite d'accéder à une API spécifique. Pour Par exemple, vous devez demander l'autorisation d'accéder au Drive de l'utilisateur l'utilisateur appuie sur "Enregistrer dans Drive" .

En séparant l'autorisation de l'authentification, vous pouvez éviter de submerger utilisateurs, ou qui ne savent pas pourquoi on leur demande certaines autorisations.

Dans les services d'identité Google, l'authentification s'effectue à l'aide du SignInClient. Pour autoriser les actions nécessitant un accès aux données utilisateur stockées par Google, nous nous vous recommandons d'utiliser AuthorizationClient.

Demander les autorisations requises par les actions des utilisateurs

Chaque fois qu'un utilisateur effectue une action qui nécessite une portée supplémentaire, appelez AuthorizationClient.authorize()

Par exemple, si un utilisateur effectue une action qui nécessite d'accéder à son Drive l'espace de stockage de l'application, 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 ont été acquises et, le cas échéant, effectuez l'action 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);
  }
}