অ্যাকাউন্ট লিঙ্কিং সরাসরি আপনার মোবাইল অ্যাপের মধ্যে সম্পন্ন করা যেতে পারে, আপনার ব্যবহারকারীদের তাদের Google অ্যাকাউন্টের সাথে আপনার পরিষেবাতে তাদের অ্যাকাউন্ট লিঙ্ক করার অনুমতি দেয়। প্রতিষ্ঠিত লিঙ্কটি Google-কে সেই ডেটাতে অ্যাক্সেস দেয় যা ব্যবহারকারী শেয়ার করতে সম্মত হন।
এই পদ্ধতির সাহায্যে অ্যাসিস্ট্যান্ট কথোপকথনের পরিবর্তে আপনার অ্যাপের পরিচিত প্রেক্ষাপটে ব্যবহারকারীদের আকৃষ্ট করে অ্যাকাউন্ট লিঙ্ক করার পারফরম্যান্স উন্নত করে। এটি ব্যবহারকারীর অনবোর্ডিং, সেটিংস এবং অন্যান্য অ্যাপ সারফেসে একত্রিত করা যেতে পারে, যা আপনার Google অ্যাসিস্ট্যান্ট অ্যাকশনের আবিষ্কার এবং ব্যস্ততার সুযোগ তৈরি করে। উদাহরণস্বরূপ, লিঙ্ক করার পরে আপনি ব্যবহারকারীকে সরাসরি আপনার অ্যাকশনে নিয়ে যাওয়ার প্রস্তাব দিতে পারেন।
ব্যবহারকারীদের জন্য সুবিধার মধ্যে রয়েছে:
- ব্যবহারকারীরা আপনার অ্যাপে অ্যাকাউন্ট লিঙ্ক করার প্রক্রিয়া শুরু করতে এবং সম্পূর্ণ করতে পারে, এমন একটি পরিবেশ যার সাথে তারা ইতিমধ্যে পরিচিত।
- ব্যবহারকারীদের লগইন শংসাপত্রের প্রয়োজন নেই কারণ তারা ইতিমধ্যেই ডিভাইসে এবং আপনার মোবাইল অ্যাপে প্রমাণীকৃত হয়েছে।
বিকাশকারীদের জন্য সুবিধার মধ্যে রয়েছে:
- আপনার মোবাইল অ্যাপে কোথায় প্রচার করতে হবে এবং অ্যাকাউন্ট লিঙ্কিং শুরু করতে হবে তা নিয়ন্ত্রণ করুন, উদাহরণস্বরূপ, ব্যবহারকারীর সেটিংসে, ইন্টারস্টিশিয়ালে বা কোনও ব্যবহারকারী আপনার মোবাইল অ্যাপে সাইন ইন করার পরে। অ্যাকাউন্ট লিঙ্কিং শুরু করার জন্য একাধিক এন্ট্রি পয়েন্ট যোগ করা অ্যাকাউন্ট লিঙ্কিংকে আরও আবিষ্কারযোগ্য করে তুলতে সাহায্য করে, যার ফলে যুক্ত থাকা এবং লিঙ্ক করা অ্যাকাউন্টের সংখ্যা বৃদ্ধি পায়।
- ব্যবহারকারীরা স্ট্যান্ডার্ড ওয়েব-ভিত্তিক OAuth প্রবাহের চেয়ে কম ধাপে লিঙ্ক করার প্রক্রিয়া সম্পূর্ণ করতে সক্ষম হওয়ায় রূপান্তর হার বৃদ্ধি করুন।
- আপনার প্ল্যাটফর্ম (Android) থেকে লিঙ্ক বাস্তবায়নের জন্য কম প্রকৌশলী প্রচেষ্টা প্রয়োজন কারণ এই প্রবাহটি আপনার বিদ্যমান OAuth2.0 বাস্তবায়নের সুবিধা দেয়, ধরে নিচ্ছি যে আপনি ইতিমধ্যে একটি বাস্তবায়ন করেছেন।
- ড্রপ-অফ রেট হ্রাস করা হয়েছে কারণ ব্যবহারকারীদের তাদের লগইন শংসাপত্রগুলি পুনরায় প্রবেশ করতে হবে না এবং কম ধাপে প্রক্রিয়াটি সম্পূর্ণ করতে সক্ষম। ড্রপ-অফ রেট 80% এর মতো বেশি হতে পারে যেখানে ব্যবহারকারীদের তাদের সাইন-ইন শংসাপত্রগুলি প্রত্যাহার করতে হবে এবং প্রবেশ করতে হবে৷
এটি কীভাবে কাজ করে
আপনার প্ল্যাটফর্ম থেকে লিঙ্ক করার কাজটি নিম্নলিখিত ধাপগুলিতে সম্পন্ন করা হয়:
- ব্যবহারকারী আপনার মোবাইল অ্যাপে একটি লিঙ্কিং ট্রিগার ক্লিক বা টগল করবেন।
- ব্যবহারকারী লিঙ্ক করার জন্য গুগল অ্যাকাউন্টটি নির্বাচন করেন।
- ব্যবহারকারী লিঙ্ক করার জন্য ডিভাইসে থাকা একটি বিদ্যমান গুগল অ্যাকাউন্ট নির্বাচন করেন, অথবা একটি নতুন অ্যাকাউন্ট দিয়ে সাইন ইন করেন।
- ব্যবহারকারীকে গুগল দ্বারা আয়োজিত একটি সম্মতি স্ক্রিন দেখানো হয় এবং লিঙ্কিং প্রক্রিয়াটি চালিয়ে যেতে তাকে সম্মতি দিতে হয় অথবা বন্ধ করতে বাতিল করতে হয়।
- ব্যবহারকারীকে আপনার সম্মতি স্ক্রিন দেখানো হয় এবং লিঙ্কিং প্রক্রিয়াটি চালিয়ে যেতে তাকে সম্মতি দিতে হয় অথবা বন্ধ করতে বাতিল করতে হয়।
- আপনার পরিষেবাতে থাকা ব্যবহারকারীর অ্যাকাউন্ট এবং তার গুগল অ্যাকাউন্টের মধ্যে সংযোগটি স্থাপিত হয়।

চিত্র ১। আপনার প্ল্যাটফর্ম ফ্লো থেকে লিঙ্ক
প্রয়োজনীয়তা
আপনার প্ল্যাটফর্ম থেকে লিঙ্ক বাস্তবায়ন করতে, আপনার নিম্নলিখিত জিনিসগুলির প্রয়োজন হবে:
- একটি অ্যান্ড্রয়েড অ্যাপ।
- এমন একটি OAuth 2.0 সার্ভারের মালিকানা, পরিচালনা এবং রক্ষণাবেক্ষণ করা যা OAuth 2.0 অনুমোদন কোড প্রবাহকে সমর্থন করে।
সেটআপ
নিচের ধাপগুলো অনুসরণ করার আগে, আপনাকে অবশ্যই অ্যাকাউন্ট লিঙ্কিং নিবন্ধন প্রক্রিয়াটি সম্পন্ন করতে হবে।
আপনার উন্নয়ন পরিবেশ সেটআপ করুন
আপনার ডেভেলপমেন্ট হোস্টে সর্বশেষ গুগল প্লে পরিষেবাগুলি পান:
SDK Tools-এর অধীনে Google Play services খুঁজুন।
যদি এই প্যাকেজগুলির স্ট্যাটাস 'Installed' না হয়, তাহলে উভয়টিই নির্বাচন করুন এবং 'Install Packages'-এ ক্লিক করুন।
আপনার অ্যাপ কনফিগার করুন
আপনার প্রোজেক্ট-স্তরের
build.gradleফাইলে,buildscriptএবংallprojectsউভয় সেকশনেই গুগলের মেভেন রিপোজিটরি অন্তর্ভুক্ত করুন।buildscript { repositories { google() } } allprojects { repositories { google() } }আপনার মডিউলের অ্যাপ-লেভেল গ্রেডল ফাইলে (যা সাধারণত
app/build.gradleহয়) “Link with Google” API-এর জন্য প্রয়োজনীয় ডিপেন্ডেন্সিগুলো যোগ করুন।dependencies { implementation 'com.google.android.gms:play-services-auth:21.5.1' }
আপনার প্ল্যাটফর্ম থেকে লিঙ্কের জন্য সমর্থন যোগ করুন
আপনার প্ল্যাটফর্ম ফ্লো থেকে লিঙ্কটি পাঠানোর ফলে, আপনার পরিষেবা দ্বারা প্রদত্ত একটি অ্যাক্সেস টোকেন গুগলে সংরক্ষিত হবে। ব্যবহারকারীকে টোকেনটি ফেরত দেওয়ার আগে অবশ্যই সম্মতি নিতে হবে।
ব্যবহারকারীর সম্মতি নিতে এবং গুগল প্লে সার্ভিসেস এসডিকে-এর মাধ্যমে একটি অথ কোড টোকেন ফেরত পেতে নিচের ধাপগুলো অনুসরণ করুন।
একটি পেন্ডিংইন্টেন্ট তৈরি করুন যা আপনার সম্মতি কার্যক্রম চালু করতে পারে - এই সম্মতি প্লে সার্ভিসেস এপিআই (Play Services API) দ্বারা চালু করা হয়। এপিআই কল করার সময় আপনাকে একটি
PendingIntentপ্রদান করতে হবে (স্পষ্টতার জন্য এটিকেconsentPendingIntent) হিসাবে উল্লেখ করা হবে)।কোটলিন
// Build a PendingIntent that can launch the consent activity val consentPendingIntent = buildConsentPendingIntent()জাভা
// Build a PendingIntent that can launch your consent activity PendingIntent consentPendingIntent = buildConsentPendingIntent();সম্মতির অভিপ্রায় পরিচালনা করার জন্য সংশ্লিষ্ট অ্যাক্টিভিটি তৈরি করুন।
কোটলিন
class ConsentActivity : AppCompatActivity private fun onConsentAccepted() { // Obtain a token (for simplicity, we’ll ignore the async nature // of the following call) val token = getToken() val intent = Intent() .putExtra(SaveAccountLinkingTokenRequest.EXTRA_TOKEN, token) setResult(Activity.RESULT_OK, intent) finish() } private fun onConsentRejectedOrCanceled() { setResult(Activity.RESULT_CANCELED) finish() }জাভা
public class ConsentActivity extends AppCompatActivity { ... private void onConsentAccepted() { // Obtain a token (for simplicity, we’ll ignore the async nature of // the following call String token = getToken(); Intent intent = new Intent(); intent.putExtra(SaveAccountLinkingTokenRequest.EXTRA_TOKEN, token); setResult(Activity.RESULT_OK, intent); finish(); } private void onConsentRejectedOrCanceled() { setResult(Activity.RESULT_CANCELED, null); finish(); } }আমরা ধরে নিই যে, ব্যবহারকারী আপনার সম্মতি গ্রহণ করলে অথবা প্রত্যাখ্যান/বাতিল করলে যথাক্রমে
onConsentAccpeted()এবংonConsentRejectedOrCanceled()মেথডগুলো কল করা হয়।টোকেনটি সংরক্ষণের জন্য একটি অনুরোধ তৈরি করুন এবং অন্যান্য কনফিগারেশন প্যারামিটারের সাথে, উপরে ধাপ ১-এ তৈরি করা
PendingIntentপাস করুন।কোটলিন
// Create an ActivityResultLauncher which registers a callback for the // Activity result contract val activityResultLauncher = registerForActivityResult( ActivityResultContracts.StartIntentSenderForResult()) { result -> if (result.resultCode == RESULT_OK) { // Successfully finished the flow and saved the token } else { // Flow failed, for example the user may have canceled the flow } } // Build token save request val request = SaveAccountLinkingTokenRequest.builder() .setTokenType(SaveAccountLinkingTokenRequest.TOKEN_TYPE_AUTH_CODE) .setConsentPendingIntent(consentPendingIntent) .setServiceId("service-id-of-and-defined-by-developer") //Set the scopes that the token is valid for on your platform .setScopes(scopes) .build() // Launch consent activity and retrieve token Identity.getCredentialSavingClient(this) .saveAccountLinkingToken(request) .addOnSuccessListener( saveAccountLinkingTokenResult -> { if (saveAccountLinkingTokenResult.hasResolution()) { val pendingIntent = saveAccountLinkingTokenResult .getPendingIntent() val intentSenderRequest = IntentSenderRequest .Builder(pendingIntent).build() activityResultLauncher.launch(intentSenderRequest) } else { // This should not happen, let’s log this Log.e(TAG, "Failed to save token"); } }) .addOnFailureListener(e -> Log.e(TAG, “Failed to save token”, e))জাভা
// Create an ActivityResultLauncher which registers a callback for the // Activity result contract ActivityResultLauncher<IntentSenderRequest> activityResultLauncher = registerForActivityResult(new ActivityResultContracts .StartIntentSenderForResult(), result -> { if (result.getResultCode() == RESULT_OK) { // Successfully finished the flow and saved the token } else { // Flow failed, for example the user may have canceled the flow } }); // Build token save request SaveAccountLinkingTokenRequest request = SaveAccountLinkingTokenRequest.builder() .setTokenType( SaveAccountLinkingTokenRequest.TOKEN_TYPE_AUTH_CODE) .setConsentPendingIntent(consentPendingIntent) .setServiceId("service-id-of-and-defined-by-developer") //Set the scopes that the token is valid for on your platform .setScopes(scopes) .build(); // Launch consent activity and retrieve token Identity.getCredentialSavingClient(this) .saveAccountLinkingToken(request) .addOnSuccessListener( saveAccountLinkingTokenResult -> { if (saveAccountLinkingTokenResult.hasResolution()) { // Launch the resolution intent PendingIntent pendingIntent = saveAccountLinkingTokenResult.getPendingIntent(); IntentSenderRequest intentSenderRequest = new IntentSenderRequest.Builder(pendingIntent).build(); activityResultLauncher.launch(intentSenderRequest); } else { // This should not happen, let’s log this Log.e(TAG, "Failed to save token"); } }) .addOnFailureListener(e -> Log.e(TAG, "Failed to save token", e)); ```
উপরোক্ত ধাপগুলো ব্যবহারকারীর কাছে সম্মতি চায় এবং গুগলকে একটি অনুমোদন কোড ফেরত পাঠায়।
সর্বোত্তম অনুশীলন
আপনার অ্যাপে একটি বাটন, টগল বা অনুরূপ কোনো ভিজ্যুয়াল উপাদানের মাধ্যমে ব্যবহারকারীকে লিঙ্কের অবস্থা জানানো উচিত।

চিত্র ১। লিঙ্ক স্থিতির একটি নমুনা চিত্র।
সফলভাবে লিঙ্ক সম্পন্ন হওয়ার পর ব্যবহারকারীকে জানানো উচিত, যেমন—একটি টোস্ট প্রদর্শন করা, টগল অবস্থার পরিবর্তন ঘটানো অথবা ব্যবহারকারীকে একটি পৃথক লিঙ্ক সফলতার পৃষ্ঠায় পুনঃনির্দেশিত করা।
আপনার উচিত অ্যাপের মধ্যে থাকা ব্যবহারকারীদের অ্যাকাউন্ট লিঙ্ক করতে উৎসাহিত করার বিষয়টি বিবেচনা করা, এবং এক্ষেত্রে এমন জোরালো ইঙ্গিত দেওয়া আদর্শ হবে যে লিঙ্ক করলে সেই ব্যবহারকারীরা উপকৃত হবেন।
সফলভাবে লিঙ্ক করার পর, লিঙ্ক করা অ্যাকাউন্টটি দিয়ে কী করতে হবে তার একটি উদাহরণ ব্যবহারকারীদের দেওয়া উচিত; যেমন, আপনি যদি একটি মিউজিক স্ট্রিমিং পরিষেবা লিঙ্ক করে থাকেন, তাহলে আপনার গুগল অ্যাসিস্ট্যান্টকে গান চালাতে বলুন।
ব্যবহারকারীদের তাদের লিঙ্ক করা অ্যাকাউন্টগুলো পরিচালনা করার সুযোগ দিন, যার মধ্যে সেগুলো আনলিঙ্ক করার বিকল্পও থাকবে। তাদেরকে তাদের গুগল লিঙ্কড অ্যাকাউন্টস ম্যানেজমেন্ট পেজে, অর্থাৎ https://myaccount.google.com/accountlinking-এ নির্দেশ করুন।