এই নির্দেশিকাটি Google দিয়ে সাইন ইন কীভাবে বাস্তবায়ন করতে হয় তা বর্ণনা করে এবং নিম্নলিখিত পদক্ষেপগুলি কভার করে:
- আপনার অ্যাপে নির্ভরতা যোগ করুন।
-
CredentialManagerইনস্ট্যান্টিয়েট করুন। - নীচের শীট প্রবাহ তৈরি করুন।
- বোতাম প্রবাহ তৈরি করুন।
- সাইন-ইন প্রতিক্রিয়া পরিচালনা করুন।
- ত্রুটিগুলি পরিচালনা করুন।
- সাইন-আউট পরিচালনা করুন।
আপনার অ্যাপে নির্ভরতা যোগ করুন
আপনার মডিউলের build.gradle ফাইলে, Credential Manager, Play Services Auth এবং googleid এর সর্বশেষ সংস্করণ ব্যবহার করে নির্ভরতা ঘোষণা করুন:
কোটলিন
dependencies { implementation("androidx.credentials:credentials:1.6.0-rc02") implementation("androidx.credentials:credentials-play-services-auth:1.6.0-rc02") implementation("com.google.android.libraries.identity.googleid:googleid:<latest version>") }
গ্রোভি
dependencies { implementation "androidx.credentials:credentials:1.6.0-rc02" implementation "androidx.credentials:credentials-play-services-auth:1.6.0-rc02" implementation "com.google.android.libraries.identity.googleid:googleid:<latest version>" }
ইনস্ট্যান্টিয়েট ক্রেডেনশিয়াল ম্যানেজার
একটি CredentialManager অবজেক্ট তৈরি করতে আপনার অ্যাপ বা কার্যকলাপের প্রসঙ্গ ব্যবহার করুন।
// Use your app or activity context to instantiate a client instance of
// CredentialManager.
private val credentialManager = CredentialManager.create(context)
নিচের শিট ফ্লো তৈরি করুন
নিচের শীটটি হল ক্রেডেনশিয়াল ম্যানেজারের অন্তর্নির্মিত UI। এই UI ব্যবহার করলে পাসওয়ার্ড, পাসকি এবং সাইন ইন উইথ গুগলের মতো সমস্ত প্রমাণীকরণ পদ্ধতিতে একটি সামঞ্জস্যপূর্ণ অভিজ্ঞতা তৈরি হয়।
পূর্বে অনুমোদিত অ্যাকাউন্টগুলির জন্য সাইন-ইন অনুরোধ কনফিগার করুন
ব্যবহারকারীর গুগল আইডি টোকেন পুনরুদ্ধার করতে GetGoogleIdOption ব্যবহার করে গুগল সাইন-ইন অনুরোধের চেষ্টা করুন।
নিম্নলিখিত স্নিপেটগুলি অ্যাকাউন্টটি একটি অনুমোদিত অ্যাকাউন্ট কিনা তা পরীক্ষা করে।
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(true)
.setServerClientId(WEB_CLIENT_ID)
.setAutoSelectEnabled(true)
.setNonce(generateSecureRandomNonce())
.build()
অনুরোধ googleIdOption অবজেক্টটি নিম্নরূপ কনফিগার করা হয়েছে:
পূর্বে অনুমোদিত অ্যাকাউন্টগুলি ফিল্টার করুন: আপনার অ্যাপে সাইন ইন করার জন্য পূর্বে ব্যবহৃত অনুমোদিত অ্যাকাউন্টগুলি পুনরুদ্ধার করতে,
setFilterByAuthorizedAccountstrueএ সেট করুন।মনে রাখবেন যে
setFilterByAuthorizedAccountsএর ডিফল্ট মান হলtrue, যার অর্থ হল নীচের শীট UI এর ডিফল্ট আচরণ হল শুধুমাত্র পূর্বে অনুমোদিত অ্যাকাউন্টগুলি প্রদর্শন করা।সার্ভার ক্লায়েন্ট আইডি সেট করুন:
setServerClientIdপ্যারামিটার সেট করুন।webClientIdহল সেই ওয়েব ক্লায়েন্ট আইডি যা আপনি আপনার Google ক্লাউড প্রজেক্টে OAuth-এর জন্য পূর্বশর্তগুলি পূরণ করার সময় সেট আপ করেন।স্বয়ংক্রিয় সাইন-ইন সক্ষম করুন (ঐচ্ছিক): ফিরে আসা ব্যবহারকারীদের জন্য স্বয়ংক্রিয় সাইন-ইন সক্ষম করতে,
setAutoSelectEnabled(true)এবংsetFilterByAuthorizedAccounts(true)ব্যবহার করুন। আপনার অ্যাপ ব্যবহারকারীদের জন্য, যদি তারা ইতিমধ্যেই সাইন ইন করে থাকেন তবে এটি অপ্রয়োজনীয় ঘর্ষণ দূর করে।নিম্নলিখিত মানদণ্ড পূরণ হলেই স্বয়ংক্রিয় সাইন-ইন সম্ভব:
- ডিভাইসটিতে শুধুমাত্র একটি অনুমোদিত অ্যাকাউন্ট আছে এবং সেই অনুমোদিত অ্যাকাউন্টটি আগে ডিভাইসে অ্যাপে সাইন ইন করার জন্য ব্যবহার করা হয়েছিল। ডিভাইসে একাধিক অনুমোদিত অ্যাকাউন্ট স্বয়ংক্রিয় সাইন-ইন অক্ষম করে।
- ব্যবহারকারী তাদের পূর্ববর্তী সেশনের সময় অ্যাপ থেকে স্পষ্টভাবে সাইন আউট করেননি।
- ব্যবহারকারী তাদের Google অ্যাকাউন্ট সেটিংসে স্বয়ংক্রিয় সাইন-ইন অক্ষম করেননি।
একটি ননস সেট করুন (ঐচ্ছিক): উন্নত নিরাপত্তা সক্ষম করতে, সার্ভার-সাইড যাচাইকরণের জন্য একটি ননস সেট করুন। রিপ্লে আক্রমণ প্রতিরোধ করতে, আপনি
setNonce()দিয়ে সার্ভার-সাইড যাচাইকরণের জন্য একটি ননস অন্তর্ভুক্ত করতে পারেন। নিশ্চিত করুন যে আপনার সার্ভার-সাইড কোড যাচাই করে যে অনুরোধ এবং প্রতিক্রিয়া ননসগুলি অভিন্ন।ননস তৈরি করতে, নিম্নলিখিত ফাংশনের অনুরূপ একটি ফাংশন ব্যবহার করুন যা একটি নির্দিষ্ট দৈর্ঘ্যের একটি ক্রিপ্টোগ্রাফিকভাবে শক্তিশালী র্যান্ডম ননস তৈরি করে এবং
Base64ব্যবহার করে এটি এনকোড করে:
fun generateSecureRandomNonce(byteLength: Int = 32): String {
val randomBytes = ByteArray(byteLength)
SecureRandom().nextBytes(randomBytes)
return Base64.encodeToString(randomBytes, Base64.NO_WRAP or Base64.URL_SAFE or Base64.NO_PADDING)
}
সাইন-ইনের অনুরোধ করুন
getCredential পদ্ধতিতে কল করে ব্যবহারকারীর ডিভাইসে একটি অনুমোদিত অ্যাকাউন্ট আছে কিনা তা পরীক্ষা করুন:
val request: GetCredentialRequest = GetCredentialRequest.Builder()
.addCredentialOption(googleIdOption)
.build()
coroutineScope {
try {
val result = credentialManager.getCredential(
request = request,
context = activityContext,
)
handleSignIn(result)
} catch (e: GetCredentialException) {
// Handle failures
}
}
যদি কোনও অনুমোদিত অ্যাকাউন্ট উপলব্ধ না থাকে তবে সাইন-ইন অনুরোধটি কনফিগার করুন
যদি ডিভাইসে আপনার অ্যাপের জন্য কোনও অনুমোদিত ব্যবহারকারী না থাকে, তাহলে CredentialManager একটি NoCredentialException প্রদান করে। এই পরিস্থিতিতে, অনুমোদিত অ্যাকাউন্ট ফিল্টারটি অক্ষম করুন যাতে ব্যবহারকারী সাইন আপ করার জন্য অন্য অ্যাকাউন্ট ব্যবহার করতে পারেন।
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(false)
.setServerClientId(WEB_CLIENT_ID)
.setNonce(generateSecureRandomNonce())
.build()
এরপর, অনুমোদিত অ্যাকাউন্টগুলির জন্য যেভাবে সাইন-ইন করার অনুরোধ করেছিলেন, ঠিক সেভাবেই সাইন-ইন করার অনুরোধ করুন ।
বোতাম প্রবাহ তৈরি করুন
নিম্নলিখিত শর্তাবলীর জন্য ব্যবহারকারীরা যদি Google দিয়ে সাইন ইন করতে চান, তাহলে একটি বোতাম ব্যবহার করুন:
- ব্যবহারকারী ক্রেডেনশিয়াল ম্যানেজারের নিচের শিটের UI বাতিল করেছেন।
- ডিভাইসটিতে কোনও Google অ্যাকাউন্ট নেই।
- ডিভাইসে বিদ্যমান অ্যাকাউন্টগুলির পুনঃপ্রমাণীকরণ প্রয়োজন।
বোতাম UI তৈরি করুন
যদিও এটি একটি জেটপ্যাক কম্পোজ বোতাম দিয়ে করা যেতে পারে, আপনি সাইন ইন উইথ গুগল ব্র্যান্ডিং নির্দেশিকা পৃষ্ঠা থেকে একটি পূর্ব-অনুমোদিত ব্র্যান্ড আইকন ব্যবহার করতে পারেন।
সাইন-ইন ফ্লো তৈরি করুন
একটি গুগল আইডি টোকেন পুনরুদ্ধার করতে GetSignInWithGoogleOption দিয়ে একটি গুগল সাইন-ইন অনুরোধ তৈরি করুন।
val signInWithGoogleOption: GetSignInWithGoogleOption = GetSignInWithGoogleOption.Builder(
serverClientId = WEB_CLIENT_ID
).setNonce(generateSecureRandomNonce())
.build()
এরপর, নিচের শিট UI এর মতোই সাইন-ইন করার অনুরোধ করুন ।
নিচের শীট এবং বোতামের জন্য শেয়ার্ড সাইন ইন ফাংশন তৈরি করুন
সাইন-ইন পরিচালনা করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:
- CredentialManager এর
getCredential()ফাংশন ব্যবহার করুন। যদি প্রতিক্রিয়া সফল হয়, তাহলেCustomCredentialএক্সট্র্যাক্ট করুন, যাGoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIALধরণের হওয়া উচিত। GoogleIdTokenCredential.createFrom()পদ্ধতি ব্যবহার করে অবজেক্টটিকেGoogleIdTokenCredentialএ রূপান্তর করুন।আপনার নির্ভরযোগ্য পার্টি সার্ভারে শংসাপত্র যাচাই করুন ।
ভুলগুলো সঠিকভাবে মোকাবেলা করছেন কিনা তা নিশ্চিত করুন।
fun handleSign(result: GetCredentialResponse) {
// Handle the successfully returned credential.
val credential = result.credential
when (credential) {
is CustomCredential -> {
if (credential.type == GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL) {
try {
// Use googleIdTokenCredential and extract the ID for server-side validation.
val googleIdTokenCredential = GoogleIdTokenCredential
.createFrom(credential.data)
} catch (e: GoogleIdTokenParsingException) {
Log.e(TAG, "Received an invalid google id token response", e)
}
} else {
// Catch any unrecognized credential type here.
Log.e(TAG, "Unexpected type of credential")
}
}
else -> {
// Catch any unrecognized credential type here.
Log.e(TAG, "Unexpected type of credential")
}
}
}
ত্রুটিগুলি পরিচালনা করুন
আপনার কোডটি সম্ভাব্য সমস্ত ত্রুটির পরিস্থিতি পরিচালনা করে তা নিশ্চিত করতে সমস্যা সমাধানে তালিকাভুক্ত ত্রুটিগুলি পর্যালোচনা করুন।
সাইন-আউট পরিচালনা করুন
আপনার ব্যবহারকারীদের আপনার অ্যাপ থেকে সাইন আউট করার জন্য একটি ব্যবস্থা প্রদান করা গুরুত্বপূর্ণ। উদাহরণস্বরূপ, একজন ব্যবহারকারীর ডিভাইসে একাধিক Google অ্যাকাউন্ট থাকতে পারে এবং তিনি অন্য একটি অ্যাকাউন্ট থেকে সাইন ইন করার সিদ্ধান্ত নিতে পারেন। আপনি এটি আপনার, উদাহরণস্বরূপ, সেটিংস পৃষ্ঠায় প্রদান করতে পারেন।
একটি শংসাপত্র প্রদানকারী একটি সক্রিয় শংসাপত্র সেশন সংরক্ষণ করতে পারে এবং ভবিষ্যতের সাইন-ইন অনুরোধের জন্য সাইন-ইন বিকল্পগুলি সীমিত করতে এটি ব্যবহার করতে পারে। উদাহরণস্বরূপ, এটি অন্য যেকোনো উপলব্ধ শংসাপত্রের চেয়ে সক্রিয় শংসাপত্রকে অগ্রাধিকার দিতে পারে।
যখন কোনও ব্যবহারকারী আপনার অ্যাপ থেকে সাইন আউট করেন, তখন সমস্ত ক্রেডেনশিয়াল প্রোভাইডার থেকে বর্তমান ব্যবহারকারীর ক্রেডেনশিয়াল অবস্থা সাফ করার জন্য API clearCredentialState() পদ্ধতিটি কল করুন। এটি সমস্ত ক্রেডেনশিয়াল প্রোভাইডারকে অবহিত করবে যে প্রদত্ত অ্যাপের জন্য যেকোনো সংরক্ষিত ক্রেডেনশিয়াল সেশন সাফ করা উচিত, যা ব্যবহারকারীদের পরের বার সম্পূর্ণ সাইন-ইন বিকল্প প্রদান করবে।