پس از اینکه کاربران با موفقیت به سیستم وارد شدند، حساب ایجاد کردند یا رمز عبور را تغییر دادند، به آنها اجازه دهید اعتبارنامههای خود را ذخیره کنند تا احراز هویت آینده در برنامه شما خودکار شود.
قبل از شروع
یک پروژه Android Studio را پیکربندی کنید .
اعتبار فروشگاه
یک شی 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 for Passwords شرکت کند. کاربر باید ذخیره اعتبارنامه را برای همه حساب ها فعال کند تا دفعه بعد از شما خواسته شود که اعتبارنامه ها را ذخیره کنند.
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()
بازیابی کنید.
هدف قرار دادن اندروید O و بالاتر
وقتی اطلاعات رمز عبور را با استفاده از Smart Lock در دستگاههای دارای Android O یا جدیدتر ذخیره میکنید، Smart Lock در صورت امکان از گفتگوی تأیید تکمیل خودکار بومی در گفتگوی خود استفاده میکند. (توجه داشته باشید که اعتبارنامه های ذخیره شده با استفاده از تکمیل خودکار با Google به صورت دو جهته با Smart Lock for Passwords به اشتراک گذاشته می شود.)