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 recusar o acesso a dados ou recursos. Por exemplo, o app solicita 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 Google, mas não necessários como parte dos recursos principais, projete-o para poder processar casos em que os dados da API não estão acessíveis. Por exemplo, é possível 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, você precisa solicitar permissão para acessar o Drive do usuário sempre que ele tocar no botão "Salvar no Drive".

Separando a autorização da autenticação, você evita sobrecarregar novos usuários ou confundir os usuários sobre por que eles estão sendo solicitados para 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 o uso do AuthorizationClient.

Configurar o projeto

  1. Abra o projeto no ou crie um projeto se ainda não tiver um.
  2. Na , verifique se todas as informações estão completas e precisas.
    1. Confira se o app tem um nome, um logotipo e uma página inicial corretamente atribuídos. Esses valores serão apresentados aos usuários na tela de consentimento do recurso "Fazer login com o Google" na inscrição e na tela 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 seu app.
  3. No , crie um ID de cliente do Android para o app, se ainda não tiver um. Você precisa especificar o nome do pacote e a assinatura SHA-1 do app.
    1. Acesse .
    2. Clique em Criar cliente.
    3. Selecione o tipo de aplicativo Android.
  4. No , crie um novo 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 .
    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 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 atividade, é possível verificar se as permissões necessárias 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);
  }
}

Se você estiver acessando as APIs do Google no lado do servidor, chame o método getServerAuthCode() do 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.