আপনার ব্যবহারকারীদের জন্য সঞ্চিত শংসাপত্রের অনুরোধ এবং পুনরুদ্ধার করতে শংসাপত্র 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 প্রদান করলে, আপনি ব্যবহারকারীকে সম্প্রতি ব্যবহৃত সাইন-ইন তথ্য চয়ন করার জন্য অনুরোধ করে সাইন-আপ এবং সাইন-ইন প্রক্রিয়াগুলিকে ঐচ্ছিকভাবে ত্বরান্বিত করতে পারেন, যেমন ইমেল ঠিকানা এবং নাম, এবং স্বয়ংক্রিয়ভাবে সেই তথ্য দিয়ে ফর্মের কিছু ক্ষেত্র পূরণ করা। বিস্তারিত জানার জন্য একজন ব্যবহারকারীকে সাইন-ইন ইঙ্গিত প্রদান দেখুন।
সফল সাইন ইন করার সময়, ব্যবহারকারীদের তাদের সমস্ত ডিভাইসে ভবিষ্যত প্রমাণীকরণ স্বয়ংক্রিয় করতে তাদের শংসাপত্র সংরক্ষণ করার অনুমতি দিন।