यह कोडलैब, Kotlin में ऐडवांस Android कोर्स का हिस्सा है. अगर इस कोर्स के कोडलैब को क्रम से पूरा किया जाता है, तो आपको सबसे ज़्यादा फ़ायदा मिलेगा. हालांकि, ऐसा करना ज़रूरी नहीं है. कोर्स के सभी कोडलब, Advanced Android in Kotlin कोडलब के लैंडिंग पेज पर दिए गए हैं.
यह कोडलैब, FirebaseUI की मदद से Android पर लॉगिन की सुविधा लागू करना पर आधारित है. अगर आपने पिछला कोडलैब पूरा नहीं किया है, तो इस कोडलैब के लिए स्टार्टर कोड डाउनलोड किया जा सकता है. हालांकि, FirebaseUI की मदद से Android पर लॉगिन की सुविधा लागू करना कोडलैब को पहले पूरा करना आपके लिए फ़ायदेमंद हो सकता है.
परिचय
अगर आपके ऐप्लिकेशन में लॉगिन करने की सुविधा है, तो ऐप्लिकेशन के कुछ हिस्सों को सिर्फ़ लॉगिन किए हुए उपयोगकर्ताओं के लिए रिज़र्व करना, इस्तेमाल का एक सामान्य मामला है. उदाहरण के लिए, हो सकता है कि आपको अपने ऐप्लिकेशन की सेटिंग स्क्रीन को सिर्फ़ लॉग इन किए हुए उपयोगकर्ताओं के लिए रिज़र्व करना हो.
ऐसे मामलों में, शर्त के हिसाब से नेविगेशन का इस्तेमाल किया जा सकता है. इससे उपयोगकर्ताओं को उनकी पुष्टि की स्थिति के आधार पर सही स्क्रीन पर ले जाया जा सकता है.
इस कोडलैब में, आपको मौजूदा ऐप्लिकेशन में एक सेटिंग स्क्रीन जोड़ने का तरीका बताया जाएगा. इस स्क्रीन को सिर्फ़ वे उपयोगकर्ता ऐक्सेस कर पाएंगे जिन्होंने लॉग इन किया है. इस टास्क के लिए, Android के नेविगेशन कॉम्पोनेंट का इस्तेमाल किया जाएगा.
आपको पहले से क्या पता होना चाहिए
- Android का नेविगेशन कॉम्पोनेंट और Android ऐप्लिकेशन में इसका इस्तेमाल कैसे किया जाता है
- आपके Android ऐप्लिकेशन में FirebaseUI लाइब्रेरी की मदद से लॉगिन की सुविधा कैसे लागू की जाती है. अगर आपको इस कॉन्सेप्ट के बारे में नहीं पता है, तो आपको Android पर FirebaseUI की मदद से लॉगिन की सुविधा लागू करना कोडलैब देखना चाहिए.
आपको क्या सीखने को मिलेगा
- उपयोगकर्ताओं को आपके ऐप्लिकेशन की सही स्क्रीन पर कैसे ले जाएं. यह इस बात पर निर्भर करता है कि उन्होंने लॉग इन किया है या नहीं.
आपको क्या करना होगा
- उपयोगकर्ताओं के लॉगिन हो जाने के बाद, उन्हें सही स्क्रीन पर ले जाने की प्रोसेस को ठीक से मैनेज करें.
- अगर उपयोगकर्ता ने लॉग इन नहीं किया है, तो उन्हें सेटिंग स्क्रीन को ऐक्सेस करने से रोकें. इसके बजाय, उन्हें लॉगिन स्क्रीन पर रीडायरेक्ट करें.
पिछले कोडलैब में, आपने एक ऐसे ऐप्लिकेशन पर काम किया था जो Android के बारे में जानकारी दिखाता था. आपके ऐप्लिकेशन में, लोगों को लॉग इन और लॉग आउट करने की सुविधा भी मिलती है. इस कोडलैब के लिए, आपको मौजूदा ऐप्लिकेशन में एक सेटिंग स्क्रीन जोड़नी होगी. सेटिंग स्क्रीन को सिर्फ़ तब ऐक्सेस किया जा सकेगा, जब उपयोगकर्ता ने लॉग इन किया हो.
अगर उपयोगकर्ता ने लॉग इन नहीं किया है, तो सेटिंग स्क्रीन को ऐक्सेस करने की कोशिश करने पर, ऐप्लिकेशन उसे लॉगिन स्क्रीन पर रीडायरेक्ट कर देगा. लॉगिन फ़्लो पूरा होने के बाद, उपयोगकर्ता को वापस उस सेटिंग स्क्रीन पर ले जाया जाएगा जिसे उसने ऐक्सेस करने की कोशिश की थी.
यह कोडलैब, FirebaseUI की मदद से Android पर लॉगिन की सुविधा लागू करना पर आधारित है. अगर आपने पिछला कोडलैब पूरा नहीं किया है, तो इस कोडलैब के लिए स्टार्टर कोड डाउनलोड किया जा सकता है. हालांकि, FirebaseUI की मदद से Android पर लॉगिन की सुविधा लागू करना कोडलैब को पहले पूरा करना आपके लिए फ़ायदेमंद हो सकता है.
उदाहरण के तौर पर दिया गया ऐप्लिकेशन डाउनलोड करने के लिए, इनमें से कोई एक तरीका अपनाएं:
... या कमांड लाइन से GitHub रिपॉज़िटरी को क्लोन करें. इसके लिए, यहां दी गई कमांड का इस्तेमाल करें और रिपॉज़िटरी की start
ब्रांच पर स्विच करें:
$ git clone https://github.com/googlecodelabs/android-kotlin-login-navigation
Android Studio में प्रोजेक्ट लोड होने के बाद:
- ऐप्लिकेशन को किसी एम्युलेटर या फ़िज़िकल डिवाइस पर चलाएं. इससे यह पक्का किया जा सकेगा कि डेवलपमेंट शुरू करने के लिए, आपका एनवायरमेंट सही तरीके से सेट अप हो गया है.
अगर यह प्रोसेस पूरी हो जाती है, तो आपको होम स्क्रीन पर Android के बारे में मज़ेदार जानकारी दिखेगी. साथ ही, सबसे ऊपर बाईं ओर लॉगिन बटन दिखेगा.
स्टार्टर ऐप्लिकेशन की मौजूदा सुविधाएं:
- अगर उपयोगकर्ता ने लॉग इन नहीं किया है, तो लॉगिन करें बटन पर टैप करने से लॉगिन करने का फ़्लो शुरू हो जाता है. इससे उपयोगकर्ता को ईमेल पते या Google खाते से लॉगिन करने की अनुमति मिलती है.
- अगर उपयोगकर्ता ने लॉग इन किया हुआ है, तो बटन बदलकर लॉग आउट करें बटन हो जाता है. इससे उपयोगकर्ता लॉग आउट कर सकता है.
इस टास्क में, आपको होम स्क्रीन पर एक बटन जोड़ना होगा. इससे उपयोगकर्ता, सेटिंग स्क्रीन पर जा सकेगा. सेटिंग स्क्रीन की मदद से, उपयोगकर्ता यह चुन पाएगा कि उसे होम स्क्रीन पर किस तरह के मज़ेदार तथ्य दिखाने हैं. सेटिंग स्क्रीन पर, वे Android या कैलिफ़ोर्निया की स्थिति के बारे में जानकारी देख सकते हैं.
fragment_main.xml
खोलें.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"/>
nav_graph.xml
खोलें.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>
MainFragment.kt
खोलें.onViewCreated()
में,settings_btn
के लिएonClickListener
सेट करें, ताकि बटन पर टैप करने से उपयोगकर्ता कोcustomizeFragment
पर ले जाया जा सके.
MainFragment.kt
binding.settingsBtn.setOnClickListener {
val action = MainFragmentDirections.actionMainFragmentToSettingsFragment()
findNavController().navigate(action)
}
- अगर आपको ऐसी गड़बड़ियां दिखती हैं जिन्हें ठीक नहीं किया गया है, तो बनाएं मेन्यू से ऐप्लिकेशन को फिर से कंपाइल करें. इससे, आपने जो नई नेविगेशन कार्रवाइयां बनाई हैं उन्हें जनरेट और इस्तेमाल किया जा सकेगा.
- ऐप्लिकेशन को फिर से लॉन्च करें. अब आपको सबसे ऊपर दाएं कोने में, सेटिंग बटन दिखेगा.
- उस बटन पर क्लिक करें जो आपको सेटिंग स्क्रीन पर ले जाएगा. सेटिंग स्क्रीन पर सिर्फ़ एक विकल्प होता है. इसकी मदद से, उपयोगकर्ता यह चुन सकता है कि उसे होम स्क्रीन पर किस तरह की दिलचस्प जानकारी देखनी है.
- होम स्क्रीन पर वापस जाने के लिए, Android डिवाइस के बैक बटन पर क्लिक करें.
इस टास्क में, आपको कोड जोड़ना होगा. इससे अगर कोई उपयोगकर्ता लॉग इन किए बिना सेटिंग स्क्रीन को ऐक्सेस करने की कोशिश करता है, तो उसे लॉगिन स्क्रीन पर भेज दिया जाएगा.
SettingsFragment.kt
खोलें.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"
)
}
})
}
अगर उपयोगकर्ता सेटिंग स्क्रीन को ऐक्सेस करने की कोशिश करता है, तो ऐप्लिकेशन उसे लॉगिन स्क्रीन पर ले जाता है. इसलिए, ऐप्लिकेशन को लॉगिन स्क्रीन पर 'वापस जाएं' बटन के व्यवहार को भी मैनेज करना होगा. अगर ऐप्लिकेशन में, 'वापस जाएं' बटन के व्यवहार को पसंद के मुताबिक नहीं बनाया गया है, तो उपयोगकर्ता सेटिंग स्क्रीन पर वापस जाने की कोशिश करता रहेगा. हालांकि, उसे बार-बार लॉगिन स्क्रीन पर रीडायरेक्ट किया जाएगा.
LoginFragment.kt
खोलें.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)
}
- अपने ऐप्लिकेशन को फिर से लॉन्च करें. साथ ही, पुष्टि करें कि अगर आपने लॉग इन नहीं किया है, तो सेटिंग स्क्रीन को ऐक्सेस करने की कोशिश करने पर, आपको लॉग इन करने के लिए रीडायरेक्ट किया जाएगा.
आपने उपयोगकर्ता को लॉगिन करने के लिए रीडायरेक्ट तो कर दिया है, लेकिन आपने यह नहीं बताया है कि उपयोगकर्ता के लॉगिन करने के बाद क्या होगा. इसलिए, लॉगिन करने की कोशिशें ऐसी दिखेंगी जैसे यह सुविधा काम नहीं कर रही है. अगले चरण में, इस समस्या को ठीक किया जाएगा.
अब तक, आपने अपने ऐप्लिकेशन को इस तरह से सेट अप कर लिया है कि अगर कोई उपयोगकर्ता लॉग इन किए बिना सेटिंग स्क्रीन को ऐक्सेस करने की कोशिश करता है, तो उसे लॉगिन स्क्रीन पर रीडायरेक्ट कर दिया जाए.
हालांकि, साइन इन करने की प्रोसेस पूरी होने के बाद, आपको फिर से लॉगिन स्क्रीन पर ले जाया जाता है. इससे उपयोगकर्ताओं को अच्छा अनुभव नहीं मिलता और उन्हें उलझन हो सकती है.
उपयोगकर्ता को बेहतर अनुभव देने के लिए, ऐप्लिकेशन को उपयोगकर्ता के लॉगिन करने के बाद, उसे वापस सेटिंग स्क्रीन पर ले जाना चाहिए.
- अब भी
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"
)
}
})
- अपने ऐप्लिकेशन को फिर से चलाएं और पुष्टि करें कि अब साइन इन करने के बाद, आपको लॉगिन पेज के बजाय सेटिंग पेज पर रीडायरेक्ट किया जा रहा है.
इस GitHub रिपो https://github.com/googlecodelabs/android-kotlin-login-navigation पर जाकर, पूरे ऐप्लिकेशन और समाधान के कोड को देखा जा सकता है.
इस कोडलैब में, आपने लॉगिन की सुविधा वाले ऐप्लिकेशन में उपयोगकर्ताओं को बेहतर अनुभव देने के सबसे सही तरीके सीखे. ऐप्लिकेशन की पुष्टि करने की स्थिति को देखकर, यह पता लगाया जा सकता है कि उपयोगकर्ता किन स्क्रीन को ऐक्सेस कर सकता है. साथ ही, ज़रूरत पड़ने पर उसे लॉगिन स्क्रीन पर रीडायरेक्ट किया जा सकता है.
Android में नेविगेशन के सबसे सही तरीकों के बारे में ज़्यादा जानने के लिए, यहां दिए गए संसाधन देखें:
Android डेवलपर का दस्तावेज़:
कोडलैब:
इस कोर्स में मौजूद अन्य कोडलैब के लिंक के लिए, Advanced Android in Kotlin कोडलैब का लैंडिंग पेज देखें.