👨🏼‍💻Yeni Android Splash Screen API ve Huawei Auth Service ile Kimlik Doğrulama

Abdurrahim Çillioğlu
Huawei Developers - Türkiye
5 min readJun 3, 2022
Android Splash Screen

Giriş

Selamlar, bu yazımızda yeni Android Splash Screen’ i kullanarak sıfırdan bir uygulama geliştireceğiz. Uygulamalarımızda genellikle Splash Screen (Açılış Ekranı) gösterirken ya kullanıcıların giriş durumlarını kontrol ediyor ya da gerekli bir veri yükleme işlemimiz var ise onu gerçekleştiriyoruz. Biz de bu senaryoyu gerçekleştirmek için basit ve güvenli olarak kimlik doğrulama işlemlerini gerçekleştirmemizi sağlayan Huawei Auth Service’i kullanacağız. Sizinle geliştirme yaparken her şeyin sorunsuz ilerlediği mutlu yolu (happy path) değil, karşılaşabilme ihtimaliniz olan hataları ve çözüm yollarını da paylaşacağım. Bu arada uygulamamızı Android Studio ortamında Kotlin dilini kullanarak geliştireceğiz.

Splash Screen Nedir?

Temelde Splash Screen kullanıcıların uygulamayı ilk kez başlattıklarında karşılaşmış oldukları ilk ekrandır. Bu ekranda genelde şirket veya uygulama logosu ile ismi bulunur.

Neden Android Splash Screen API Kullanmalıyız?

Bir uygulama ilk kez başlatıldığında, uygulamanın ana ekranından önce boş beyaz bir ekran görebilirsiniz. Çünkü uygulamanın başlatılması ile hafızaya alınarak uygulama Activity’ sinin onCreate() methodunun çağırılması arasında bir gecikme yaşanıyor. Daha iyi bir kullanıcı deneyimi sağlamak amacıyla da kullanıcılara boş beyaz bir ekran göstermek yerine, uygulamamızın logosunu ve ismini gösterebiliriz.

Splash Screen Kullanılmayan Uygulama
Splash Screen Kullanılan Uygulama

Bunun dışında Splash Screen’i veri indirmek veya uygulamanızdaki ana ekranı göstermeden önce kimlik doğrulama işlemi yapmak için de kullanabilirsiniz.

Örnek Uygulamamız

Bu uygulamamızda geliştiricilerin en çok ihtiyaç duydukları senaryolardan birini gerçekleştirmeye çalışacağız; kullanıcının giriş durumunu kontrol etme ve sayfa yönlendirmesi yapma. Kullanıcılara Splash ekranı gösterilirken, arka planda kullanıcıların giriş durumlarını kontrol edip, uygulamamızın Ana Ekranına veya Giriş Ekranına yönlendireceğiz. Kimlik doğrulama işlemleri için Huawei Account Kit ve Huawei Auth Service kullanacağız. Huawei Account Kit ile kullanıcılar Huawei ID lerini kullanarak hızlı ve kolay bir şekilde uygulamaya giriş işlemlerini yapabiliriz. Auth Service ile de kullanıcıların kimlik doğrulama durumlarını saklayabiliriz.

Örnek Uygulama Akışımız

1-) HMS Core Entegrasyonu

Huawei HMS Core’ u projelerimize nasıl entegre edebileceğimizin detaylarına bu yazımızda değinmeyeceğiz. Resmi dokümanlar ya da Codelab yardımıyla HMS Core’ u projenize kolayca entegre edebilirsiniz. Ayrıca, entegrasyon adımlarını çok iyi bir şekilde hazırlanmış olan medium yazısı yardımı ile de gerçekleştirebilirsiniz.

Sonraki aşamada Auth Service ve Account Kit servislerini AppGallery Connect üzerinden aktif edelim.

HMS Core entegrasyonundan ve servislerin aktif edilmesinden sonra gerekli bağımlılıklarımızı (dependencies) ekleyelim.

2-) Kütüphanelerin Eklenmesi

Gerekli kütüphanelerimizi build.gradle (app level) içerisine ekleyelim.

3-) Temanın Eklenmesi

Splash ekranı için “Theme.SplashScreen” den kalıtım alarak yeni bir style oluşturalım. Burada açılış ekranımızı özelleştirmek için çeşitli düzenlemeler yapabiliriz; arka plan rengimizi değiştirebilir, ikon ekleyebilir ve Splash ekranından sonraki temamızı seçebiliriz.

Eğer animasyonlu bir ikon kullanmak isterseniz, animasyon süresini milisaniye cinsinden belirtmelisiniz.

<item name="windowSplashScreenAnimationDuration">400</item>

Eğer markanızı gösteren bir resmi ekranın altına yerleştirmek isterseniz, aşağıdaki kodu eklemeniz gerekiyor. Fakat bu özellik şu an minimum API 31 (Android 12) ve üzeri versiyonlarda destekleniyor.

<item name="android:windowSplashScreenBrandingImage">@drawable/ic_branding_image</item>

Eklediğim ikon tam olarak gözükmüyor. Ne yapmalıyım?

İkon boyutumuz önceden belirlenmiş olan bazı kısıtlamalara uymak zorundadır. Bu kısıtlamalar Adaptive ikonlar ile aynı kıstaslara sahip. Lütfen ikonunuzun bu kıstasları karşılayıp karşılamadığına dikkat edin ve ikonunuzun maskelenmediğinden emin olun.

4-) Android Manifest İçerisine Temanın Eklenmesi

Manifest dosyamızın içerisinde, uygulamamızın başlangıç Activity’ sinin temasını bir önceki adımda oluşturduğumuz (Theme.App.Starting) tema ile değiştirelim. Ve temamızı (Theme.SplashScreenApiApp) application içerisine ekleyelim.

Temayı manifest dosyamıza ekledikten sonra aşağıdaki hatayı alıyorum. Bunu nasıl düzeltmeliyim?

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mydemoapp/com.example.mydemoapp.LoginActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

Eğer sadece SplashScreen temanızı eklediyseniz bu hatayı alabilirsiniz. Lütfen diğer sayfalarda kullanmak istediğiniz temayı “application” tag i altına veya tüm Activity lerinizin altına eklemeyi unutmayın.

5-) Açılış Activity si İçerisinden Splash Screen’ i Çağırın

Uygulamamızın açılış Activity’ si (uygulamamız ilk kez çalıştırıldığında yüklenecek olan Activity) setContentView methodu veya diğer view operasyonlarını gerçekleştirmeden önce installSplashScreen() methodunu çağırmalıdır. Ayrıca Splash ekranımızı ekranda tutmak için setKeepOnScreenCondition methodumuzu kullanabiliriz. Bu koşulumuz true olduğu sürece Splash ekranımız gözükmeye devam edecek, false olduğunda ise kaybolacaktır.

Giriş Ekranı (Login Screen)

Ana Ekran (Home Screen)

Ekstralar

Splash ekran animasyonunu nasıl değiştirebilirim?

Splash ekranında 2 tane animasyon bulunuyor. Bunlar giriş animasyonu ve çıkış animasyonu.
Giriş animasyonu (Enter animation) splash ekranı için sistemin bize uygulama başlangıcında sağladığı animasyondur. Bu animasyon sistem tarafından kontrol edilir ve değiştirilemez (en azından şu an için).
Çıkış animasyonu (Exit animation) splash ekranı kapanırken gösterilen animasyondur. Bu animasyon üzerinde değişiklikler yapabiliriz.

Aşağıda bulunan örnekteki gibi siz de kendi animasyonunuzu oluşturabilirsiniz.

Ben “Single Activity Architecture” kullanıyorum. Splash ekranını uygulamama nasıl entegre etmeliyim? Splash ekranı için yeni bir Activity mi oluşturmalıyım?

Splash ekranı için yeni bir Activity oluşturmamıza gerek yok. Hatta “best practice” olarak Splash ekranı için yeni bir Activity oluşturmamalıyız. Kullanmış olduğumuz setKeepOnScreenCondition bizim main thread’ imizi bloklamıyor. Bu sebeple arka planda yapmak istediğiniz kimlik doğrulama, veri yükleme vs. işlemlerinizi yapabilirsiniz. Burada ViewModel ve kimlik doğrulama kullandığınızı varsayalım ve bu senaryoyu uygulayabileceğimiz bir geliştirme yapalım.

Splash screen durumlarımızı içeren bir enum class oluşturalım.

Daha sonra Splash ekranımızın durumu Loading olduğu sürece gösterimini sağlayan ve viewModel üzerindeki değişiklikleri takip eden kodumuzu ekleyelim.

Son olarak da login durumumuza göre splashScreenStatus değişkenimizi düzenleyen kodumuzu ekleyelim.

İpuçları & Tüyolar

  • Daha iyi bir kullanıcı deneyimi sağlamak için ikonlardaki animasyon süresinin 1 saniyeyi geçmemesine dikkat edin.
  • Betada olduğu için Splash Screen kütüphanesini kullanmaktan çekince duymanıza gerek yok. Android resmi kütüphane dünyasında, betanın anlamı kütüphanenin artık stabil olduğu ve ileride büyük değişiklere uğramayacağıdır.
  • Splash Screen temanızı themes.xml (night) içerisine de eklemeyi unutmayın. Aksi taktirde uygulamanız crash olacaktır.

Sonuç

Bu yazımızda, yeni Android Splash API kütüphanesini nasıl kullanabileceğimizi inceledik. Bir de örnek uygulama geliştirerek, kullanıcının giriş işlemi yapıp yapmama durumuna göre ekran yönlendirmesini gerçekleştirdik. Kimlik doğrulama sistemi olarak Huawei Account Kit ve Huawei Auth Service kullandık. Sizinle sadece “happy path” i paylaşmak istemedim, bu süreçte karşılabileceğiniz muhtemel hataları ve çözüm yollarına da değinmek istedim. Karşılaştığınız sorunları veya sorularınızı lütfen yorum olarak yazmaktan çekinmeyin.

Zaman ayırdığınız için teşekkürler, umarım yararlı olmuştur. Bir sonraki yazımızda görüşmek üzere!

Referanslar

Splash Screen Official Documentation

--

--