Proporciona sugerencias de acceso a un usuario

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

En Android 6.0 (Marshmallow) y versiones posteriores, la app no necesita solicitar cualquier permiso de dispositivo o tiempo de ejecución para recuperar sugerencias de acceso con la API de Credentials.

Antes de comenzar

Configura un proyecto de Android Studio.

Cómo recuperar las sugerencias de acceso

Para recuperar las sugerencias de acceso, primero configura el diálogo del selector de sugerencias creando un HintRequest . Luego, pasa el objeto HintRequest a CredentialsClient.getHintPickerIntent() para obtener un intent que le solicite al usuario elegir una dirección de correo electrónico. Por último, inicia el 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 la dirección de correo electrónico que desea usar.

Luego, en el método onActivityResult() de la actividad, recupera las sugerencias de la Credential.EXTRA_KEY, verifica si el usuario está en tu base de datos de usuarios y comenzar 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();
        }
    }

    ...

}

Completa previamente el formulario de acceso

Si el usuario está en tu base de datos de usuarios y tú iniciaste el acceso a la app actividad, puedes verificar (opcionalmente) si el objeto Credential contiene un ID. token. Si es así, puedes hacer que el usuario acceda con el token de ID. sin que el usuario tenga que escribir una contraseña.

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

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());

        ...
    }

    ...
}

Completa previamente el formulario de registro.

Si el usuario no está en tu base de datos de usuarios y tú iniciaste el registro en la app Completa previamente los campos de registro con las sugerencias de acceso que agregaste a el 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.

        ...
    }

    ...
}

También puedes verificar si el objeto Credential contiene un El token de ID que tiene un dirección de correo electrónico verificada. Si es así, puedes omitir el paso de verificación por correo electrónico de la app dado que Google ya verificó la dirección de correo electrónico.