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