Autorizar o acesso aos dados do usuário no Android

A autenticação estabelece quem é alguém e é geralmente chamada de usuário inscrição ou login. Autorização é o processo de conceder ou rejeitar o acesso a dados ou recursos. Por exemplo, o app solicita o consentimento do usuário para: acessar o Google Drive do usuário.

Chamadas de autenticação e autorização devem ser duas chamadas separadas e distintas com base nas necessidades do site ou aplicativo.

Se seu aplicativo tem recursos que podem usar dados da API do Google, mas não são necessários como parte dos recursos principais do seu app, ele deve ser projetado para processar adequadamente os casos em que os dados da API não estiverem acessíveis. Por exemplo: Você pode ocultar uma lista de arquivos salvos recentemente quando o usuário não concedeu acesso ao Drive acesso.

Solicite acesso aos escopos necessários para acessar apenas as APIs do Google. quando o usuário realiza uma ação que requer acesso a uma API específica. Para exemplo, solicite a permissão para acessar o Drive do usuário sempre que o o usuário toca em "Salvar no Google Drive" .

Ao separar a autorização da autenticação, você evita sobrecarregar novos ou confundir os usuários com relação ao motivo da solicitação de determinadas permissões.

Nos Serviços de Identificação do Google, a autenticação é feita usando o SignInClient. Para autorizar ações que precisam de acesso aos dados do usuário armazenados pelo Google, nós recomendamos o uso do AuthorizationClient.

Solicitar permissões exigidas pelas ações do usuário

Sempre que um usuário realizar uma ação que requer escopo adicional, chame AuthorizationClient.authorize():

Por exemplo, se um usuário realizar uma ação que exige acesso ao Drive. armazenamento do app, faça o seguinte:

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

No callback onActivityResult da sua atividade, é possível verificar se a solicitação as permissões foram adquiridas e, em caso afirmativo, realizar a ação do usuário.

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