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