אחרי שמשתמשים ייכנסו, ייצרו חשבונות או ישנו סיסמאות, יש לאפשר כדי לאחסן את פרטי הכניסה שלהם כדי לבצע אימות אוטומטי באפליקציה שלכם בעתיד.
לפני שמתחילים
מגדירים פרויקט ב-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 לסיסמאות'. המשתמש צריך להפעיל
שמירת פרטי כניסה לכל החשבונות כדי לקבל בקשה לשמור פרטי כניסה בפעם הבאה.
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 משתפת את Google באופן דו-כיווני עם Smart Lock לסיסמאות).