تقديم تلميحات تسجيل الدخول للمستخدم

قد يتعذّر استرداد طلبات استرداد بيانات اعتماد المستخدم إذا لم يحفظ المستخدم بيانات اعتماده بعد أو لم يشترك في تطبيقك بعد. في هذه الحالات، يمكنك استخدام Credentials API لاسترداد تلميحات تسجيل الدخول، مثل اسم المستخدم وعنوان بريده الإلكتروني. استخدم هذه التلميحات لملء نموذج تسجيل الدخول والاشتراك إلى تطبيقك مسبقًا، مما يؤدي إلى تسريع عملية إعداد تطبيقك.

في نظام التشغيل Android 6.0 (Marshmallow) والإصدارات الأحدث، لا يحتاج تطبيقك إلى طلب أذونات من أي جهاز أو وقت تشغيل لاسترداد تلميحات تسجيل الدخول باستخدام Credentials API.

قبل البدء

ضبط مشروع "استوديو Android"

استرداد تلميحات تسجيل الدخول

لاسترداد تلميحات تسجيل الدخول، اضبط أولاً مربع حوار أداة اختيار التلميح من خلال إنشاء كائن HintRequest. بعد ذلك، أدخِل الكائن HintRequest إلى CredentialsClient.getHintPickerIntent() ليطلب من المستخدم اختيار عنوان بريد إلكتروني. أخيرًا، ابدأ القصد بـ 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 يحتوي على رمز مميز للرقم التعريفي. إذا كان الأمر كذلك، يمكنك تسجيل دخول المستخدم باستخدام الرمز المميّز لرقم التعريف، بدون أن تطلب من المستخدم كتابة كلمة مرور.

إذا لم يكن الكائن Credential يحتوي على رمز مميز للمعرّف (أو إذا لم تكن تريد استخدام الرمز المميّز للمعرّف)، يُرجى ملء حقول تسجيل الدخول مسبقًا بالتلميحات التي أضفتها إلى النية.

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

        ...
    }

    ...
}

ملء نموذج الاشتراك مسبقًا

إذا لم يكن المستخدم مسجلاً في قاعدة بيانات المستخدمين وبدأت نشاط الاشتراك في تطبيقك، املأ حقول الاشتراك مسبقًا بتلميحات تسجيل الدخول التي أضفتها إلى النية.

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.