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

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

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

מגדירים פרויקט ב-Android Studio.

יצירת אובייקט CredentialsClient

כדי לבקש פרטי כניסה שמורים, צריך ליצור מופע של CredentialsClient כדי לגשת ל-Credential API:

CredentialsClient mCredentialsClient;

// ...

mCredentialsApiClient = Credentials.getClient(this);

יצירת אובייקט CredentialRequest

אובייקט CredentialRequest מציין את מערכות הכניסה שמהן רוצים לבקש פרטי כניסה. בניית CredentialRequest באמצעות השיטה setPasswordLoginSupported עבור כניסה מבוססת-סיסמה, והשיטה setAccountTypes() לאיחוד שירותי כניסה כמו 'כניסה באמצעות חשבון Google'.

mCredentialRequest = new CredentialRequest.Builder()
    .setPasswordLoginSupported(true)
    .setAccountTypes(IdentityProviders.GOOGLE, IdentityProviders.TWITTER)
    .build();

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

בקשה לפרטי כניסה מאוחסנים

אחרי שיוצרים אובייקטים מסוג CredentialsClient ו-CredentialRequest, מעבירים את אובייקט הבקשה אל CredentialsClient.request() כדי לבקש פרטי כניסה שמאוחסנים עבור האפליקציה שלכם.

  mCredentialsClient.request(mCredentialRequest).addOnCompleteListener(
      new OnCompleteListener<CredentialRequestResponse>() {
          @Override
          public void onComplete(@NonNull Task<CredentialRequestResponse> task) {

              if (task.isSuccessful()) {
                  // See "Handle successful credential requests"
                  onCredentialRetrieved(task.getResult().getCredential());
                  return;
              }

              // See "Handle unsuccessful and incomplete credential requests"
              // ...
          }
      });

להגדיר קריאה חוזרת (callback) כדי לטפל בבקשות שהושלמו בהצלחה או שנכשלו באמצעות אמצעי תשלום אחד (addOnCompleteListener()).

טיפול בבקשות לפרטי כניסה שבוצעו בהצלחה

הודעה בצורת תיבה שמצביעה על כניסה מוצלחת בבקשת פרטי כניסה מוצלחת, משתמשים Credential כדי להשלים את הכניסה של המשתמש לאפליקציה. שימוש בשיטה getAccountType() כדי לקבוע את סוג פרטי הכניסה שאוחזרו, ולאחר מכן להשלים את תהליך הכניסה המתאים תהליך האימות. לדוגמה, לכניסה באמצעות חשבון Google, יוצרים אובייקט GoogleSignInClient כולל את מזהה המשתמש, ואז להשתמש באובייקט כדי להתחיל את תהליך הכניסה. לסיסמה מבוססת-סיסמה להשתמש במזהה ובסיסמה של המשתמש מהאובייקט Credential כדי להשלים את תהליך הכניסה לחשבון.

private void onCredentialRetrieved(Credential credential) {
    String accountType = credential.getAccountType();
    if (accountType == null) {
        // Sign the user in with information from the Credential.
        signInWithPassword(credential.getId(), credential.getPassword());
    } else if (accountType.equals(IdentityProviders.GOOGLE)) {
        // The user has previously signed in with Google Sign-In. Silently
        // sign in the user with the same ID.
        // See https://developers.google.com/identity/sign-in/android/
        GoogleSignInOptions gso =
                new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                        .requestEmail()
                        .build();

        GoogleSignInClient signInClient = GoogleSignIn.getClient(this, gso);
        Task<GoogleSignInAccount> task = signInClient.silentSignIn();
        // ...
    }
}

טיפול בכמה פרטי כניסה שמורים

בוחר החשבונות ב-Smart Lock

כשנדרש קלט של משתמשים כדי לבחור פרטי כניסה, המשימה request() נכשלים עם ResolvableApiException. צריך לבדוק getStatusCode() מחזירה RESOLUTION_REQUIRED קוראים ל-method startResolutionForResult() של החריג כדי לבקש מהמשתמש כדי לבחור חשבון. לאחר מכן, מאחזרים את פרטי הכניסה של המשתמש שנבחר onActivityResult() של הפעילות על ידי העברת Credential.EXTRA_KEY getParcelableExtra() .

mCredentialsClient.request(request).addOnCompleteListener(
        new OnCompleteListener() {
            @Override
            public void onComplete(@NonNull Task task) {
                if (task.isSuccessful()) {
                    // ...
                    return;
                }

                Exception e = task.getException();
                if (e instanceof ResolvableApiException) {
                    // This is most likely the case where the user has multiple saved
                    // credentials and needs to pick one. This requires showing UI to
                    // resolve the read request.
                    ResolvableApiException rae = (ResolvableApiException) e;
                    resolveResult(rae, RC_READ);
                } else if (e instanceof ApiException) {
                    // The user must create an account or sign in manually.
                    Log.e(TAG, "Unsuccessful credential request.", e);

                    ApiException ae = (ApiException) e;
                    int code = ae.getStatusCode();
                    // ...
                }
            }
        });
private void resolveResult(ResolvableApiException rae, int requestCode) {
    try {
        rae.startResolutionForResult(MainActivity.this, requestCode);
        mIsResolving = true;
    } catch (IntentSender.SendIntentException e) {
        Log.e(TAG, "Failed to send resolution.", e);
        hideProgress();
    }
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // ...

    if (requestCode == RC_READ) {
        if (resultCode == RESULT_OK) {
            Credential credential = data.getParcelableExtra(Credential.EXTRA_KEY);
            onCredentialRetrieved(credential);
        } else {
            Log.e(TAG, "Credential Read: NOT OK");
            Toast.makeText(this, "Credential Read Failed", Toast.LENGTH_SHORT).show();
        }
    }

    // ...

}

כאשר פרטי הכניסה השמורים לא נמצאו, המשתמשים חייבים ליצור חשבון או באופן ידני צריך להיכנס לחשבון. אם getStatusCode() מחזירה SIGN_IN_REQUIRED, אם תרצו לזרז את תהליכי ההרשמה והכניסה, תוכלו כדי לבחור פרטי כניסה שנעשה בהם שימוש לאחרונה, כמו כתובת אימייל ולמילוי אוטומטי של פרטים מסוימים בטפסים. מידע נוסף זמין בקטע הצגת טיפים לכניסה למשתמש. אפשר לקבל פרטים נוספים.

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