Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
A fin de integrar Smart Lock para contraseñas en tu app para Android, debes agregar llamadas a la API de credenciales al flujo de inicio y acceso de tu app. En el siguiente diagrama, se muestra el flujo de una app para Android típica que usa Smart Lock para contraseñas.
Si bien existen muchas formas de integrar Smart Lock para contraseñas con éxito y los detalles de una integración dependen de la estructura y la experiencia del usuario de la app, se recomienda el siguiente flujo para la mayoría de las apps. Las apps que usan este flujo tienen las siguientes ventajas en la experiencia del usuario:
Los usuarios existentes de tu servicio que tengan una sola credencial guardada accederán de inmediato y irán directamente a la vista de acceso cuando abran la app.
Los usuarios que tienen varias credenciales guardadas o que inhabilitaron el acceso automático deben responder a un solo diálogo antes de ir a la vista de acceso de la app.
Los usuarios que no tienen credenciales guardadas o que aún no se registraron pueden elegir su nombre y correo electrónico con solo presionar una vez. Luego, se los enviará de manera inteligente a la vista de acceso o de registro, con esta información completada previamente.
Cuando los usuarios salen de la app, la app se asegura de que no vuelvan a acceder automáticamente.
Recupera credenciales
Cuando se inicie la app, si aún no accedió ningún usuario, llama a CredentialsClient.request().
Si Task funciona correctamente, obtén las credenciales del usuario con getResult().getCredential() y úsalas para acceder.
Si Task falla y la excepción es una instancia de ResolvableApiException, y getStatusCode() muestra RESOLUTION_REQUIRED, se requiere la entrada del usuario para elegir una credencial. Llama a startResolutionForResult() para solicitarle al usuario que seleccione una cuenta guardada y, luego, llama a getParcelableExtra(Credential.EXTRA_KEY) para obtener las credenciales del usuario y usarlas para acceder.
Guardar credenciales
Si Task falla con una ApiException, y getStatusCode() muestra SIGN_IN_REQUIRED, el usuario no tiene credenciales guardadas y debe acceder o registrarse de forma manual mediante tu flujo de acceso o registro actual. Una vez que el usuario completa el acceso con éxito, puedes darle la oportunidad de guardar sus credenciales para su futura recuperación (paso 5).
Puedes ayudar al usuario a acceder o registrarse de forma más rápida y fácil si recuperas sugerencias de acceso, como la dirección de correo electrónico del usuario. El usuario puede seleccionar la sugerencia y omitir el paso de escribir sus credenciales. Si tu app requiere que los usuarios accedan, puedes optar por recuperar las sugerencias de inmediato después de que falle la solicitud de credenciales inicial (de lo contrario, puedes esperar hasta que el usuario inicie el flujo de acceso o registro).
Llama a CredentialsClient.getHintPickerIntent() y, luego, inicia el intent para solicitarle al usuario que seleccione una cuenta. Luego, llama a getParcelableExtra(Credential.EXTRA_KEY) para obtener la sugerencia de acceso.
Si el ID de usuario de la sugerencia coincide con un usuario existente, completa previamente el formulario de acceso y permite que el usuario ingrese la contraseña para acceder.
Si el ID de usuario de la sugerencia no coincide con un usuario existente, completa previamente el formulario de registro con el ID y el nombre del usuario y permite que el usuario cree una cuenta nueva.
Después de que el usuario acceda o cree una cuenta correctamente, guarda su ID y contraseña con CredentialsClient.save().
Si el usuario accedió con un proveedor de identidad federada, como el Acceso con Google, crea el objeto Credential con la dirección de correo electrónico del usuario como ID y especifica el proveedor de identidad con setAccountType.
Salir
Cuando el usuario salga de su cuenta, llama a CredentialsClient.disableAutoSignIn() para evitar que vuelva a acceder de inmediato. Inhabilitar
el acceso automático también permite que los usuarios cambien fácilmente entre cuentas (por
ejemplo, entre cuentas de trabajo y personales, o entre cuentas en dispositivos
compartidos) sin tener que volver a ingresar su información de acceso.
¿Todo listo para integrar Smart Lock para contraseñas en tu app?
Comienza.
[null,null,["Última actualización: 2025-07-25 (UTC)"],[[["\u003cp\u003eSmart Lock for Passwords is deprecated; migrate to Credential Manager for enhanced security and user experience with passkeys, passwords, and federated identities.\u003c/p\u003e\n"],["\u003cp\u003eSmart Lock for Passwords integration involves adding the Credentials API to your app's startup and sign-in flow to retrieve and save user credentials.\u003c/p\u003e\n"],["\u003cp\u003eExisting users with saved credentials can experience automatic sign-in, while new users can benefit from pre-filled forms using sign-in hints.\u003c/p\u003e\n"],["\u003cp\u003eEnsure to disable auto-sign-in upon user sign-out to prevent immediate re-authentication and facilitate account switching.\u003c/p\u003e\n"]]],[],null,["# Android integration flow\n\n| **Deprecated:** Smart Lock for Passwords is deprecated. To ensure the continued security and usability of your app, [migrate to\n| Credential Manager](https://developer.android.com/training/sign-in/passkeys/) today. Credential Manager supports passkey, password, and federated identity authentication (such as Sign-in with Google), stronger security, and a more consistent user experience.\n\nTo integrate Smart Lock for Passwords into your Android app, you must add calls\nto the [Credentials API](/android/reference/com/google/android/gms/auth/api/credentials/package-summary)\nto your app's start-up and sign-in flow. The following diagram shows the flow of\na typical Android app that uses Smart Lock for Passwords.\n\nWhile there are many ways to successfully integrate Smart Lock for Passwords,\nand the specifics of an integration depend on the structure and user experience\nof the app, the following flow is recommended for most apps. Apps that use this\nflow have these user experience advantages:\n\n- Existing users of your service that have a single credential saved are immediately signed in, and they will go directly to the signed-in view when they open the app.\n- Users that have multiple credentials saved or that have disabled automatic sign-in need to respond to only one dialog before they go to the app's signed-in view.\n- Users that have no saved credentials or haven't signed up yet can pick their name and email with a single tap and be intelligently sent to either the sign-in or sign-up view, with this information pre-filled.\n- When users sign out, the app ensures they are not automatically signed back in.\n\n[](/static/identity/smartlock-passwords/android/images/smartlock-passwords-flow.png)\n\n### Retrieve credentials\n\n1. When the app starts, if no user is already signed in, call `CredentialsClient.request()`.\n2. If the `Task` is successful, get the user's credentials with `getResult().getCredential()` and use them to sign in.\n3. If the `Task` fails and the exception is an instance of `ResolvableApiException` and `getStatusCode()` returns `RESOLUTION_REQUIRED`, user input is required to pick a credential. Call `startResolutionForResult()` to prompt the user to select a saved account, then call `getParcelableExtra(Credential.EXTRA_KEY)` to get the user's credentials and use them to sign in. If signing in with the retrieved credentials fails because the password is incorrect or the account doesn't exist, delete the credentials from Smart Lock with `CredentialsClient.delete()`.\n\n### Save credentials\n\n4. If the `Task` fails with an `ApiException` and\n `getStatusCode()` returns `SIGN_IN_REQUIRED`, the\n user has no saved credentials and must sign in or sign up manually using\n your current sign-in or sign-up flow. After the user successfully\n completes sign in, you can provide an opportunity for the user to save\n their credentials for future retrieval (step 5).\n\n You can help the user sign in or sign up faster and more\n easily by retrieving sign-in hints, such as the user's email address. The\n user can select the hint and skip typing their credentials. If your app\n requires users to sign in, you might choose to retrieve hints immediately\n after the initial credentials request fails (otherwise, you can wait until\n the user starts the sign-in or sign-up flow).\n 1. Call `CredentialsClient.getHintPickerIntent()` and start the intent to prompt the user to select an account, then call `getParcelableExtra(Credential.EXTRA_KEY)` to get the sign-in hint.\n 2. If the user ID of the hint matches an existing user, pre-fill the sign-in form with it and let the user enter the password to sign in.\n 3. If the user ID of the hint doesn't match an existing user, pre-fill the sign-up form with the user's ID and name, and let the user create a new account.\n5. After the user successfully signs in or creates an account, save the user\n ID and password with `CredentialsClient.save()`.\n\n If the user signed in with a federated identity provider such as Google\n Sign-In, create the `Credential` object with the user's email\n address as the ID and specify the identity provider with\n `setAccountType`.\n\n### Sign out\n\n6. When the user signs out, call `CredentialsClient.disableAutoSignIn()` to prevent the user from being immediately signed back in. Disabling auto-sign-in also enables users to switch between accounts easily---for example, between work and personal accounts, or between accounts on shared devices---without having to re-enter their sign-in information.\n\nReady to integrate Smart Lock for Passwords into your app?\n[Get started](/identity/smartlock-passwords/android/get-started)."]]