![]() |
Smart lock API |
Integrate Smart Lock for Passwords into your app by using the Credentials API to retrieve saved credentials on sign-in. Use successfully retrieved credentials to sign the user in, or use the Credentials API to rapidly on-board new users by partially completing your app's sign in or sign up form. Prompt users after sign-in or sign-up to store their credentials for future automatic authentication.
Reference : Official Link
Project Setup
Smart Lock for Passwords on Android requires the following:Add the following line in app level gradle file
compile 'com.google.android.gms:play-services-auth:10.0.1'
Then Click Sync NowCoding Part
Create your activity with implements ofGoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.enableAutoManage(this, 0, this)
.addApi(Auth.CREDENTIALS_API)
.build();
Save Credentials:You can save your username and password credentials by passing as in the following:
String username = mUsernameTextInputLayout.getEditText().getText().toString();
String password = mPasswordTextInputLayout.getEditText().getText().toString();
Credential credential = new Credential.Builder(username)
.setPassword(password)
.build();
Pass your credentials to Save methodprotected void saveCredential(Credential credential) {
// Credential is valid so save it.
Auth.CredentialsApi.save(mGoogleApiClient,
credential).setResultCallback(new ResultCallback() {
@Override
public void onResult(Status status) {
if (status.isSuccess()) {
Log.d(TAG, "Credential saved");
goToContent();
} else {
Log.d(TAG, "Attempt to save credential failed " +
status.getStatusMessage() + " " +
status.getStatusCode());
resolveResult(status, RC_SAVE);
}
}
});
}
Following Method is used to process the status of saving your credentialsprivate void resolveResult(Status status, int requestCode) {
// We don't want to fire multiple resolutions at once since that
// can result in stacked dialogs after rotation or another
// similar event.
if (mIsResolving) {
Log.w(TAG, "resolveResult: already resolving.");
return;
}
Log.d(TAG, "Resolving: " + status);
if (status.hasResolution()) {
Log.d(TAG, "STATUS: RESOLVING");
try {
status.startResolutionForResult(this, requestCode);
mIsResolving = true;
} catch (IntentSender.SendIntentException e) {
Log.e(TAG, "STATUS: Failed to send resolution.", e);
}
} else {
Log.e(TAG, "STATUS: FAIL");
if (requestCode == RC_SAVE) {
goToContent();
}
}
}
OnActivityResult shows in the output of saving your credentialspublic void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "onActivityResult:" + requestCode + ":" + resultCode + ":" + data);
if (requestCode == RC_SAVE) {
Log.d(TAG, "Result code: " + resultCode);
if (resultCode == RESULT_OK) {
Log.d(TAG, "Credential Save: OK");
} else {
Log.e(TAG, "Credential Save Failed");
}
goToContent();
}
if (requestCode == RC_READ) {
if (resultCode == RESULT_OK) {
Credential credential = data.getParcelableExtra(Credential.EXTRA_KEY);
processRetrievedCredential(credential);
} else {
Log.e(TAG, "Credential Read: NOT OK");
}
}
}
/**
* Start the Content Activity and finish this one.
*/
protected void goToContent() {
startActivity(new Intent(this, ContentActivity.class));
finish();
}
Retrieve your saved credentials from your account and made your login process easier
private void requestCredentials() {
Log.d(TAG, "requestCredentials");
CredentialRequest request = new CredentialRequest.Builder()
.setPasswordLoginSupported(true)
.build();
Auth.CredentialsApi.request(mGoogleApiClient, request).setResultCallback(
new ResultCallback() {
@Override
public void onResult(@NonNull CredentialRequestResult credentialRequestResult) {
Status status = credentialRequestResult.getStatus();
Log.v(TAG, status.getStatus().toString());
if (credentialRequestResult.getStatus().isSuccess()) {
Credential credential = credentialRequestResult.getCredential();
processRetrievedCredential(credential);
} else if (status.getStatusCode() == CommonStatusCodes.SIGN_IN_REQUIRED) {
Log.d(TAG, "Sign in required");
} else if (status.getStatusCode() == CommonStatusCodes.RESOLUTION_REQUIRED) {
Log.w(TAG, "Unrecognized status code: " + status.getStatusCode());
try {
status.startResolutionForResult(MainActivity.this, RC_READ);
} catch (IntentSender.SendIntentException e) {
Log.e(TAG, "STATUS: Failed to send resolution.", e);
}
}
}
});
}
Download Code:You can download the full source from the following Github link. If you Like this tutorial, Please star it in Github.
Post your doubts and comments in the comments section.