Autoriza el acceso a los datos del usuario de Google

La autenticación establece quién es una persona y, por lo general, se conoce como registro o acceso del usuario. La autorización es el proceso de otorgar o rechazar el acceso a los datos o recursos. Por ejemplo, tu app solicita el consentimiento del usuario para acceder a su Google Drive.

Las llamadas de autenticación y autorización deben ser dos flujos separados y distintos según las necesidades de la app.

Si tu app tiene funciones que pueden usar datos de la API de Google, pero no son obligatorias como parte de sus funciones principales, debes diseñarla para que pueda controlar de forma fluida los casos en los que no se puede acceder a los datos de la API. Por ejemplo, puedes ocultar una lista de archivos guardados recientemente cuando el usuario no haya otorgado acceso a Drive.

Debes solicitar acceso a los permisos que necesitas para acceder a las APIs de Google solo cuando el usuario realice una acción que requiera acceso a una API en particular. Por ejemplo, debes solicitar permiso para acceder a Drive del usuario cada vez que este presiona el botón “Guardar en Drive”.

Si separas la autorización de la autenticación, puedes evitar abrumar a los usuarios nuevos o confundirlos sobre por qué se les solicita ciertos permisos.

Para la autenticación, te recomendamos que uses la API de Credential Manager. Para autorizar acciones que necesiten acceso a los datos del usuario almacenados por Google, te recomendamos que uses AuthorizationClient.

Solicita los permisos que requieren las acciones del usuario

Cada vez que un usuario realiza una acción que requiere un permiso adicional, llama a AuthorizationClient.authorize().

Por ejemplo, si un usuario realiza una acción que requiere acceso al almacenamiento de su app de Drive, haz lo siguiente:

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));

En la devolución de llamada onActivityResult de tu actividad, puedes verificar si los permisos requeridos se adquirieron correctamente y, de ser así, realizar la acción del usuario.

@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);
  }
}