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