Después de que los usuarios accedan, creen cuentas o cambien las contraseñas correctamente, permite que almacenen sus credenciales para automatizar futuras autenticaciones en tu app
Antes de comenzar
Configura un proyecto de Android Studio.
Almacenar credenciales
Crea un objeto Credential
que contenga la información de acceso de un usuario. Para
por ejemplo, para permitir que los usuarios almacenen sus credenciales después de acceder con
sus contraseñas:
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();
O, por ejemplo, después de que los usuarios acceder con su Cuenta de Google:
GoogleSignInAccount gsa = signInTask.getResult();
Credential credential = new Credential.Builder(gsa.getEmail())
.setAccountType(IdentityProviders.GOOGLE)
.setName(gsa.getDisplayName())
.setProfilePictureUri(gsa.getPhotoUrl())
.build();
Luego, llama a CredentialsClient.save()
para guardar las contraseñas
credenciales. Si la llamada a CredentialsClient.save()
no se envía de inmediato
correctamente, las credenciales pueden ser nuevas, en cuyo caso el usuario debe confirmar
la solicitud de guardado. Resuelve el ResolvableApiException
con
startResolutionForResult()
para solicitar la confirmación del usuario.
Si el usuario elige no guardar las credenciales, no se le volverá a solicitar que
guardar las credenciales de cualquier cuenta para la app. Si llamas
CredentialsClient.save()
después de que un usuario inhabilitó la función, su resultado tendrá un
código de estado de CANCELED
. El usuario puede aceptar la invitación más tarde desde la consola
App de Configuración, en la sección Smart Lock para contraseñas. El usuario debe habilitar
el guardado de credenciales de todas las cuentas, el cual se te solicitará que las guardes la 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");
}
}
// ...
}
Después de almacenar las credenciales, recupéralas llamando
CredentialsClient.request()
Orientación a Android O y versiones posteriores
Cuando guardas credenciales de contraseñas usando Smart Lock en dispositivos con Android O o una versión posterior, Smart Lock usa por su cuenta el diálogo de confirmación nativo de Autocompletar cuando sea posible. (Ten en cuenta que las credenciales guardadas con Autocompletar con Google se comparten bidireccionalmente con Smart Lock para contraseñas).