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

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

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

في نظام التشغيل 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 لا يحتوي على رمز مميّز للمعرّف (أو لا تريد استخدام الرمز المميّز للمعرّف)، عليك ملء حقول تسجيل الدخول مسبقًا بالتلميحات التي أضفتها إلى عنصر 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());

        ...
    }

    ...
}

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

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

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.