بعد تسجيل المستخدمين الدخول بنجاح، أو إنشاء حسابات، أو تغيير كلمات المرور، أو السماح لتخزين بيانات الاعتماد الخاصة بهم لإجراء عمليات المصادقة المستقبلية بشكل آلي في تطبيقك.
قبل البدء
إعداد مشروع "استوديو Android":
بيانات الاعتماد الخاصة بمتجر Play
أنشئ عنصر 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 لكلمات المرور).