लॉगिन के साथ Android कंडीशनल नेविगेशन

यह कोडलैब, Kotlin में बेहतर Android का हिस्सा है. अगर आप कोडलैब के क्रम में काम करते हैं, लेकिन यह ज़रूरी नहीं है, तो आपको इस कोर्स का पूरा फ़ायदा मिलेगा. सभी कोर्स कोडलैब Kotlin कोडलैब के लैंडिंग पेज पर बेहतर Android पेज पर दिए गए हैं.


यह कोडलैब Android पर Firebase यूज़र इंटरफ़ेस (यूआई) को लागू करने पर आधारित है. अगर आपने इस कोडलैब का स्टार्टर कोड डाउनलोड किया है और पिछले कोडलैब का कोड #39;नहीं किया है, तो आपको सबसे पहले FirebaseUI के साथ Android पर लॉगिन लागू करना कोडलैब (कोड बनाना सीखना) पूरा करने में मदद मिल सकती है.

परिचय

अगर आपके ऐप्लिकेशन में लॉगिन करने की सुविधा है, तो यह उन ऐप्लिकेशन के कुछ हिस्से को रिज़र्व करने के लिए एक आम इस्तेमाल का उदाहरण है जो लॉग इन किए हुए उपयोगकर्ताओं के लिए ही उपलब्ध हैं. उदाहरण के लिए, आप अपने ऐप्लिकेशन की सेटिंग स्क्रीन को, लॉग इन किए हुए उपयोगकर्ताओं के लिए रिज़र्व कर सकते हैं.

ऐसे मामलों में, उपयोगकर्ताओं को उनकी पुष्टि की स्थिति के हिसाब से सही स्क्रीन पर लाने के लिए, आप शर्तों के साथ नेविगेशन का इस्तेमाल कर सकते हैं.

इस कोडलैब में, आप मौजूदा ऐप्लिकेशन के ऊपर ऐसी सेटिंग स्क्रीन जोड़ेंगे जो सिर्फ़ उपयोगकर्ताओं के लॉग इन करने पर ही ऐक्सेस की जा सकेगी. आप इस टास्क के लिए, Android का नेविगेशन कॉम्पोनेंट इस्तेमाल करेंगे.

आपको क्या पता होना चाहिए

आप इन चीज़ों के बारे में जानेंगे

  • उपयोगकर्ता आपके ऐप्लिकेशन में लॉग इन हैं या नहीं, इस आधार पर उन्हें आपके ऐप्लिकेशन की सही स्क्रीन पर नेविगेट करने का तरीका.

आप क्या कर पाएंगे!

  • लॉग इन करने के बाद, उपयोगकर्ताओं को सही स्क्रीन पर सही तरीके से मैनेज करें.
  • अगर उपयोगकर्ता लॉग इन नहीं हैं, तो उन्हें सेटिंग स्क्रीन ऐक्सेस करने से रोकें. इसके बजाय, उन्हें लॉगिन स्क्रीन पर रीडायरेक्ट करें.

पिछले कोडलैब में आपने ऐसे ऐप्लिकेशन पर काम किया जिसमें Google से जुड़े तथ्य दिखाए गए थे. आपके ऐप्लिकेशन ने उपयोगकर्ताओं को लॉगिन और लॉग आउट करने की भी अनुमति दी. इस कोडलैब के लिए, आप मौजूदा ऐप्लिकेशन में एक सेटिंग स्क्रीन जोड़ेंगे. सेटिंग स्क्रीन को उपयोगकर्ता सिर्फ़ तब ऐक्सेस कर पाएंगे, जब वे लॉग इन होंगे.

अगर उपयोगकर्ता ने लॉग इन नहीं किया है, तो जब वह सेटिंग स्क्रीन को ऐक्सेस करने की कोशिश करेगा, तो ऐप्लिकेशन उसे लॉगिन स्क्रीन पर रीडायरेक्ट कर देगा. लॉगिन फ़्लो पूरा होने के बाद, उपयोगकर्ता को उस सेटिंग स्क्रीन पर वापस लाया जाएगा जिसे उन्होंने ऐक्सेस करने की कोशिश की थी.

यह कोडलैब Android पर FirebaseUI के साथ लॉगिन लागू करना पर आधारित है. अगर आपने इस कोडलैब का स्टार्टर कोड डाउनलोड किया है और पिछले कोडलैब का कोड #39;नहीं किया है, तो आपको सबसे पहले FirebaseUI के साथ Android पर लॉगिन लागू करना कोडलैब (कोड बनाना सीखना) पूरा करने में मदद मिल सकती है.

सैंपल ऐप्लिकेशन डाउनलोड करें. इसके लिए, इनमें से कोई एक तरीका अपनाएं:

पिन डाउनलोड करें


... या नीचे दिए गए निर्देश का इस्तेमाल करके, कमांड लाइन से GitHub डेटा स्टोर करने की जगह को क्लोन करें: रेपो की start ब्रांच पर स्विच करें:

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

Android Studio में प्रोजेक्ट लोड होने के बाद:

  1. ऐप्लिकेशन को एम्युलेटर या फ़िज़िकल डिवाइस पर चलाएं, ताकि यह पक्का हो सके कि आपने डेवलपमेंट शुरू करने के लिए एनवायरमेंट सेट अप कर लिया है.

अगर यह प्रोसेस सफल होती है, तो आपको होम स्क्रीन पर सबसे ऊपर बाएं कोने में, एक मज़ेदार Android तथ्य और लॉगिन बटन दिखेगा.


स्टार्टर ऐप्लिकेशन की मौजूदा सुविधाएं:

  • अगर उपयोगकर्ता लॉग इन नहीं है, तो लॉगिन करें बटन पर टैप करने से लॉगिन फ़्लो शुरू हो जाता है. यह उपयोगकर्ता को किसी ईमेल पते या 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. होम स्क्रीन पर वापस जाने के लिए, Android डिवाइस के 'वापस जाएं' बटन पर क्लिक करें.

इस काम में, अगर उपयोगकर्ता लॉग इन नहीं होने पर सेटिंग स्क्रीन को ऐक्सेस करने का प्रयास करता है, तो आप उसे लॉगिन स्क्रीन पर नेविगेट करने के लिए कोड जोड़ेंगे.

  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 डोमेन repo पर सभी सॉल्यूशन कोड के साथ, पूरा ऐप्लिकेशन देखें https://github.com/googlecodelabs/android-kotlin-login-navigation.

इस कोडलैब में आपने लॉगिन करने की सुविधा देने वाले किसी ऐप्लिकेशन में, उपयोगकर्ताओं को बेहतर अनुभव देने के सबसे सही तरीके सीखे हैं. ऐप्लिकेशन की पुष्टि करने की स्थिति देखकर, यह पता लगाया जा सकता है कि उपयोगकर्ता किन स्क्रीन को ऐक्सेस कर सकते हैं. साथ ही, ज़रूरत पड़ने पर उन्हें लॉगिन स्क्रीन पर रीडायरेक्ट कर सकते हैं.

Android में नेविगेशन के सबसे सही तरीकों के बारे में ज़्यादा जानने के लिए, नीचे दिए गए संसाधनों को देखें:

Android डेवलपर दस्तावेज़:

कोडलैब (कोड बनाना सीखना):

इस कोर्स में दिए गए दूसरे कोडलैब के लिंक के लिए, Kotlin कोडलैब के लैंडिंग पेज में ऐडवांस्ड Android देखें.