Cung cấp gợi ý đăng nhập cho người dùng

Yêu cầu truy xuất thông tin đăng nhập của người dùng có thể không thực hiện được khi người dùng chưa lưu thông tin đăng nhập hoặc khi người dùng chưa đăng ký ứng dụng của bạn. Trong các hãy sử dụng Credentials API để truy xuất gợi ý đăng nhập, chẳng hạn như tên và địa chỉ email của người dùng. Hãy dùng các gợi ý này để điền sẵn thông tin đăng nhập vào ứng dụng của bạn và biểu mẫu đăng ký, giúp đẩy nhanh quá trình giới thiệu ứng dụng.

Trên Android 6.0 (Marshmallow) trở lên, ứng dụng của bạn không cần yêu cầu mọi quyền đối với thiết bị hoặc thời gian chạy để truy xuất gợi ý đăng nhập bằng API Thông tin xác thực.

Trước khi bắt đầu

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

Truy xuất gợi ý đăng nhập

Để truy xuất gợi ý đăng nhập, trước tiên hãy định cấu hình hộp thoại bộ chọn gợi ý bằng cách tạo một HintRequest . Sau đó, hãy truyền đối tượng HintRequest đến CredentialsClient.getHintPickerIntent() để có ý định nhắc người dùng chọn một địa chỉ email. Cuối cùng, hãy bắt đầu ý định bằng 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);
}

Bộ chọn gợi ý đăng nhập Smart Lock

Người dùng được nhắc chọn một địa chỉ email để sử dụng.

Sau đó, trong phương thức onActivityResult() của hoạt động, hãy truy xuất gợi ý từ Credential.EXTRA_KEY, hãy kiểm tra xem người dùng có trong cơ sở dữ liệu người dùng của bạn hay không, và bắt đầu hoạt động thích hợp với gợi ý về thông tin đăng nhập.

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

    ...

}

Điền trước biểu mẫu đăng nhập

Nếu người dùng có trong cơ sở dữ liệu người dùng và bạn đã bắt đầu đăng nhập vào ứng dụng hoạt động của bạn, bạn có thể (không bắt buộc) kiểm tra xem đối tượng Credential có chứa mã nhận dạng hay không mã thông báo. Nếu vậy, bạn có thể đăng nhập cho người dùng bằng mã thông báo mã nhận dạng, mà không yêu cầu người dùng nhập mật khẩu.

Nếu đối tượng Credential không chứa mã thông báo mã nhận dạng (hoặc bạn không muốn sử dụng mã thông báo này) mã thông báo ID), điền sẵn vào trường đăng nhập bằng các gợi ý mà bạn đã thêm vào ý định.

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());

        ...
    }

    ...
}

Điền trước biểu mẫu đăng ký

Nếu người dùng không có trong cơ sở dữ liệu người dùng và bạn đã bắt đầu đăng ký ứng dụng hoạt động, điền sẵn vào các trường đăng ký bằng gợi ý đăng nhập mà bạn đã thêm vào ý định.

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.

        ...
    }

    ...
}

Nếu muốn, bạn cũng có thể kiểm tra xem đối tượng Credential có chứa Mã thông báo giá trị nhận dạng có địa chỉ email đã xác minh. Nếu vậy, bạn có thể bỏ qua bước xác minh email của ứng dụng, vì địa chỉ email đã được Google xác minh.