اطلاعات کاربری ذخیره شده کاربر را بازیابی کنید

با استفاده از Credentials API برای درخواست و بازیابی اطلاعات کاربری ذخیره شده برای کاربران، کاربران را به طور خودکار وارد برنامه خود کنید.

قبل از اینکه شروع کنی

یک پروژه Android Studio را پیکربندی کنید .

یک شی CredentialsClient ایجاد کنید

برای درخواست اعتبارنامه های ذخیره شده، باید یک نمونه از CredentialsClient برای دسترسی به Credentials API ایجاد کنید:

CredentialsClient mCredentialsClient;

// ...

mCredentialsApiClient = Credentials.getClient(this);

یک شی CredentialRequest ایجاد کنید

یک شی CredentialRequest سیستم های ورود به سیستم را مشخص می کند که می خواهید اعتبارنامه را از آنها درخواست کنید. یک CredentialRequest با استفاده از روش setPasswordLoginSupported برای ورود به سیستم مبتنی بر رمز عبور و روش setAccountTypes() برای سرویس‌های ورود به سیستم فدرال مانند Google Sign-In بسازید.

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"
              // ...
          }
      });

برای رسیدگی به درخواست های موفق و ناموفق با استفاده از متد addOnCompleteListener() یک callback تعریف کنید.

رسیدگی به درخواست های اعتبارنامه موفق

نان تست نشان دهنده ورود موفقیت آمیز است در یک درخواست اعتبارنامه موفقیت آمیز، از شی Credential حاصل برای تکمیل ورود کاربر به برنامه خود استفاده کنید. از متد getAccountType() برای تعیین نوع اعتبارنامه های بازیابی شده استفاده کنید، سپس فرآیند ورود مناسب را تکمیل کنید. به عنوان مثال، برای Google Sign-In، یک شی 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 را برمی گرداند و متد startResolutionForResult() استثنا را فراخوانی کنید تا از کاربر بخواهد یک حساب را انتخاب کند. سپس، با ارسال Credential.EXTRA_KEY به متد getParcelableExtra() onActivityResult() فعالیت بازیابی کنید.

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 را برگرداند، می توانید به صورت اختیاری فرآیندهای ثبت نام و ورود به سیستم را با درخواست از کاربر برای انتخاب اطلاعات ورود اخیر استفاده شده تسریع کنید. مانند آدرس ایمیل و نام و پر کردن خودکار برخی از فیلدهای فرم ها با آن اطلاعات. برای جزئیات بیشتر به ارائه نکات ورود به سیستم به کاربر مراجعه کنید.

با ورود موفقیت آمیز به سیستم، به کاربران اجازه دهید اعتبارنامه های خود را ذخیره کنند تا احراز هویت آینده در همه دستگاه های خود به طور خودکار انجام شود.