نکات ورود به سیستم را به کاربر ارائه دهید

زمانی که کاربر هنوز اعتبارنامه را ذخیره نکرده باشد یا زمانی که کاربر هنوز در برنامه شما ثبت نام نکرده باشد، درخواست برای بازیابی اطلاعات کاربری ممکن است با شکست مواجه شود. در این شرایط، از Credentials API برای بازیابی نکات ورود به سیستم، مانند نام و آدرس ایمیل کاربر استفاده کنید. از این نکات برای پر کردن فرم های ورود و ثبت نام برنامه خود از قبل استفاده کنید و روند ورود به برنامه خود را سرعت بخشید.

در Android 6.0 (Marshmallow) و جدیدتر، برنامه شما نیازی به درخواست هیچ دستگاه یا مجوز زمان اجرا برای بازیابی نکات ورود به سیستم با Credentials API ندارد.

قبل از شروع

یک پروژه Android Studio را پیکربندی کنید .

نکات ورود به سیستم را بازیابی کنید

برای بازیابی نکات ورود به سیستم، ابتدا با ایجاد یک شی HintRequest ، کادر محاوره انتخابگر راهنمایی را پیکربندی کنید. سپس، شی HintRequest را به CredentialsClient.getHintPickerIntent() ارسال کنید تا یک intent دریافت کنید که از کاربر خواسته شود یک آدرس ایمیل را انتخاب کند. در نهایت، intent را با 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

از کاربر خواسته می شود تا یک آدرس ایمیل را برای استفاده انتخاب کند.

سپس، در متد onActivityResult() فعالیت، نکات را از بسته Credential.EXTRA_KEY بازیابی کنید، بررسی کنید که آیا کاربر در پایگاه داده کاربر شما قرار دارد یا خیر، و فعالیت مناسب را با اشاره اعتبار شروع کنید.

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

    ...

}

فرم ورود را از قبل پر کنید

اگر کاربر در پایگاه داده کاربر شما است و شما فعالیت ورود به سیستم برنامه خود را شروع کرده اید، می توانید (اختیاری) بررسی کنید که آیا شی Credential حاوی یک نشانه ID است یا خیر. در این صورت، می توانید بدون نیاز به تایپ رمز عبور، کاربر را با شناسه شناسه وارد کنید .

اگر شی Credential حاوی یک نشانه ID نیست (یا نمی‌خواهید از نشانه ID استفاده کنید)، فیلدهای ورود به سیستم را با نکاتی که به 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());

        ...
    }

    ...
}

فرم ثبت نام را از قبل پر کنید

اگر کاربر در پایگاه داده کاربر شما نیست و شما فعالیت ثبت نام برنامه خود را شروع کرده اید، فیلدهای ثبت نام را از قبل با نکات ورود به سیستمی که به 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.

        ...
    }

    ...
}

به صورت اختیاری، همچنین می توانید بررسی کنید که آیا شی Credential حاوی یک رمز شناسه است که یک آدرس ایمیل تأیید شده دارد یا خیر. در این صورت، می‌توانید مرحله تأیید ایمیل برنامه خود را رد کنید، زیرا آدرس ایمیل قبلاً توسط Google تأیید شده است.