ব্যবহারকারীর সঞ্চিত শংসাপত্র পুনরুদ্ধার করুন৷

আপনার ব্যবহারকারীদের জন্য সঞ্চিত শংসাপত্রের অনুরোধ এবং পুনরুদ্ধার করতে শংসাপত্র API ব্যবহার করে স্বয়ংক্রিয়ভাবে ব্যবহারকারীদের আপনার অ্যাপে সাইন ইন করুন৷

তুমি শুরু করার আগে

একটি অ্যান্ড্রয়েড স্টুডিও প্রকল্প কনফিগার করুন

একটি CredentialsClient অবজেক্ট তৈরি করুন

সঞ্চিত শংসাপত্রের অনুরোধ করার জন্য, আপনাকে শংসাপত্র API অ্যাক্সেস করতে CredentialsClient এর একটি উদাহরণ তৈরি করতে হবে:

CredentialsClient mCredentialsClient;

// ...

mCredentialsApiClient = Credentials.getClient(this);

একটি CredentialRequest অবজেক্ট তৈরি করুন

একটি CredentialRequest অবজেক্ট সাইন-ইন সিস্টেমগুলি নির্দিষ্ট করে যেখান থেকে আপনি শংসাপত্রের অনুরোধ করতে চান। পাসওয়ার্ড-ভিত্তিক সাইন-ইন-এর জন্য setPasswordLoginSupported পদ্ধতি এবং Google সাইন-ইন-এর মতো ফেডারেটেড সাইন-ইন পরিষেবাগুলির জন্য setAccountTypes() পদ্ধতি ব্যবহার করে একটি CredentialRequest তৈরি করুন৷

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() পদ্ধতি ব্যবহার করে সফল এবং ব্যর্থ অনুরোধগুলি পরিচালনা করতে একটি কলব্যাক সংজ্ঞায়িত করুন।

সফল শংসাপত্রের অনুরোধগুলি পরিচালনা করুন

টোস্ট একটি সফল সাইন ইন নির্দেশ করে৷ একটি সফল শংসাপত্রের অনুরোধে, আপনার অ্যাপে ব্যবহারকারীর সাইন-ইন সম্পূর্ণ করতে ফলস্বরূপ Credential বস্তুটি ব্যবহার করুন। পুনরুদ্ধার করা শংসাপত্রের ধরন নির্ধারণ করতে getAccountType() পদ্ধতি ব্যবহার করুন, তারপর উপযুক্ত সাইন-ইন প্রক্রিয়াটি সম্পূর্ণ করুন৷ উদাহরণস্বরূপ, Google সাইন-ইন-এর জন্য, একটি GoogleSignInClient অবজেক্ট তৈরি করুন যাতে ব্যবহারকারীর আইডি অন্তর্ভুক্ত থাকে, তারপর সাইন-ইন প্রবাহ শুরু করতে বস্তুটি ব্যবহার করুন। পাসওয়ার্ড-ভিত্তিক সাইন-ইন করার জন্য, আপনার অ্যাপের সাইন-ইন প্রক্রিয়া সম্পূর্ণ করতে শংসাপত্রের বস্তু থেকে ব্যবহারকারীর আইডি এবং পাসওয়ার্ড ব্যবহার করুন।

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

একাধিক সংরক্ষিত শংসাপত্র পরিচালনা করুন

স্মার্ট লক অ্যাকাউন্ট চয়নকারী

যখন একটি শংসাপত্র নির্বাচন করার জন্য ব্যবহারকারীর ইনপুট প্রয়োজন হয়, ResolvableApiException এর সাথে request() টাস্ক ব্যর্থ হবে। getStatusCode() RESOLUTION_REQUIRED প্রদান করে কিনা পরীক্ষা করুন এবং ব্যবহারকারীকে একটি অ্যাকাউন্ট বেছে নিতে অনুরোধ করার জন্য ব্যতিক্রমটির startResolutionForResult() পদ্ধতিতে কল করুন। তারপর, getParcelableExtra() পদ্ধতিতে Credential.EXTRA_KEY পাস করে কার্যকলাপের 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 প্রদান করলে, আপনি ব্যবহারকারীকে সম্প্রতি ব্যবহৃত সাইন-ইন তথ্য বেছে নিতে অনুরোধ করে সাইন-আপ এবং সাইন-ইন প্রক্রিয়া ত্বরান্বিত করতে পারেন, যেমন ইমেল ঠিকানা এবং নাম, এবং স্বয়ংক্রিয়ভাবে সেই তথ্য দিয়ে ফর্মের কিছু ক্ষেত্র পূরণ করা। বিস্তারিত জানার জন্য একজন ব্যবহারকারীকে সাইন-ইন ইঙ্গিত প্রদান দেখুন।

সফল সাইন ইন করার সময়, ব্যবহারকারীদের তাদের সমস্ত ডিভাইসে ভবিষ্যত প্রমাণীকরণ স্বয়ংক্রিয় করতে তাদের শংসাপত্র সংরক্ষণ করার অনুমতি দিন।