Depois que os usuários fizerem login, criarem contas ou mudarem senhas, permita que eles armazenem as credenciais para automatizar futuras autenticaçãos no app.
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. Por
exemplo, para permitir que os usuários armazenem as credenciais depois de fazer login
com as senhas:
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 fizerem 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 as credenciais
dos usuários. Se a chamada para CredentialsClient.save()
não for bem-sucedida
imediatamente, as credenciais poderão ser novas. Nesse caso, o usuário precisará confirmar
a solicitação de salvamento. Resolva o ResolvableApiException
com
startResolutionForResult()
para solicitar a confirmação do usuário.
Se o usuário optar por não salvar as credenciais, ele não receberá uma solicitação novamente para salvar as credenciais de qualquer conta no app. Se você chamar CredentialsClient.save()
depois que um usuário tiver desativado essa opção, o resultado terá um código de status de CANCELED
. O usuário pode ativar essa opção mais tarde no app Configurações do Google, na seção Smart Lock para senhas. O usuário precisa ativar o salvamento de credenciais em todas as contas para receber uma solicitação para salvar 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()
.
Destinado ao Android O e superior
Quando você salva credenciais de senha usando o Smart Lock em dispositivos com Android O ou mais recente, o Smart Lock usa a caixa de diálogo de confirmação do preenchimento automático nativa na própria caixa de diálogo sempre que possível. As credenciais salvas usando o Preenchimento automático do Google são compartilhadas bidirecionalmente com o Smart Lock para senhas.