تخزين بيانات اعتماد مستخدم

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

قبل البدء

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

بيانات اعتماد المتجر

أنشئ عنصر Credential يحتوي على معلومات تسجيل الدخول للمستخدم. على سبيل المثال، للسماح للمستخدمين بتخزين بيانات الاعتماد بعد تسجيل الدخول بنجاح باستخدام كلمات المرور:

Credential credential = new Credential.Builder(email)
        .setPassword(password)  // Important: only store passwords in this field.
                                // Android autofill uses this value to complete
                                // sign-in forms, so repurposing this field will
                                // likely cause errors.
        .build();

أو، على سبيل المثال، بعد أن يسجّل المستخدمون الدخول باستخدام حساباتهم على Google بنجاح:

GoogleSignInAccount gsa = signInTask.getResult();
Credential credential = new Credential.Builder(gsa.getEmail())
        .setAccountType(IdentityProviders.GOOGLE)
        .setName(gsa.getDisplayName())
        .setProfilePictureUri(gsa.getPhotoUrl())
        .build();

مربّع حوار الحفظ في Smart Lock

يمكنك بعد ذلك الاتصال بـ CredentialsClient.save() لحفظ بيانات اعتماد المستخدمين. إذا لم ينجح اتصال CredentialsClient.save() على الفور، قد تكون بيانات الاعتماد جديدة، وفي هذه الحالة على المستخدم تأكيد طلب الحفظ. عليك حلّ مشكلة ResolvableApiException باستخدام startResolutionForResult() لطلب التأكيد من المستخدم.

إذا اختار المستخدم عدم حفظ بيانات الاعتماد، لن يُطلب منه مرة أخرى حفظ بيانات اعتماد أي حساب للتطبيق. وإذا اتصلت بـ CredentialsClient.save() بعد إيقاف المستخدم لبيانات الاعتماد، ستظهر في النتيجة رمز الحالة CANCELED. يمكن للمستخدم الاشتراك لاحقًا من تطبيق "إعدادات Google"، في قسم Smart Lock لكلمات المرور. يجب على المستخدم تفعيل حفظ بيانات الاعتماد لجميع الحسابات، لتتم مطالبته بحفظ بيانات الاعتماد في المرة القادمة.

mCredentialsClient.save(credential).addOnCompleteListener(
        new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "SAVE: OK");
                    Toast.makeText(activity, "Credentials saved", Toast.LENGTH_SHORT).show();
                    return;
                }

                Exception e = task.getException();
                if (e instanceof ResolvableApiException) {
                    // Try to resolve the save request. This will prompt the user if
                    // the credential is new.
                    ResolvableApiException rae = (ResolvableApiException) e;
                    try {
                        rae.startResolutionForResult(this, RC_SAVE);
                    } catch (IntentSender.SendIntentException exception) {
                        // Could not resolve the request
                        Log.e(TAG, "Failed to send resolution.", exception);
                        Toast.makeText(activity, "Save failed", Toast.LENGTH_SHORT).show();
                    }
                } else {
                    // Request has no resolution
                    Toast.makeText(activity, "Save failed", Toast.LENGTH_SHORT).show();
                }
            }
        });</pre>

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // ...

        if (requestCode == RC_SAVE) {
            if (resultCode == RESULT_OK) {
                Log.d(TAG, "SAVE: OK");
                Toast.makeText(this, "Credentials saved", Toast.LENGTH_SHORT).show();
            } else {
                Log.e(TAG, "SAVE: Canceled by user");
            }
        }

        // ...

    }

بعد تخزين بيانات الاعتماد، يمكنك استردادها من خلال استدعاء CredentialsClient.request().

استهداف الإصدار Android O والإصدارات الأحدث

عند حفظ بيانات اعتماد كلمة المرور باستخدام Smart Lock على الأجهزة التي تعمل بنظام Android O أو إصدار أحدث، يستخدم Smart Lock مربع حوار تأكيد الملء التلقائي الأصلي بدلاً من مربّع الحوار الخاص به كلما أمكن ذلك. (لاحظ أن بيانات الاعتماد المحفوظة باستخدام الملء التلقائي من Google تتم مشاركتها ثنائية الاتجاه مع Smart Lock لكلمات المرور).