Bu codelab, Advanced Android in Kotlin kursunun bir parçasıdır. Bu kurstan en iyi şekilde yararlanmak için codelab'leri sırayla incelemeniz önerilir ancak bu zorunlu değildir. Kursla ilgili tüm codelab'ler Kotlin'de İleri Düzey Android codelab'leri açılış sayfasında listelenir.
Bu codelab, FirebaseUI ile Android'de oturum açma özelliğini uygulama codelab'ine dayanmaktadır. Önceki codelab'i yapmadıysanız bu codelab'in başlangıç kodunu indirebilirsiniz ancak önce FirebaseUI ile Android'de Giriş Uygulama codelab'ini tamamlamanız faydalı olabilir.
Giriş
Uygulamanızda giriş destekleniyorsa uygulamanın bazı bölümlerini yalnızca giriş yapmış kullanıcılara ayırmak yaygın bir kullanım alanıdır. Örneğin, uygulamanızın Ayarlar ekranını yalnızca oturum açmış kullanıcılar için ayırmak isteyebilirsiniz.
Bu gibi durumlarda, kullanıcıları kimlik doğrulama durumlarına göre uygun ekrana yönlendirmek için koşullu gezinme özelliğini kullanabilirsiniz.
Bu codelab'de, mevcut bir uygulamayı temel alarak yalnızca oturum açmış kullanıcıların erişebileceği bir ayarlar ekranı ekleyeceksiniz. Bu görev için Android'in gezinme bileşenlerini kullanacaksınız.
Bilmeniz gerekenler
- Android'in Navigation bileşeni ve Android uygulamalarında nasıl kullanıldığı
- FirebaseUI kitaplığıyla Android uygulamanızda oturum açma özelliğinin nasıl uygulandığı. Bu kavramı bilmiyorsanız FirebaseUI ile Android'de oturum açma özelliğini uygulama adlı codelab'i incelemeniz gerekir.
Neler öğreneceksiniz?
- Kullanıcıları, oturum açıp açmadıklarına göre uygulamanızın uygun ekranlarına yönlendirme
Yapacaklarınız
- Kullanıcıları başarılı bir şekilde giriş yaptıktan sonra doğru ekrana yönlendirme işlemini düzgün bir şekilde gerçekleştirin.
- Kullanıcıların oturum açmadıkları takdirde Ayarlar ekranına erişmesini engelleyin ve bunun yerine onları Giriş ekranına yönlendirin.
Önceki codelab'de Android ile ilgili bilgileri gösteren bir uygulama üzerinde çalışmıştınız. Uygulamanız, kullanıcıların giriş ve çıkış yapmasına da izin veriyordu. Bu codelab'de mevcut uygulamaya bir ayarlar ekranı ekleyeceksiniz. Ayarlar ekranına yalnızca oturum açmış kullanıcılar erişebilir.
Kullanıcı giriş yapmamışsa ayarlar ekranına erişmeye çalıştığında uygulama kullanıcıyı giriş ekranına yönlendirir. Giriş akışı başarıyla tamamlandıktan sonra kullanıcı, başlangıçta erişmeye çalıştığı ayarlar ekranına geri yönlendirilir.

Bu codelab, FirebaseUI ile Android'de oturum açma özelliğini uygulama codelab'inin üzerine kurulmuştur. Önceki codelab'i yapmadıysanız bu codelab'in başlangıç kodunu indirebilirsiniz ancak önce FirebaseUI ile Android'de Giriş Uygulama codelab'ini tamamlamanız faydalı olabilir.
Örnek uygulamayı indirin. Şunlardan birini yapabilirsiniz:
... veya aşağıdaki komutu kullanarak GitHub deposunu komut satırından klonlayın ve deponun start dalına geçin:
$ git clone https://github.com/googlecodelabs/android-kotlin-login-navigation
Projeyi Android Studio'ya yükledikten sonra:
- Geliştirmeye başlamak için ortamınızın başarıyla ayarlandığından emin olmak üzere uygulamayı bir emülatörde veya fiziksel cihazda çalıştırın.
İşlem başarılı olursa ana ekranda eğlenceli bir Android bilgisi ve sol üst köşede bir giriş düğmesi gösterilir.
Başlangıç uygulamasının mevcut özellikleri:
- Kullanıcı oturum açmadıysa Giriş düğmesine dokunulduğunda giriş akışı başlatılır ve kullanıcının bir e-posta adresi veya Google Hesabı ile oturum açmasına izin verilir.
- Kullanıcı oturum açtıysa düğme, kullanıcının oturumu kapatmasına olanak tanıyan bir Oturumu kapat düğmesine dönüşür.
Bu görevde, kullanıcının ayarlar ekranına gitmesine olanak tanıyan bir düğmeyi ana ekrana ekleyeceksiniz. Ayarlar ekranında kullanıcı, ana ekranda gösterilmesini istediği eğlenceli bilgileri seçebilir. Ayarlar ekranında Android veya Kaliforniya eyaleti hakkında bilgi görmeyi seçebilirler.

fragment_main.xmladlı kişiyi aç.fragment_main.xml,öğesineConstraintLayoutiçine yerleştirilmiş bir Ayarlar düğmesi ekleyin ve bu düğmeyi ekranın sağ üst köşesine yerleştirin.
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.xmladlı kişiyi aç.mainFragmentiçine bir işlem ekleyin. İşleminiddeğeriaction_mainFragment_to_customizeFragment, hedefi isecustomizeFragment.
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.ktadlı kişiyi aç.onViewCreated()içinde,settings_btniçinonClickListenerayarlayın. Böylece düğmeye dokunulduğunda kullanıcıcustomizeFragmentadresine yönlendirilir.
MainFragment.kt
binding.settingsBtn.setOnClickListener {
val action = MainFragmentDirections.actionMainFragmentToSettingsFragment()
findNavController().navigate(action)
}- Çözülmemiş hatalar görürseniz oluşturduğunuz yeni gezinme işlemlerini oluşturmak ve kullanmak için uygulamayı Build (Derle) menüsünden yeniden derleyin.
- Uygulamayı yeniden başlatın. Sağ üst köşede artık işlevsel bir Ayarlar düğmesi görünmelidir.
- Ayarlar ekranına yönlendiren düğmeyi tıklayın. Ayarlar ekranında yalnızca bir seçenek vardır. Bu seçenek, kullanıcının ana ekranda hangi tür eğlenceli bilgilerin gösterileceğini seçmesine olanak tanır.
- Ana ekrana dönmek için Android cihazın geri düğmesini tıklayın.

Bu görevde, kullanıcı oturum açmadan ayarlar ekranına erişmeye çalıştığında kullanıcıyı giriş ekranına yönlendirecek kodu ekleyeceksiniz.
SettingsFragment.ktadlı kişiyi aç.onViewCreated()içindeauthenticationStatedeğerini gözlemleyin ve kullanıcıyı kimliği doğrulanmamışsaLoginFragmentadresine yönlendirin.
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"
)
}
})
}Uygulama, kullanıcı ayarlar ekranına erişmeye çalıştığında onu giriş ekranına yönlendirdiğinden giriş ekranındaki geri düğmesi davranışını da yönetmesi gerekir. Uygulama, geri düğmesi davranışını özelleştirerek ele almıyorsa kullanıcı, ayarlar ekranına geri dönmeye çalışırken sonsuz bir döngüye takılır ve tekrar giriş ekranına yönlendirilir.
LoginFragment.ktadlı kişiyi aç.onViewCreated()içinde, kullanıcıyıMainFragment'ye geri getirerek geri düğmesi işlemlerini yönetin.
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)
}- Uygulamanızı yeniden başlatın ve oturum açmadıysanız ayarlar ekranına erişme girişimlerinin artık sizi giriş akışına yönlendirdiğini doğrulayın.
Kullanıcıyı giriş yapmaya yönlendirme işlemini başarıyla gerçekleştirmiş olsanız da kullanıcının başarılı bir şekilde giriş yapmasından sonra ne olacağını ele almadığınız için giriş yapma denemeleri çalışmıyormuş gibi görünür. Bunu bir sonraki adımda düzelteceksiniz.
Şimdiye kadar, kullanıcının oturum açmadan ayarlar ekranına erişmeye çalışması durumunda giriş ekranına yönlendirilmesi için uygulamanızı başarıyla ayarladınız.
Ancak oturum açma akışını tamamladıktan sonra tekrar giriş ekranına yönlendirilirsiniz. Bu durum, iyi bir kullanıcı deneyimi sunmaz ve kafa karıştırıcı olabilir.
İdeal kullanıcı deneyimini sağlamak için uygulama, kullanıcı başarılı bir şekilde giriş yaptıktan sonra kullanıcıyı ayarlar ekranına geri getirmelidir.
- Hâlâ
LoginFragment.kt'da,onViewCreated()'nın herhangi bir yerindeauthenticationState'ı gözlemleyin ve kullanıcı kimliği başarıyla doğrulandığında kullanıcıyıSettingsFragment'a geri yönlendirin.
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"
)
}
})- Uygulamanızı tekrar çalıştırın ve artık başarılı bir şekilde oturum açtığınızda Giriş sayfası yerine Ayarlar sayfasına yönlendirildiğinizi onaylayın.
Çözüm kodunun tamamını içeren uygulamayı şu GitHub kod deposunda inceleyebilirsiniz: https://github.com/googlecodelabs/android-kotlin-login-navigation.
Bu codelab'de, oturum açmayı destekleyen bir uygulamada iyi bir kullanıcı deneyimi oluşturmaya yönelik en iyi uygulamaları öğrendiniz. Uygulamanın kimlik doğrulama durumunu gözlemleyerek kullanıcının hangi ekranlara erişebileceğini belirleyebilir ve gerektiğinde kullanıcıyı giriş ekranına yönlendirebilirsiniz.
Android'de gezinmeyle ilgili en iyi uygulamalar hakkında daha fazla bilgi için aşağıdaki kaynaklara göz atın:
Android geliştirici belgeleri:
Codelab'ler:
Bu kurstaki diğer codelab'lerin bağlantıları için Advanced Android in Kotlin codelab'lerinin açılış sayfasına bakın.