Após os usuários fazerem login, criarem contas ou alterarem senhas, permita que armazenem as credenciais para automatizar a autenticação futura no aplicativo.
Antes de começar
Configure um projeto do Android Studio.
Armazenar credenciais
Crie um objeto Credential
que contenha as informações de login de um usuário. Para
exemplo, para permitir que os usuários armazenem suas credenciais depois de fazer login com sucesso com
as senhas deles:
Credential credential = new Credential.Builder(email)
.setPassword(password) // Important: only store passwords in this field.
// Android autofill uses this value to complete
// sign-in forms, so repurposing this field will
// likely cause errors.
.build();
Ou, por exemplo, depois que os usuários fazer login com a Conta do Google:
GoogleSignInAccount gsa = signInTask.getResult();
Credential credential = new Credential.Builder(gsa.getEmail())
.setAccountType(IdentityProviders.GOOGLE)
.setName(gsa.getDisplayName())
.setProfilePictureUri(gsa.getPhotoUrl())
.build();
Em seguida, chame CredentialsClient.save()
para salvar
credenciais. Se a chamada para CredentialsClient.save()
não for feita imediatamente
bem-sucedido, as credenciais podem ser novas. Nesse caso, o usuário deve confirmar
a solicitação de salvamento. Resolver a ResolvableApiException
com
startResolutionForResult()
para pedir a confirmação do usuário.
Se o usuário optar por não salvar as credenciais, ele não receberá outra solicitação para
salvar as credenciais
da conta para o app. Se você ligar
CredentialsClient.save()
após a desativação, o resultado terá uma
Código de status de CANCELED
. O usuário pode aceitar mais tarde no Google
App Configurações, na seção Smart Lock para senhas. O usuário precisa ativar
o salvamento de credenciais para todas as contas será solicitado a salvar as credenciais na próxima vez.
mCredentialsClient.save(credential).addOnCompleteListener(
new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "SAVE: OK");
Toast.makeText(activity, "Credentials saved", Toast.LENGTH_SHORT).show();
return;
}
Exception e = task.getException();
if (e instanceof ResolvableApiException) {
// Try to resolve the save request. This will prompt the user if
// the credential is new.
ResolvableApiException rae = (ResolvableApiException) e;
try {
rae.startResolutionForResult(this, RC_SAVE);
} catch (IntentSender.SendIntentException exception) {
// Could not resolve the request
Log.e(TAG, "Failed to send resolution.", exception);
Toast.makeText(activity, "Save failed", Toast.LENGTH_SHORT).show();
}
} else {
// Request has no resolution
Toast.makeText(activity, "Save failed", Toast.LENGTH_SHORT).show();
}
}
});</pre>
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// ...
if (requestCode == RC_SAVE) {
if (resultCode == RESULT_OK) {
Log.d(TAG, "SAVE: OK");
Toast.makeText(this, "Credentials saved", Toast.LENGTH_SHORT).show();
} else {
Log.e(TAG, "SAVE: Canceled by user");
}
}
// ...
}
Depois de armazenar as credenciais, recupere-as chamando
CredentialsClient.request()
Direcionado para o Android O e mais recentes
Quando você salva credenciais de senha usando o Smart Lock em dispositivos com o Android O ou mais recente, o Smart Lock usa a caixa de diálogo de confirmação do preenchimento automático nativa em vez da própria sempre que possível. (Observe que as credenciais salvas usando o Preenchimento automático com o Google é compartilhado bidirecionalmente com o Smart Lock para senhas.