Proporciona sugerencias de acceso a un usuario

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Las solicitudes para recuperar credenciales de usuario pueden fallar cuando un usuario aún no guardó credenciales o cuando no se registró en tu app. En estos casos, usa la API de credenciales para recuperar sugerencias de acceso, como el nombre y la dirección de correo electrónico del usuario. Usa estas sugerencias para completar previamente los formularios de acceso y registro de tu app, lo que acelera el proceso de integración.

En Android 6.0 (Marshmallow) y versiones posteriores, tu app no necesita solicitar permisos de tiempo de ejecución ni del dispositivo para recuperar sugerencias de acceso con la API de credenciales.

Antes de comenzar

Configura un proyecto de Android Studio.

Recuperar sugerencias de acceso

Para recuperar las sugerencias de acceso, primero configura el diálogo del selector de sugerencias mediante la creación de un objeto HintRequest. Luego, pasa el objeto HintRequest a CredentialsClient.getHintPickerIntent() a fin de obtener un intent para solicitar al usuario que elija una dirección de correo electrónico. Por último, inicia el intent con startIntentSenderForResult().

HintRequest hintRequest = new HintRequest.Builder()
        .setHintPickerConfig(new CredentialPickerConfig.Builder()
                .setShowCancelButton(true)
                .build())
        .setEmailAddressIdentifierSupported(true)
        .setAccountTypes(IdentityProviders.GOOGLE)
        .build();

PendingIntent intent = mCredentialsClient.getHintPickerIntent(hintRequest);
try {
    startIntentSenderForResult(intent.getIntentSender(), RC_HINT, null, 0, 0, 0);
} catch (IntentSender.SendIntentException e) {
    Log.e(TAG, "Could not start hint picker Intent", e);
}

Selector de sugerencias de acceso de Smart Lock

Se le solicita al usuario que elija una dirección de correo electrónico para usar.

Luego, en el método onActivityResult() de la actividad, recupera las sugerencias de la parcela Credential.EXTRA_KEY, verifica si el usuario está en tu base de datos de usuarios y comienza la actividad adecuada con la sugerencia de credenciales.

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RC_HINT) {
        if (resultCode == RESULT_OK) {
            Credential credential = data.getParcelableExtra(Credential.EXTRA_KEY);
            Intent intent;
            // Check for the user ID in your user database.
            if (userDatabaseContains(credential.getId())) {
                intent = new Intent(this, SignInActivity.class);
            } else {
                intent = new Intent(this, SignUpNewUserActivity.class);
            }
            intent.putExtra("com.mycompany.myapp.SIGNIN_HINTS", credential);
            startActivity(intent);
        } else {
            Log.e(TAG, "Hint Read: NOT OK");
            Toast.makeText(this, "Hint Read Failed", Toast.LENGTH_SHORT).show();
        }
    }

    ...

}

Completar previamente el formulario de acceso

Si el usuario está en tu base de datos de usuarios y usted inició la actividad de acceso de tu app, puedes verificar (opcionalmente) si el objeto Credential contiene un token de ID. Si es así, puedes acceder al usuario con el token de ID sin necesidad de que escriba una contraseña.

Si el objeto Credential no contiene un token de ID (o si no quieres usar el token de ID), completa previamente los campos de acceso con las sugerencias que agregaste al intent.

public class SignInActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = getIntent();
        Credential credential = intent.getParcelableExtra("com.mycompany.myapp.SIGNIN_HINTS");

        // Pre-fill ID field
        mUsernameView.setText(credential.getId());

        ...
    }

    ...
}

Completar previamente el formulario de registro

Si el usuario no está en tu base de datos de usuarios y usted inició la actividad de registro de tu app, completa previamente los campos de registro con las sugerencias de acceso que agregaste al intent.

public class SignUpNewUserActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = getIntent();
        Credential credential = intent.getParcelableExtra("com.mycompany.myapp.SIGNIN_HINTS");

        // Pre-fill sign-up fields
        mUsernameView.setText(credential.getId());
        mDisplaynameView.setText(credential.getName()); // Might be null.

        ...
    }

    ...
}

De manera opcional, también puedes verificar si el objeto Credential contiene un token de ID que tiene una dirección de correo electrónico verificada. Si es así, puedes omitir el paso de verificación de correo electrónico de tu aplicación, ya que Google ya verificó la dirección.