Autorizar o acesso aos dados do usuário do Google

A autenticação estabelece quem é alguém e é comumente chamada de inscrição ou login do usuário. A autorização é o processo de conceder ou negar acesso a dados ou recursos. Por exemplo, seu app pede o consentimento do usuário para acessar o Google Drive dele.

As chamadas de autenticação e autorização precisam ser dois fluxos separados e distintos com base nas necessidades do app.

Se o app tiver recursos que podem usar dados da API do Google, mas não forem obrigatórios como parte dos recursos principais do app, crie o app para processar normalmente casos em que os dados da API não estão acessíveis. Por exemplo, você pode ocultar uma lista de arquivos salvos recentemente quando o usuário não concedeu acesso ao Drive.

Solicite acesso aos escopos necessários para acessar as APIs do Google somente quando o usuário realizar uma ação que exija acesso a uma API específica. Por exemplo, solicite permissão para acessar o Drive do usuário sempre que ele tocar em um botão "Salvar no Drive".

Ao separar a autorização da autenticação, você evita sobrecarregar novos usuários ou confundir os usuários sobre o motivo de estarem sendo solicitadas determinadas permissões.

Para autenticação, recomendamos usar a API Credential Manager. Para autorizar ações que precisam de acesso aos dados do usuário armazenados pelo Google, recomendamos usar o AuthorizationClient.

Crie o projeto

  1. Abra seu projeto no ou crie um se ainda não tiver.
  2. Na , confira se todas as informações estão completas e corretas.
    1. Confira se o app tem um nome, um logotipo e uma página inicial corretos. Esses valores serão apresentados aos usuários na tela de consentimento do recurso "Fazer login com o Google" ao se inscreverem e na tela de apps e serviços de terceiros.
    2. Verifique se você especificou os URLs da Política de Privacidade e dos Termos de Serviço do app.
  3. No , crie um ID de cliente do Android para seu app se você ainda não tiver um. Você precisará especificar o nome do pacote e a assinatura SHA-1 do app.
    1. Acesse a .
    2. Clique em Criar cliente.
    3. Selecione o tipo de aplicativo Android.
  4. No , crie um ID do cliente "Aplicativo da Web" se ainda não tiver feito isso. Por enquanto, ignore os campos "Origens JavaScript autorizadas" e "URIs de redirecionamento autorizados". Esse ID do cliente será usado para identificar seu servidor de back-end quando ele se comunicar com os serviços de autenticação do Google.
    1. Acesse a .
    2. Clique em Criar cliente.
    3. Selecione o tipo Aplicativo da Web.

Declarar dependências

No arquivo build.gradle do módulo, declare dependências usando a versão mais recente da biblioteca do Google Identity Services.

dependencies {
  // ... other dependencies

  implementation "com.google.android.gms:play-services-auth:<latest version>"
}

Solicitar permissões necessárias para ações do usuário

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

Por exemplo, se um usuário realizar uma ação que exija acesso ao armazenamento do app Drive, 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, você pode verificar se as permissões necessárias foram adquiridas com sucesso 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);
  }
}

Se você estiver acessando as APIs do Google no lado do servidor, chame o método getServerAuthCode() de AuthorizationResult para receber um código de autenticação que você envia ao back-end para trocar por um token de acesso e de atualização.