אחסון פרטי הכניסה של המשתמש

אחרי שמשתמשים ייכנסו, ייצרו חשבונות או ישנו סיסמאות, יש לאפשר כדי לאחסן את פרטי הכניסה שלהם כדי לבצע אימות אוטומטי באפליקציה שלכם בעתיד.

לפני שמתחילים

מגדירים פרויקט ב-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();

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