Provide sign-in hints to a user

Requests to retrieve user credentials can fail when a user has not yet saved credentials or when a user has not yet signed up to your app. In these situations, use the Credentials API to retrieve sign-in hints, such as the user's name and email address. Use these hints to pre-fill your app's sign-in and sign-up forms, speeding up your app's on-boarding process.

On Android 6.0 (Marshmallow) and newer, your app does not need to request any device or runtime permissions to retrieve sign-in hints with the Credentials API.

Before you begin

Configure an Android Studio project .

To retrieve the sign-in hints, first configure the hint selector dialog by creating a HintRequest object. Then, pass the HintRequest object to CredentialsClient.getHintPickerIntent() to get an intent to prompt the user to choose an email address. Finally, start the intent with 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);
} 

Smart Lock sign-in hint chooser

The user is prompted to choose an email address to use.

Then, in the activity's onActivityResult() method, retrieve the hints from the Credential.EXTRA_KEY parcel, check whether the user is in your user database, and start the appropriate activity with the credentials hint.

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

If the user is in your user database and you started your app's sign-in activity, you can (optionally) check if the Credential object contains an ID token. If so, you can sign in the user with the ID token , without requiring the user to type a password.

If the Credential object doesn't contain an ID token (or you don't want to use the ID token), pre-fill the sign-in fields with the hints that you added to the 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 
 ()); 
  
 ... 
  
 } 
  
 ... 
 } 
 

If the user isn't in your user database and you started your app's sign-up activity, pre-fill the sign-up fields with the sign-in hints that you added to the 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 
 . 
  
 ... 
  
 } 
  
 ... 
 } 
 

Optionally, you can also check if the Credential object contains an ID token that has a verified email address. If so, you can skip your app's email verification step, since the email address has already been verified by Google.

Create a Mobile Website
View Site in Mobile | Classic
Share by: