লগইন সহ অ্যান্ড্রয়েড শর্তসাপেক্ষ নেভিগেশন

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


এই কোডল্যাবটি FirebaseUI এর সাথে Android-এ ইমপ্লিমেন্টিং লগইন তৈরি করে। যদিও আপনি এই কোডল্যাবের জন্য স্টার্টার কোড ডাউনলোড করতে পারেন যদি আপনি পূর্ববর্তী কোডল্যাবটি না করে থাকেন, তবে প্রথমে FirebaseUI কোডল্যাব দিয়ে Android-এ ইমপ্লিমেন্টিং লগইন সম্পূর্ণ করা আপনার জন্য উপকারী মনে হতে পারে।

ভূমিকা

যদি আপনার অ্যাপ লগইন সমর্থন করে, তবে এটি শুধুমাত্র লগ ইন করা ব্যবহারকারীদের জন্য অ্যাপের অংশ সংরক্ষণ করার জন্য একটি সাধারণ ব্যবহারের ক্ষেত্রে। উদাহরণস্বরূপ, আপনি লগ ইন করা ব্যবহারকারীদের জন্য আপনার অ্যাপের সেটিংস স্ক্রীন সংরক্ষণ করতে চাইতে পারেন।

এই ধরনের ক্ষেত্রে, আপনি ব্যবহারকারীদের তাদের প্রমাণীকরণ অবস্থার উপর ভিত্তি করে উপযুক্ত স্ক্রিনে আনতে শর্তসাপেক্ষ নেভিগেশন ব্যবহার করতে পারেন।

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

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

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

  • ব্যবহারকারীরা লগ ইন করেছেন কি না তার উপর ভিত্তি করে কীভাবে আপনার অ্যাপের উপযুক্ত স্ক্রিনে নেভিগেট করবেন।

আপনি কি করবেন

  • সফলভাবে লগ ইন করার পর সঠিকভাবে সঠিক স্ক্রিনে নেভিগেট করা ব্যবহারকারীদের পরিচালনা করুন।
  • ব্যবহারকারীরা লগইন না করলে সেটিংস স্ক্রীন অ্যাক্সেস করতে বাধা দিন এবং পরিবর্তে তাদের লগইন স্ক্রিনে পুনঃনির্দেশ করুন।

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

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

এই কোডল্যাবটি FirebaseUI এর সাথে Android-এ ইমপ্লিমেন্টিং লগইন তৈরি করে। যদিও আপনি এই কোডল্যাবের জন্য স্টার্টার কোড ডাউনলোড করতে পারেন যদি আপনি পূর্ববর্তী কোডল্যাবটি না করে থাকেন, তবে প্রথমে FirebaseUI কোডল্যাব দিয়ে Android-এ ইমপ্লিমেন্টিং লগইন সম্পূর্ণ করা আপনার জন্য উপকারী মনে হতে পারে।

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

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


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

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

একবার আপনি অ্যান্ড্রয়েড স্টুডিওতে প্রকল্পটি লোড হয়ে গেলে:

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

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


স্টার্টার অ্যাপের বর্তমান বৈশিষ্ট্য:

  • ব্যবহারকারী লগ ইন না করলে, লগইন বোতামে ট্যাপ করা লগইন প্রবাহ শুরু করে এবং ব্যবহারকারীকে একটি ইমেল ঠিকানা বা Google অ্যাকাউন্ট দিয়ে লগ ইন করতে দেয়।
  • ব্যবহারকারী লগ ইন করলে, বোতামটি লগআউট বোতামে পরিবর্তিত হয় যা ব্যবহারকারীকে লগ আউট করতে দেয়।

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

  1. fragment_main.xml খুলুন।
  2. fragment_main.xml, ConstraintLayout এ নেস্ট করা একটি সেটিংস বোতাম যোগ করুন এবং এটিকে স্ক্রিনের উপরের ডানদিকে রাখুন।

fragment_main.xml

<TextView
       android:id="@+id/settings_btn"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_margin="@dimen/text_margin"
       android:background="@color/colorAccent"
       android:padding="10dp"
       android:text="@string/settings_btn"
       android:textColor="#ffffff"
       android:textSize="20sp"
       app:layout_constraintRight_toRightOf="parent"
       app:layout_constraintTop_toTopOf="parent"/>
  1. nav_graph.xml খুলুন।
  2. mainFragment ভিতরে একটি কর্ম যোগ করুন। অ্যাকশনের id হল action_mainFragment_to_customizeFragment , এবং গন্তব্য হল customizeFragment

nav_graph.xml

<fragment
       android:id="@+id/mainFragment"
       android:name="com.example.android.firebaseui_login_sample.MainFragment"
       android:label="MainFragment">
   <action
           android:id="@+id/action_mainFragment_to_settingsFragment"
           app:destination="@id/settingsFragment"/>
</fragment>
  1. MainFragment.kt খুলুন।
  2. onViewCreated() এ, settings_btn এর জন্য একটি onClickListener সেট করুন, যাতে বোতামে ট্যাপ করলে ব্যবহারকারীকে ফ্র্যাগমেন্ট customizeFragment করতে নেভিগেট করতে পারে।

MainFragment.kt

binding.settingsBtn.setOnClickListener {
   val action = MainFragmentDirections.actionMainFragmentToSettingsFragment()
   findNavController().navigate(action)
}
  1. আপনি যদি অমীমাংসিত ত্রুটিগুলি দেখতে পান তবে আপনার তৈরি করা নতুন নেভিগেশন অ্যাকশন তৈরি করতে এবং ব্যবহার করতে বিল্ড মেনু থেকে অ্যাপটি পুনরায় কম্পাইল করুন।
  2. অ্যাপটি পুনরায় চালু করুন। উপরের ডান কোণায় এখন একটি কার্যকরী সেটিংস বোতাম থাকা উচিত।
  3. সেই বোতামটিতে ক্লিক করুন যা আপনাকে সেটিংস স্ক্রিনে নিয়ে যাবে। সেটিংস স্ক্রিনে শুধুমাত্র একটি বিকল্প রয়েছে, ব্যবহারকারীকে বেছে নিতে দেওয়া যে তারা হোম স্ক্রিনে কী ধরনের মজাদার তথ্য দেখতে চান।
  4. হোম স্ক্রিনে ফিরে যেতে অ্যান্ড্রয়েড ডিভাইসের পিছনের বোতামে ক্লিক করুন।

এই টাস্কে, আপনি লগইন স্ক্রিনে ব্যবহারকারীকে নেভিগেট করার জন্য কোড যোগ করবেন যদি তারা লগ ইন না থাকা অবস্থায় সেটিংস স্ক্রীন অ্যাক্সেস করার চেষ্টা করে।

  1. SettingsFragment.kt খুলুন।
  2. onViewCreated() -এ, authenticationState পর্যবেক্ষণ করুন এবং ব্যবহারকারীকে LoginFragment এ রিডাইরেক্ট করুন যদি সেগুলি প্রমাণীকৃত না হয়।

SettingsFragment.kt

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
   super.onViewCreated(view, savedInstanceState)
   val navController = findNavController()
   viewModel.authenticationState.observe(viewLifecycleOwner, Observer { authenticationState ->
       when (authenticationState) {
           LoginViewModel.AuthenticationState.AUTHENTICATED -> Log.i(TAG, "Authenticated")
           // If the user is not logged in, they should not be able to set any preferences,
           // so navigate them to the login fragment
           LoginViewModel.AuthenticationState.UNAUTHENTICATED -> navController.navigate(
               R.id.loginFragment
           )
           else -> Log.e(
               TAG, "New $authenticationState state that doesn't require any UI change"
           )
       }
   })
}

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

  1. LoginFragment.kt খুলুন।
  2. onViewCreated() এ, ব্যবহারকারীকে MainFragment এ ফিরিয়ে এনে ব্যাক বোতাম অ্যাকশনগুলি পরিচালনা করুন।

LoginFragment.kt

// If the user presses the back button, bring them back to the home screen
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {
   navController.popBackStack(R.id.mainFragment, false)
}
  1. আপনার অ্যাপটি পুনরায় চালু করুন এবং নিশ্চিত করুন যে আপনি লগ ইন না করলে, সেটিংস স্ক্রীন অ্যাক্সেস করার প্রচেষ্টা আপনাকে লগইন প্রবাহে পুনঃনির্দেশিত করবে।

আপনি সফলভাবে লগইন করার জন্য ব্যবহারকারীকে পুনঃনির্দেশিত করার সময়, ব্যবহারকারী সফলভাবে লগ ইন করার পরে কী ঘটবে তা আপনি পরিচালনা করেননি, তাই লগইন করার প্রচেষ্টাগুলি এমনভাবে প্রদর্শিত হবে যেন এটি কাজ করছে না৷ আপনি পরবর্তী ধাপে এটি ঠিক করবেন।

এখন পর্যন্ত, ব্যবহারকারীরা লগইন না করে সেটিংস স্ক্রীন অ্যাক্সেস করার চেষ্টা করলে লগইন স্ক্রিনে পুনঃনির্দেশিত করার জন্য আপনি সফলভাবে আপনার অ্যাপ সেট আপ করেছেন।

যাইহোক, আপনি সাইন-ইন প্রবাহের মধ্য দিয়ে যাওয়ার পরে, আপনাকে আবার লগইন স্ক্রিনে ফিরিয়ে আনা হবে। এটি একটি ভাল ব্যবহারকারীর অভিজ্ঞতা নয় এবং বিভ্রান্তিকর হতে পারে।

আদর্শ ব্যবহারকারীর অভিজ্ঞতা প্রদানের জন্য, ব্যবহারকারী সফলভাবে লগ ইন করার পরে অ্যাপটিকে ব্যবহারকারীকে সেটিংস স্ক্রিনে ফিরিয়ে আনতে হবে।

  1. এখনও LoginFragment.kt এ, onViewCreated() -এর যে কোনও জায়গায়, authenticationState পর্যবেক্ষণ করুন এবং সফলভাবে প্রমাণীকরণ হয়ে গেলে ব্যবহারকারীকে SettingsFragment এ নেভিগেট করুন।

LoginFragment.kt

// Observe the authentication state so we can know if the user has logged in successfully.
// If the user has logged in successfully, bring them back to the settings screen.
// If the user did not log in successfully, display an error message.
viewModel.authenticationState.observe(viewLifecycleOwner, Observer { authenticationState ->
   when (authenticationState) {
      // Since our login flow is only one screen instead of multiple 
      // screens, we can utilize popBackStack(). If our login flow 
      // consisted of multiple screens, we would have to call 
      // popBackStack() multiple times.
       LoginViewModel.AuthenticationState.AUTHENTICATED -> navController.popBackStack()
       else -> Log.e(
           TAG,
           "Authentication state that doesn't require any UI change $authenticationState"
       )
   }
})
  1. আপনার অ্যাপটি আবার চালান এবং নিশ্চিত করুন যে আপনি যখন সফলভাবে সাইন ইন করবেন, আপনি লগইন পৃষ্ঠার পরিবর্তে সেটিংস পৃষ্ঠায় অবতরণ করবেন৷

আপনি এই Github রেপো https://github.com/googlecodelabs/android-kotlin-login-navigation- এ সমস্ত সমাধান কোড সহ সম্পূর্ণ অ্যাপটি দেখতে পারেন।

এই কোডল্যাবে আপনি লগইন সমর্থন করে এমন একটি অ্যাপে কীভাবে একটি ভাল ব্যবহারকারীর অভিজ্ঞতা তৈরি করতে হয় তার জন্য সেরা অনুশীলনগুলি শিখেছেন৷ অ্যাপটির প্রমাণীকরণ স্থিতি পর্যবেক্ষণ করে আপনি নির্ধারণ করতে সক্ষম হয়েছেন যে ব্যবহারকারী কোন স্ক্রীনগুলি অ্যাক্সেস করতে পারে এবং প্রয়োজনে লগইন স্ক্রিনে তাদের পুনঃনির্দেশিত করতে পারে৷

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

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

কোডল্যাব:

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