FirebaseUI দিয়ে Android লগইন করুন

এই কোডল্যাবটি অ্যাডভান্সড অ্যান্ড্রয়েড ইন কোটলিন কোর্সের অংশ। আপনি যদি কোডল্যাবগুলি ক্রমানুসারে কাজ করেন তবে আপনি এই কোর্সের সর্বাধিক মূল্য পাবেন, তবে এটি বাধ্যতামূলক নয়৷ সমস্ত কোর্স কোডল্যাবগুলি কোটলিন কোডল্যাবস ল্যান্ডিং পৃষ্ঠায় অ্যাডভান্সড অ্যান্ড্রয়েডে তালিকাভুক্ত করা হয়েছে।

ভূমিকা

একটি অ্যান্ড্রয়েড অ্যাপ তৈরি করার সময়, আপনার ব্যবহারকারীদের জন্য লগইন সমর্থন করার মাধ্যমে অনেক সুবিধা আসতে পারে। ব্যবহারকারীদের আপনার অ্যাপের মধ্যে একটি পরিচয় তৈরি করার অনুমতি দিয়ে, আপনি তাদের অ্যাপের সাথে জড়িত থাকার আরও উপায় প্রদান করতে পারেন।

ব্যক্তিগতকৃত অ্যাকাউন্টের সাহায্যে, ব্যবহারকারীরা তাদের অ্যাপ-মধ্যস্থ অভিজ্ঞতা কাস্টমাইজ করতে পারে, অন্য ব্যবহারকারীদের সাথে জড়িত হতে পারে, এবং যদি তারা অন্য ডিভাইসে (যেমন ওয়েব বা একটি নতুন ফোন) অ্যাপ ব্যবহার করে থাকে তবে তাদের ডেটা বজায় রাখতে এবং স্থানান্তর করতে পারে।

এই কোডল্যাবে, আপনি FirebaseUI লাইব্রেরি ব্যবহার করে কীভাবে আপনার অ্যাপের জন্য লগইন সমর্থন করবেন তার প্রাথমিক বিষয়গুলি শিখবেন। অন্যান্য অনেক কিছুর মধ্যে, FirebaseUI লাইব্রেরি এমন ডেভেলপারদের জন্য সহজ করে তোলে যারা লগইন ফ্লো তৈরি করতে চায় এবং আপনার জন্য ব্যবহারকারীর অ্যাকাউন্ট পরিচালনার কাজ পরিচালনা করে।

আপনি ইতিমধ্যে কি জানা উচিত

  • কিভাবে একটি অ্যান্ড্রয়েড অ্যাপ তৈরি করতে হয় তার মৌলিক বিষয়
  • লাইভডেটা এবং ভিউ মডেল

আপনি কি শিখবেন

  • কিভাবে আপনার প্রকল্পে Firebase যোগ করবেন
  • কিভাবে আপনার অ্যান্ড্রয়েড অ্যাপের জন্য লগইন সমর্থন করবেন
  • আপনার অ্যাপের বর্তমান প্রমাণীকরণ স্থিতি কীভাবে পর্যবেক্ষণ করবেন
  • কীভাবে ব্যবহারকারীদের লগ আউট করবেন

আপনি কি করবেন

  • আপনার অ্যাপে Firebase সংহত করতে Firebase কনসোল ব্যবহার করুন।
  • লগইন বৈশিষ্ট্য বাস্তবায়ন.
  • লগ ইন করা ব্যবহারকারীদের জন্য অ্যাপে কাস্টমাইজেশন যোগ করুন।
  • লগ আউট ব্যবহারকারীদের বাস্তবায়ন.

LiveData এবং ViewModel সম্পর্কে আরও জানুন

এই কোডল্যাবে অ্যাপটির জন্য, আপনার LiveData এবং ViewModel সম্পর্কে প্রাথমিক ধারণার প্রয়োজন। আপনি যদি এই ধারণাগুলির একটি সংক্ষিপ্ত ওভারভিউ চান তবে LiveData এবং ViewModel ওভারভিউগুলি পড়ুন।

এই কোডল্যাবের অংশ হিসাবে আপনি যে মৌলিক Android বিষয়গুলির সম্মুখীন হবেন সেগুলি সম্পর্কে জানতে আপনি Kotlin কোর্সের সাথে Android Apps বিকাশের মাধ্যমেও যেতে পারেন৷ এই কোর্সটি Udacity কোর্স এবং কোডল্যাব কোর্স উভয় হিসাবেই উপলব্ধ।

এই কোডল্যাবে, আপনি একটি অ্যাপ তৈরি করবেন যা মজাদার Android তথ্য প্রদর্শন করে। আরও গুরুত্বপূর্ণ, অ্যাপটিতে একটি লগইন/লগআউট বোতাম থাকবে। যখন ব্যবহারকারী অ্যাপে লগ ইন করেন, তখন যেকোন প্রদর্শিত অ্যান্ড্রয়েড ফ্যাক্ট ব্যক্তিগতকরণের স্পর্শ যোগ করার উপায় হিসাবে ব্যবহারকারীর জন্য একটি অভিবাদন অন্তর্ভুক্ত করবে।

নমুনা অ্যাপ্লিকেশন ডাউনলোড করুন, আপনি যে কোনোটি করতে পারেন:

জিপ ডাউনলোড করুন

... অথবা নিম্নলিখিত কমান্ডটি ব্যবহার করে কমান্ড লাইন থেকে গিটহাব সংগ্রহস্থল ক্লোন করুন এবং রেপোর start শাখায় স্যুইচ করুন:

$  git clone https://github.com/googlecodelabs/android-kotlin-login

গুরুত্বপূর্ণ: যেহেতু আপনি ফায়ারবেস ব্যবহার করার জন্য অ্যাপটিকে সংহত করবেন, তাই স্টার্টার অ্যাপটি তৈরি এবং চালানোর জন্য কিছু সেটআপের প্রয়োজন। আপনি কোডল্যাবের পরবর্তী ধাপে এটি করবেন।

ধাপ 1: একটি ফায়ারবেস প্রকল্প তৈরি করুন

আপনার Android অ্যাপে Firebase যোগ করার আগে, আপনার Android অ্যাপে সংযোগ করার জন্য আপনাকে একটি Firebase প্রকল্প তৈরি করতে হবে।

  1. Firebase কনসোলে , প্রকল্প যোগ করুন ক্লিক করুন।
  2. একটি প্রকল্পের নাম নির্বাচন করুন বা লিখুন। আপনি আপনার প্রকল্পের নাম দিতে পারেন, তবে আপনি যে অ্যাপটি তৈরি করছেন তার সাথে প্রাসঙ্গিক একটি নাম বেছে নেওয়ার চেষ্টা করুন।
  3. অবিরত ক্লিক করুন.
  4. আপনি Google Analytics সেট আপ করা এড়িয়ে যেতে পারেন এবং এখনই নয় বিকল্পটি বেছে নিতে পারেন৷
  5. Firebase প্রকল্প সেট আপ শেষ করতে প্রকল্প তৈরি করুন ক্লিক করুন।

ধাপ 2: Firebase-এ আপনার অ্যাপ নিবন্ধন করুন

এখন আপনার কাছে একটি ফায়ারবেস প্রজেক্ট আছে, আপনি এতে আপনার অ্যান্ড্রয়েড অ্যাপ যোগ করতে পারেন।

  1. Firebase কনসোলের প্রজেক্ট ওভারভিউ পৃষ্ঠার কেন্দ্রে, সেটআপ ওয়ার্কফ্লো চালু করতে Android আইকনে ক্লিক করুন।
  2. অ্যান্ড্রয়েড প্যাকেজ নামের ক্ষেত্রে আপনার অ্যাপের অ্যাপ্লিকেশন আইডি লিখুন। আপনার অ্যাপটি যে আইডিটি ব্যবহার করছে তা আপনি প্রবেশ করান কিনা তা নিশ্চিত করুন, যেহেতু আপনি আপনার ফায়ারবেস প্রোজেক্টে আপনার অ্যাপটি নিবন্ধন করার পরে এই মানটি যোগ বা সংশোধন করতে পারবেন না।
  1. একটি অ্যাপ্লিকেশন আইডি কখনও কখনও একটি প্যাকেজ নাম হিসাবে উল্লেখ করা হয়।
  2. আপনার মডিউল (অ্যাপ-লেভেল) গ্রেডল ফাইলে এই অ্যাপ্লিকেশন আইডি খুঁজুন, সাধারণত app/build.gradle (উদাহরণ আইডি: com.yourcompany.yourproject )।
  3. ডিবাগ সাইনিং সার্টিফিকেট SHA-1 লিখুন। আপনি আপনার কমান্ড লাইন টার্মিনালে নিম্নলিখিত কমান্ডটি প্রবেশ করে এই কী তৈরি করতে পারেন।
keytool -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v -storepass android
  1. রেজিস্টার অ্যাপে ক্লিক করুন।

ধাপ 3: আপনার প্রকল্পে Firebase কনফিগারেশন ফাইল যোগ করুন

আপনার অ্যাপে Firebase Android কনফিগারেশন ফাইল যোগ করুন:

  1. আপনার Firebase অ্যান্ড্রয়েড কনফিগারেশন ফাইল ( google-services.json ) পেতে ডাউনলোড google-services.json এ ক্লিক করুন।
  • আপনি যে কোনো সময় আপনার Firebase Android কনফিগার ফাইলটি আবার ডাউনলোড করতে পারেন।
  • নিশ্চিত করুন যে কনফিগার ফাইলটি অতিরিক্ত অক্ষর সহ সংযুক্ত করা হয়নি এবং শুধুমাত্র google-services.json নামে পরিচিত হওয়া উচিত
  1. আপনার অ্যাপের মডিউল (অ্যাপ-লেভেল) ডিরেক্টরিতে আপনার কনফিগার ফাইলটি সরান।

ধাপ 4: Firebase পণ্য সক্ষম করতে আপনার Android প্রকল্প কনফিগার করুন

  1. আপনার অ্যাপে Firebase পণ্য সক্ষম করতে, আপনার Gradle ফাইলগুলিতে google-services প্লাগইন যোগ করুন।
  1. আপনার রুট-লেভেল (প্রজেক্ট-লেভেল) গ্রেডল ফাইলে ( build.gradle ), Google পরিষেবা প্লাগইন অন্তর্ভুক্ত করার জন্য নিয়ম যোগ করুন। আপনার কাছে Google এর Maven সংগ্রহস্থলও আছে কিনা তা পরীক্ষা করে দেখুন।

build.gradle

buildscript {

  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository
  }

  dependencies {
    // ...

    // Add the following line:
    classpath 'com.google.gms:google-services:4.3.0'  // Google Services plugin
  }
}

allprojects {
  // ...

  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository
    // ...
  }
}
  1. আপনার মডিউলে (অ্যাপ-লেভেল) গ্রেডল ফাইলে (সাধারণত app/build.gradle ) ফাইলের নীচে একটি লাইন যোগ করুন।

app/build.gradle

apply plugin: 'com.android.application'

android {
  // ...
}

// Add the following line to the bottom of the file:
apply plugin: 'com.google.gms.google-services'  // Google Play services Gradle plugin

ধাপ 4: Firebase নির্ভরতা যোগ করুন

এই কোডল্যাবে ফায়ারবেসকে সংহত করার প্রধান কারণ হল ব্যবহারকারীদের তৈরি এবং পরিচালনা করার একটি উপায়। এর জন্য, আপনাকে একটি Firebase লাইব্রেরি যোগ করতে হবে যা আপনাকে লগইন বাস্তবায়ন করতে সক্ষম করে।

  1. আপনার build.gradle (Module:app) ফাইলে নিম্নলিখিত নির্ভরতা যোগ করুন যাতে আপনি আপনার অ্যাপে SDK ব্যবহার করতে পারেন। firebase-auth SDK আপনার অ্যাপ্লিকেশনের প্রমাণীকৃত ব্যবহারকারীদের পরিচালনার অনুমতি দেয়।

app/build.gradle:

implementation 'com.firebaseui:firebase-ui-auth:5.0.0'
  1. সমস্ত নির্ভরতা আপনার অ্যাপে উপলব্ধ রয়েছে তা নিশ্চিত করতে গ্রেডল ফাইলগুলির সাথে আপনার প্রকল্প সিঙ্ক করুন। যদি অনুরোধ না করা হয়, তাহলে Android স্টুডিওতে বা টুলবার থেকে File > Sync Project with Gradle Files নির্বাচন করুন।

ধাপ 5: অ্যাপটি চালান এবং কোডটি পরীক্ষা করুন

  1. বিকাশ শুরু করার জন্য আপনার পরিবেশ সফলভাবে সেট আপ হয়েছে তা নিশ্চিত করতে একটি এমুলেটর বা শারীরিক ডিভাইসে অ্যাপটি চালান।

সফল হলে, আপনার হোম স্ক্রীনে একটি মজার অ্যান্ড্রয়েড ফ্যাক্ট এবং উপরের বাম কোণে একটি লগইন বোতাম প্রদর্শন করা উচিত। লগইন বোতামটি আলতো চাপলে এখনও কিছুই হয় না।

উচ্চ স্তরে, এটি একাধিক খণ্ড সহ একটি একক কার্যকলাপ অ্যাপ। আপনি নীচের স্ক্রিনে যে সমস্ত UI দেখতে পাচ্ছেন MainFragment রয়েছে৷ (আপনি একটি ফলোআপ কোডল্যাবে LoginFragment এবং SettingsFragment এর সাথে কাজ করবেন।)

  1. কোডের সাথে নিজেকে পরিচিত করুন। বিশেষ করে, বিজ্ঞপ্তি:
  • FirebaseUserLiveData হল সেই ক্লাসটি যা আপনি প্রয়োগ করবেন অ্যাপের সাথে যুক্ত বর্তমান Firebase ব্যবহারকারীকে পর্যবেক্ষণ করার জন্য। পরবর্তী ধাপে এই ব্যবহারকারীর তথ্য পেতে আপনি FirebaseAuth উদাহরণটিকে একটি এন্ট্রি পয়েন্ট হিসেবে ব্যবহার করবেন।
  • MainFragment LoginViewModel সাথে আবদ্ধ। LoginViewModel হল সেই ক্লাসটি যা আপনি প্রয়োগ করবেন যাতে FirebaseUserLiveData ব্যবহার করে একটি authenticationState স্টেট ভেরিয়েবল তৈরি করা যায়। এই authenticationState ভেরিয়েবল ব্যবহার করে, MainFragment তারপর সেই অনুযায়ী UI আপডেট করার মান পর্যবেক্ষণ করতে পারে।

এই ধাপে আপনি আপনার অ্যাপকে সমর্থন করতে চান এমন প্রমাণীকরণ পদ্ধতি সেট আপ করতে Firebase কনসোল ব্যবহার করবেন। এই কোডল্যাবের জন্য, আপনি ব্যবহারকারীদের তাদের দেওয়া একটি ইমেল ঠিকানা বা তাদের Google অ্যাকাউন্ট দিয়ে লগইন করতে দিতে ফোকাস করবেন।

  1. Firebase কনসোলে নেভিগেট করুন। (দ্রষ্টব্য: আপনি যদি এখনও Firebase যুক্ত কর্মপ্রবাহে থাকেন, তাহলে কনসোলে ফিরে যেতে উপরের বাম কোণে X- এ ক্লিক করুন।
  2. আপনি ইতিমধ্যে আপনার প্রকল্পে না থাকলে আপনার প্রকল্প নির্বাচন করুন।
  3. বাম হাতের নেভিগেশন খুলুন এবং বিকাশ > প্রমাণীকরণ নির্বাচন করুন।

  1. উপরের নেভিগেশন বারে সাইন-ইন পদ্ধতি ট্যাবটি নির্বাচন করুন।

  1. ইমেল/পাসওয়ার্ড সারিতে ক্লিক করুন।
  2. পপআপে, সক্ষম সুইচটি টগল করুন এবং সংরক্ষণ করুন ক্লিক করুন।
  3. একইভাবে, Google সারিতে ক্লিক করুন।
  4. সক্ষম সুইচটি টগল করুন, একটি প্রকল্প সমর্থন ইমেল লিখুন এবং সংরক্ষণ করুন ক্লিক করুন।

এই টাস্কে আপনি আপনার ব্যবহারকারীদের জন্য লগইন বৈশিষ্ট্য বাস্তবায়ন করবেন।

  1. MainFragment.kt খুলুন।
  2. MainFragment এর লেআউটে, auth_button লক্ষ্য করুন। এটি বর্তমানে কোনো ব্যবহারকারীর ইনপুট পরিচালনা করার জন্য সেট আপ করা হয়নি।
  3. onViewCreated(), launchSignInFlow() কল করতে auth_button এ একটি onClickListener যোগ করুন।

MainFragment.kt

binding.authButton.setOnClickListener { launchSignInFlow() }
  1. MainFragment.kt এ MainFragment.kt launchSignInFlow() পদ্ধতিটি সন্ধান করুন। এটিতে বর্তমানে একটি TODO রয়েছে।
  2. নিচে দেখানো হিসাবে launchSignInFlow() ফাংশনটি সম্পূর্ণ করুন।

MainFragment.kt

private fun launchSignInFlow() {
   // Give users the option to sign in / register with their email or Google account.
   // If users choose to register with their email,
   // they will need to create a password as well.
   val providers = arrayListOf(
       AuthUI.IdpConfig.EmailBuilder().build(), AuthUI.IdpConfig.GoogleBuilder().build()

       // This is where you can provide more ways for users to register and 
       // sign in.
   )

   // Create and launch sign-in intent.
   // We listen to the response of this activity with the
   // SIGN_IN_REQUEST_CODE 
   startActivityForResult(
       AuthUI.getInstance()
           .createSignInIntentBuilder()
           .setAvailableProviders(providers)
           .build(),
       MainFragment.SIGN_IN_REQUEST_CODE
   )
}

এটি ব্যবহারকারীদের তাদের ইমেল ঠিকানা বা Google অ্যাকাউন্ট দিয়ে নিবন্ধন এবং সাইন ইন করতে দেয়। ব্যবহারকারী যদি তাদের ইমেল ঠিকানা দিয়ে নিবন্ধন করতে পছন্দ করে, তাহলে তারা যে ইমেল এবং পাসওয়ার্ডের সমন্বয় তৈরি করে তা আপনার অ্যাপের জন্য অনন্য। তার মানে তারা আপনার অ্যাপে ইমেল ঠিকানা এবং পাসওয়ার্ডের সংমিশ্রণে লগইন করতে সক্ষম হবে, কিন্তু এর মানে এই নয় যে তারা একই শংসাপত্রের মাধ্যমে অন্য ফায়ারবেস সমর্থিত অ্যাপে লগইন করতে পারবে।

  1. MainFragment.kt এ, আপনি onActivityResult() পদ্ধতি প্রয়োগ করে সাইন-ইন প্রক্রিয়ার ফলাফল শুনতে পারেন, যেমনটি নিচে দেখানো হয়েছে। যেহেতু আপনি SIGN_IN_REQUEST_CODE দিয়ে সাইন ইন প্রক্রিয়া শুরু করেছেন, আপনি SIGN_IN_REQUEST_CODE কখন onActivityResult() এ ফেরত পাঠানো হবে তার জন্য ফিল্টার করে সাইন ইন প্রক্রিয়ার ফলাফলও শুনতে পারেন। ব্যবহারকারী সফলভাবে সাইন ইন করেছেন কিনা তা জানতে কিছু লগ বিবৃতি দিয়ে শুরু করুন।

MainFragment.kt

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
   super.onActivityResult(requestCode, resultCode, data)
   if (requestCode == SIGN_IN_REQUEST_CODE) {
       val response = IdpResponse.fromResultIntent(data)
       if (resultCode == Activity.RESULT_OK) {
           // User successfully signed in
           Log.i(TAG, "Successfully signed in user ${FirebaseAuth.getInstance().currentUser?.displayName}!")
       } else {
           // Sign in failed. If response is null the user canceled the
           // sign-in flow using the back button. Otherwise check
           // response.getError().getErrorCode() and handle the error.
           Log.i(TAG, "Sign in unsuccessful ${response?.error?.errorCode}")
       }
   }
}

আপনার অ্যাপটি এখন ব্যবহারকারীদের নিবন্ধন এবং লগইন পরিচালনা করতে সক্ষম হওয়া উচিত!

  1. অ্যাপটি চালান এবং যাচাই করুন যে লগইন বোতামে ট্যাপ করা লগইন স্ক্রীনটি নিয়ে আসে।
  2. আপনি এখন আপনার ইমেল ঠিকানা এবং একটি পাসওয়ার্ড দিয়ে বা আপনার Google অ্যাকাউন্ট দিয়ে সাইন ইন করতে পারেন৷
  3. আপনি লগইন করার পরে UI-তে কোন পরিবর্তন হবে না (আপনি পরবর্তী ধাপে UI আপডেট করার কাজটি বাস্তবায়ন করবেন), তবে সবকিছু সঠিকভাবে কাজ করলে, আপনি লগ মেসেজটি দেখতে পাবেন Successfully signed in user ${your name}! আপনি নিবন্ধন প্রবাহ মাধ্যমে যেতে পরে.
  4. আপনি Firebase কনসোলে যেতে পারেন এবং অ্যাপটিতে এখন একজন নিবন্ধিত ব্যবহারকারী আছে কিনা তা পরীক্ষা করতে বিকাশ > প্রমাণীকরণ > ব্যবহারকারীতে নেভিগেট করতে পারেন।
  5. মনে রাখবেন যে ব্যবহারকারীরা যখন আপনার অ্যাপের জন্য একটি অ্যাকাউন্ট তৈরি করেন, তখন এই অ্যাকাউন্টটি বিশেষভাবে শুধুমাত্র আপনার অ্যাপের সাথে সংযুক্ত থাকে এবং লগইন কার্যকারিতার জন্য Firebase ব্যবহার করে এমন কোনো অ্যাপের সাথে নয়।

এই টাস্কে, আপনি প্রমাণীকরণ অবস্থার উপর ভিত্তি করে UI আপডেট করা বাস্তবায়ন করবেন। যখন ব্যবহারকারী লগ ইন করেন, আপনি তাদের নাম প্রদর্শন করে তাদের হোম স্ক্রীনকে ব্যক্তিগতকৃত করতে পারেন। ব্যবহারকারী লগ ইন করার সময় আপনি লগইন বোতামটিকে লগআউট বোতাম হিসাবে আপডেট করবেন।

  1. FirebaseUserLiveData.kt ক্লাসটি খুলুন, যা ইতিমধ্যে আপনার জন্য তৈরি করা হয়েছে। আপনাকে প্রথমে যা করতে হবে তা হল অ্যাপের অন্যান্য ক্লাসের জন্য একটি উপায় প্রদান করা যাতে একজন ব্যবহারকারী কখন লগ ইন বা লগ আউট করেন। যাইহোক, ক্লাসটি এখনও কিছু করে না কারণ LiveData মান আপডেট করা হচ্ছে না।
  2. যেহেতু আপনি FirebaseAuth লাইব্রেরি ব্যবহার করছেন, আপনি FirebaseUser.AuthStateListener কলব্যাকের মাধ্যমে লগইন করা ব্যবহারকারীর পরিবর্তন শুনতে পারেন যা FirebaseUI লাইব্রেরির অংশ হিসেবে আপনার জন্য প্রয়োগ করা হয়েছে। যখনই একজন ব্যবহারকারী আপনার অ্যাপ থেকে লগ ইন বা আউট করেন তখন এই কলব্যাকটি ট্রিগার হয়৷
  3. লক্ষ্য করুন যে FirebaseUserLiveData.kt authStateListener ভেরিয়েবলকে সংজ্ঞায়িত করে। আপনি LiveData এর মান সংরক্ষণ করতে এই ভেরিয়েবলটি ব্যবহার করবেন। authStateListener ভেরিয়েবলটি তৈরি করা হয়েছিল যাতে আপনি আপনার আবেদনের অবস্থার উপর ভিত্তি করে auth স্টেটে পরিবর্তনগুলি সঠিকভাবে শুরু করতে এবং শোনা বন্ধ করতে পারেন৷ উদাহরণস্বরূপ, যদি ব্যবহারকারী অ্যাপটিকে ব্যাকগ্রাউন্ডে রাখে, তাহলে সম্ভাব্য মেমরি ফাঁস প্রতিরোধ করার জন্য অ্যাপটির প্রমাণীকরণ অবস্থার পরিবর্তনগুলি শোনা বন্ধ করা উচিত।
  4. authStateListener আপডেট করুন যাতে আপনার FirebaseUserLiveData এর মান বর্তমান Firebase ব্যবহারকারীর সাথে মিলে যায়।

FirebaseUserLiveData.kt

private val authStateListener = FirebaseAuth.AuthStateListener { firebaseAuth ->
   value = firebaseAuth.currentUser
}
  1. LoginViewModel.kt খুলুন।
  2. LoginViewModel.kt এ, আপনি যে FirebaseUserLiveData অবজেক্টটি এইমাত্র প্রয়োগ করেছেন তার উপর ভিত্তি করে একটি authenticationState স্টেট ভেরিয়েবল তৈরি করুন। এই authenticationState ভেরিয়েবল তৈরি করে, অন্যান্য ক্লাস এখন LoginViewModel এর মাধ্যমে ব্যবহারকারী লগ ইন করেছে কি না তা জিজ্ঞাসা করতে পারে।

LoginViewModel.kt

val authenticationState = FirebaseUserLiveData().map { user ->
   if (user != null) {
       AuthenticationState.AUTHENTICATED
   } else {
       AuthenticationState.UNAUTHENTICATED
   }
}
  1. MainFragment.kt.
  2. MainFragment.kt এর observeAuthenticationState() এ আপনি LoginViewModel এ যোগ করা authenticationState ভেরিয়েবল ব্যবহার করতে পারেন এবং সেই অনুযায়ী UI পরিবর্তন করতে পারেন। যদি কোনো লগ-ইন ব্যবহারকারী থাকে, authButton এর Logout প্রদর্শন করা উচিত।

MainFragment.kt

private fun observeAuthenticationState() {
   val factToDisplay = viewModel.getFactToDisplay(requireContext())

   viewModel.authenticationState.observe(viewLifecycleOwner, Observer { authenticationState ->
       when (authenticationState) {
           LoginViewModel.AuthenticationState.AUTHENTICATED -> {
               binding.authButton.text = getString(R.string.logout_button_text)
               binding.authButton.setOnClickListener {
                   // TODO implement logging out user in next step
               }

                // TODO 2. If the user is logged in, 
                 // you can customize the welcome message they see by
                 // utilizing the getFactWithPersonalization() function provided

           }
           else -> {
               // TODO 3. Lastly, if there is no logged-in user, 
                // auth_button should display Login and
                //  launch the sign in screen when clicked.
           }
       }
   })
}
  1. ব্যবহারকারী লগ ইন করা থাকলে, আপনি মেইনফ্রেগমেন্টে দেওয়া MainFragment getFactWithPersonalization() ফাংশনটি ব্যবহার করে তারা যে স্বাগত বার্তাটি দেখেন তা কাস্টমাইজ করতে পারেন।

MainFragment.kt

binding.welcomeText.text = getFactWithPersonalization(factToDisplay)
  1. সবশেষে, যদি কোনো লগ-ইন ব্যবহারকারী না থাকে (যখন authenticationState LoginViewModel.AuthenticationState.AUTHENTICATED ছাড়া অন্য কিছু হয়), auth_button লগইন প্রদর্শন করবে এবং ক্লিক করার সময় সাইন-ইন স্ক্রীন চালু করবে। এছাড়াও প্রদর্শিত বার্তার কোনো ব্যক্তিগতকরণ করা উচিত নয়।

MainFragment.kt

binding.authButton.text = getString(R.string.login_button_text)
binding.authButton.setOnClickListener { launchSignInFlow() }
binding.welcomeText.text = factToDisplay

সমস্ত পদক্ষেপ সম্পূর্ণ হওয়ার সাথে সাথে, আপনার চূড়ান্ত observeAuthenticationState() পদ্ধতিটি নীচের কোডের মতো দেখতে হবে।

MainFragment.kt

private fun observeAuthenticationState() {
   val factToDisplay = viewModel.getFactToDisplay(requireContext())

   viewModel.authenticationState.observe(viewLifecycleOwner, Observer { authenticationState ->
        // TODO 1. Use the authenticationState variable you just added 
         // in LoginViewModel and change the UI accordingly.
       when (authenticationState) {
            // TODO 2.  If the user is logged in, 
             // you can customize the welcome message they see by
             // utilizing the getFactWithPersonalization() function provided
           LoginViewModel.AuthenticationState.AUTHENTICATED -> {
               binding.welcomeText.text = getFactWithPersonalization(factToDisplay)
               binding.authButton.text = getString(R.string.logout_button_text)
               binding.authButton.setOnClickListener {
                   // TODO implement logging out user in next step
               }
           }
           else -> {
                // TODO 3. Lastly, if there is no logged-in user, 
                 // auth_button should display Login and
                 // launch the sign in screen when clicked.
               binding.welcomeText.text = factToDisplay

               binding.authButton.text = getString(R.string.login_button_text)
               binding.authButton.setOnClickListener {
                   launchSignInFlow()
               }
           }
       }
   })
}
  1. আপনার অ্যাপ চালান। ব্যবহারকারী লগ ইন করেছেন কি না সে অনুযায়ী UI আপডেট হওয়া উচিত। যদি সবকিছু সঠিকভাবে কাজ করে, এবং আপনি লগ ইন করে থাকেন, তাহলে হোম স্ক্রীনটি এখন একটি অ্যান্ড্রয়েড তথ্য প্রদর্শনের পাশাপাশি আপনার নাম দ্বারা আপনাকে শুভেচ্ছা জানাবে। লগইন বোতামটিও এখন লগআউট প্রদর্শন করবে।

এই কাজটিতে, আপনি লগআউট বৈশিষ্ট্যটি বাস্তবায়ন করবেন।

যেহেতু অ্যাপটি ব্যবহারকারীদের লগ ইন করতে দেয়, তাই এটি তাদের লগ আউট করার একটি উপায়ও প্রদান করে। কোডের একটি লাইন দিয়ে একজন ব্যবহারকারীকে কীভাবে লগ আউট করতে হয় তার একটি উদাহরণ এখানে দেওয়া হল:

AuthUI.getInstance().signOut(requireContext())
  1. MainFragment.kt খুলুন।
  2. MainFragment.kt এর observeAuthenticationState() এ, লগআউট লজিক যোগ করুন যাতে auth_button সঠিকভাবে কাজ করে যখন কোনো লগইন ব্যবহারকারী থাকে। পদ্ধতির চূড়ান্ত ফলাফল নীচের কোড মত দেখায়.

MainFragment.kt

private fun observeAuthenticationState() {
   val factToDisplay = viewModel.getFactToDisplay(requireContext())

   viewModel.authenticationState.observe(viewLifecycleOwner, Observer { authenticationState ->
       when (authenticationState) {
           LoginViewModel.AuthenticationState.AUTHENTICATED -> {
               binding.welcomeText.text = getFactWithPersonalization(factToDisplay)

               binding.authButton.text = getString(R.string.logout_button_text)
               binding.authButton.setOnClickListener {
                   AuthUI.getInstance().signOut(requireContext())
               }
           }
           else -> {
               binding.welcomeText.text = factToDisplay

               binding.authButton.text = getString(R.string.login_button_text)
               binding.authButton.setOnClickListener {
                   launchSignInFlow()
               }
           }
       }
   })
}
  1. অ্যাপটি চালান।
  2. লগআউট বোতামে আলতো চাপুন এবং যাচাই করুন যে ব্যবহারকারী লগ আউট হয়েছে এবং বোতামের অবস্থা লগইন এ পরিবর্তিত হয়।

আপনি এখানে https://github.com/googlecodelabs/android-kotlin-login সম্পূর্ণ অ্যাপটির চূড়ান্ত সংস্করণ খুঁজে পেতে পারেন।

এই কোডল্যাবে, আপনি শিখেছেন:

  • আপনার গ্রেডল ফাইলে প্রয়োজনীয় নির্ভরতা যোগ করে এবং ফায়ারবেস কনসোলে প্রোজেক্ট সেট আপ করার মাধ্যমে কীভাবে আপনার প্রোজেক্টে Firebase যোগ করবেন।
  • FirebaseUI লাইব্রেরি ব্যবহার করে কীভাবে আপনার অ্যাপের জন্য লগইন প্রয়োগ করবেন এবং আপনি কীভাবে আপনার ব্যবহারকারীদের লগইন করার অনুমতি দিতে চান তা উল্লেখ করুন। মনে রাখবেন যে ব্যবহারকারী আপনার অ্যাপে যে কোনো অ্যাকাউন্ট তৈরি করে তা শুধুমাত্র আপনার অ্যাপের জন্য নির্দিষ্ট, এবং লগইন কার্যকারিতার জন্য Firebase ব্যবহার করে এমন সমস্ত অ্যাপের সাথে শেয়ার করা হয় না।
  • কিভাবে LiveData ব্যবহার করে আপনার অ্যাপের বর্তমান প্রমাণীকরণ স্থিতি পর্যবেক্ষণ করবেন।
  • কীভাবে ব্যবহারকারীদের লগ আউট করবেন।

এই কোডল্যাবে একটি অ্যান্ড্রয়েড অ্যাপের জন্য লগইন সমর্থন করার মূল বিষয়গুলি কভার করা হয়েছে৷

এই কোডল্যাবে আপনি ব্যবহারকারীদের তাদের ইমেল ঠিকানা দিয়ে নিবন্ধন এবং সাইন ইন করার অনুমতি দিয়েছেন। যাইহোক, FirebaseUI লাইব্রেরির সাথে আপনি ফোন নম্বর দিয়ে সাইন ইন করার মতো অন্যান্য প্রমাণীকরণ পদ্ধতিগুলিকেও সমর্থন করতে পারেন। FirebaseUI লাইব্রেরির ক্ষমতা এবং এটি প্রদান করে অন্যান্য কার্যকারিতা কীভাবে ব্যবহার করতে হয় সে সম্পর্কে আরও জানতে, নিম্নলিখিত সংস্থানগুলি দেখুন:

লগইন সম্পর্কে সর্বোত্তম অনুশীলন সম্পর্কে আরও জানতে, এই অন্যান্য সংস্থানগুলি দেখুন:

কোডল্যাব:

অ্যান্ড্রয়েড বিকাশকারী ডকুমেন্টেশন:

ভিডিও:

এই কোর্সে অন্যান্য কোডল্যাবগুলির লিঙ্কগুলির জন্য, কোটলিন কোডল্যাবগুলির ল্যান্ডিং পৃষ্ঠাতে উন্নত Android দেখুন৷