Sau khi người dùng đăng nhập, tạo tài khoản hoặc thay đổi mật khẩu thành công, hãy cho phép lưu trữ thông tin đăng nhập nhằm tự động hoá quy trình xác thực sau này trong ứng dụng của bạn.
Trước khi bắt đầu
Định cấu hình dự án Android Studio.
Lưu trữ thông tin đăng nhập
Tạo đối tượng Credential
chứa thông tin đăng nhập của người dùng. Cho
để cho phép người dùng lưu trữ thông tin xác thực của mình sau khi đăng nhập thành công bằng
mật khẩu của họ:
Credential credential = new Credential.Builder(email)
.setPassword(password) // Important: only store passwords in this field.
// Android autofill uses this value to complete
// sign-in forms, so repurposing this field will
// likely cause errors.
.build();
Hoặc, ví dụ: sau khi người dùng thành công đăng nhập bằng Tài khoản Google của con:
GoogleSignInAccount gsa = signInTask.getResult();
Credential credential = new Credential.Builder(gsa.getEmail())
.setAccountType(IdentityProviders.GOOGLE)
.setName(gsa.getDisplayName())
.setProfilePictureUri(gsa.getPhotoUrl())
.build();
Sau đó, hãy gọi CredentialsClient.save()
để lưu dữ liệu của người dùng
thông tin xác thực. Nếu lệnh gọi đến CredentialsClient.save()
không xuất hiện ngay lập tức
thành công thì thông tin đăng nhập đó có thể là thông tin mới. Trong trường hợp đó, người dùng phải xác nhận
yêu cầu lưu. Giải quyết ResolvableApiException
bằng
startResolutionForResult()
để nhắc người dùng xác nhận.
Nếu người dùng chọn không lưu thông tin đăng nhập thì họ sẽ không được nhắc lại để
lưu thông tin đăng nhập của bất kỳ tài khoản nào cho ứng dụng. Nếu bạn gọi
CredentialsClient.save()
sau khi người dùng đã chọn không tham gia, kết quả sẽ có
mã trạng thái của CANCELED
. Người dùng có thể chọn tham gia sau từ
Ứng dụng Cài đặt, trong phần Smart Lock cho Mật khẩu. Người dùng phải bật
lưu thông tin đăng nhập cho tất cả tài khoản được nhắc lưu thông tin đăng nhập vào lần tiếp theo.
mCredentialsClient.save(credential).addOnCompleteListener(
new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "SAVE: OK");
Toast.makeText(activity, "Credentials saved", Toast.LENGTH_SHORT).show();
return;
}
Exception e = task.getException();
if (e instanceof ResolvableApiException) {
// Try to resolve the save request. This will prompt the user if
// the credential is new.
ResolvableApiException rae = (ResolvableApiException) e;
try {
rae.startResolutionForResult(this, RC_SAVE);
} catch (IntentSender.SendIntentException exception) {
// Could not resolve the request
Log.e(TAG, "Failed to send resolution.", exception);
Toast.makeText(activity, "Save failed", Toast.LENGTH_SHORT).show();
}
} else {
// Request has no resolution
Toast.makeText(activity, "Save failed", Toast.LENGTH_SHORT).show();
}
}
});</pre>
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// ...
if (requestCode == RC_SAVE) {
if (resultCode == RESULT_OK) {
Log.d(TAG, "SAVE: OK");
Toast.makeText(this, "Credentials saved", Toast.LENGTH_SHORT).show();
} else {
Log.e(TAG, "SAVE: Canceled by user");
}
}
// ...
}
Sau khi lưu trữ thông tin xác thực, hãy truy xuất thông tin xác thực bằng cách gọi
CredentialsClient.request()
.
Nhắm mục tiêu Android O trở lên
Khi bạn lưu thông tin xác thực mật khẩu bằng Smart Lock trên các thiết bị chạy Android O hoặc mới hơn, Smart Lock sử dụng hộp thoại xác nhận tự động điền gốc thay vì bất cứ khi nào có thể. (Xin lưu ý rằng thông tin đăng nhập được lưu bằng tính năng Tự động điền bằng Google được chia sẻ hai chiều với Smart Lock cho Mật khẩu.)