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
- Abra o projeto no ou crie um projeto se ainda não tiver um.
- Na ,
verifique se todas as informações estão completas e precisas.
- 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.
- Verifique se você especificou os URLs da Política de Privacidade e dos Termos de Serviço do seu app.
- 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.
- 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.
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.