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