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);
}
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.