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

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

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

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