Lưu trữ thông tin xác thực của người dùng

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 họ lưu trữ thông tin xác thực để tự động hoá quá trình xác thực trong tương lai trong ứng dụng của bạn.

Trước khi bắt đầu

Định cấu hình dự án Android Studio.

Thông tin đăng nhập cửa hàng

Tạo một đối tượng Credential chứa thông tin đăng nhập của người dùng. Ví dụ: để cho phép người dùng lưu trữ thông tin xác thực 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 đăng nhập bằng Tài khoản Google của họ thành công:

GoogleSignInAccount gsa = signInTask.getResult();
Credential credential = new Credential.Builder(gsa.getEmail())
        .setAccountType(IdentityProviders.GOOGLE)
        .setName(gsa.getDisplayName())
        .setProfilePictureUri(gsa.getPhotoUrl())
        .build();

Hộp thoại Lưu của Smart Lock

Sau đó, hãy gọi CredentialsClient.save() để lưu thông tin đăng nhập của người dùng. Nếu lệnh gọi đến CredentialsClient.save() không thành công ngay lập tức, thì thông tin xác thực có thể là thông tin xác thực mới. Trong trường hợp đó, người dùng phải xác nhận yêu cầu lưu. Phân giải 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 xác thực, thì người dùng sẽ không được nhắc lại để lưu bất kỳ thông tin xác thực 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 lưu, kết quả sẽ có mã trạng thái CANCELED. Người dùng có thể chọn sử dụng vào lúc khác trong ứng dụng Cài đặt Google, trong phần Smart Lock cho Mật khẩu. Người dùng phải bật tính năng lưu thông tin xác thực cho tất cả các tài khoản để được nhắc lưu thông tin xác thực 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 đó bằng cách gọi CredentialsClient.request().

Nhắm đến 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 trở lên, Smart Lock sẽ sử dụng hộp thoại xác nhận tự động điền gốc trên hộp thoại riêng bất cứ khi nào có thể. (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 sẽ được chia sẻ hai chiều với Smart Lock cho Mật khẩu.)