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

قد يتعذّر تنفيذ طلبات استرداد بيانات اعتماد المستخدم إذا لم يحفظ المستخدم بعد بيانات الاعتماد أو في حال لم يشترك المستخدم في تطبيقك بعد. في هذه يمكنك استخدام 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 من عنوان البريد الإلكتروني.