CMS DEMO’yu Keşfedin: Android’de Hesap Kiti ve Kimlik Doğrulama Servisi Örnekleri

Feyza Ürkut
Huawei Developers - Türkiye
7 min read5 days ago
Photo by Andy Vult on Unsplash

Giriş

Common Mobile Services (CMS) kütüphanesi, Huawei ve Google Mobil Servislerinin tek bir çözüm aracılığıyla entegrasyonunu basitleştirirken CMS DEMO projesi, geliştiricilerin CMS kütüphanesini projelerine kolayca entegre etmelerine yardımcı olacak pratik örnekler sunar.

Bu makalede, CMS DEMO projesini keşfedeceğiz ve Android’deki Hesap Kiti ve Kimlik Doğrulama Servisi örneklerine odaklanacağız.

CMS kütüphanesi hakkında daha detaylı bilgi için bu yazıya göz atabilirsiniz:

Android’de Harita, Konum ve Reklam Kiti örneklerini konu alan bir önceki yazımızı incelemek isterseniz:

CMS DEMO Projesine Hızlı Bir Genel Bakış

Sorunsuz bir entegrasyonu kolaylaştırmak için CMS DEMO projesi, Common Mobile Services kütüphanesinin yeteneklerini ve işlevselliklerini sergileyen canlı bir demo sunar. Bu demo uygulaması, geliştiricilerin en son özelliklere ve iyileştirmelere erişimini sağlamak için sürekli olarak yeni kit demolarıyla güncellenmektedir.

Bir sonraki bölümde, Android’deki Hesap Kiti ve Kimlik Doğrulama Servisi örneklerine odaklanarak CMS DEMO projesini ayrıntılı olarak inceleyeceğiz.

Hesap Kiti: Basit, Hızlı ve Güvenli Oturum Açma ve Yetkilendirme

AccountScreen

📌Adım 1: Hesap hizmeti örneğini enjekte edin

Bu fonksiyon, uygulama genelinde kullanılacak olan AccountService nesnesini sağlar.

Fonksiyon, @Singleton anotasyonu ile işaretlenerek, uygulama genelinde AccountService nesnesinin tek bir örneğinin kullanılmasını garanti eder. @Provides anotasyonu ise Dagger'a bu fonksiyonun bir bağımlılık sağlama fonksiyonu olduğunu söyler.

Fonksiyonun içerisinde, AccountServic.Factory.create() metoduyla bir AccountServicenesnesi oluşturuluyor. Bu nesnenin oluşturulması sırasında, context parametresi olarak uygulama bağlamı (ApplicationContext) veriliyor. Ayrıca, e-posta gibi ek bilgiler almak amacıyla kullanıcıdan izin almak için SignInParams’a ihtiyaç vardır.

📌Adım 2: AccountScreen için XML Düzeninin Oluşturulması

Öncelikle AccountScreeniçin bir fragment dosyası oluşturun ve XML dosyasındaki düzenini tanımlayın.

Kullanıcı arayüzü öğelerinin konumlarını yönetmek için ConstraintLayout'u kullanın; hesap ekranı başlığını görüntülemek için en üste bir TextView ve daha sonra gerekli 3 butonu yerleştirin. Bu butonlardan ilki, bir SignInButton’dur; bu, kullanıcıların oturum açmasını sağlamak için özel olarak tasarlanmış bir giriş butonudur ve üçüncü taraf kütüphane olan CMS tarafından sağlanmaktadır.

📌 Adım 3: AccountScreen Fragment’ını Uygulama

🔸Create account service instance

Bu satır, Dagger Hilt kullanarak AccountServicenesnesinin, sınıf içerisine lateinit enjeksiyon ile enjekte edilmesini sağlar.

🔸initializeAccountService()

Bu fonksiyon, signIn, getLastSignedAccount ve signOut fonksiyonlarini butonlarin tıklama işlevleriyle ilişkilendirir.

🔸signIn()

Bu fonksiyon, accountService üzerinden oturum açma işlemini başlatmak için bir giriş isteği alır ve bu isteği startActivityForResult ile belirtilen REQUEST_CODE kullanarak bir etkinlik sonucu beklemek üzere başlatır.

🔸getLastSignedAccount()

Bu fonksiyon, accountService üzerinden sessiz oturum açma (silentSignIn) işlemi gerçekleştirerek kullanıcının en son oturum açtığı hesap bilgilerini alır. ResultCallback arayüzü kullanılarak oturum açma sonucuna göre farklı işlemler yapılır.

  • onSuccess metodu, başarılı bir girişte kullanıcının kimlik bilgilerini (ID, e-posta, ad) alıp, bu bilgileri bir metin formatında textViewAccountInfo bileşenine yerleştirir.
  • Eğer oturum açma başarısız olursa, onFailure metodu "Lütfen önce oturum açın" mesajını gösterir.
  • onCancelled metodu ise işlemin iptal edildiği bilgisini ekrana yansıtır.

🔸onActivityResult()

Bu fonksiyon, oturum açma işlemi için sonuçları işlemek amacıyla onActivityResult metodunu kullanır. Belirtilen requestCode'un REQUEST_CODE ile eşleşmesi ve data nesnesinin boş olmaması durumunda, accountService aracılığıyla oturum açma sonucunu işlemek için onSignInActivityResult çağrılır.

Sonuç, ResultCallback arayüzü kullanılarak işlenir:

  • Başarılı bir oturum açma durumunda kullanıcının kimlik bilgileri ekrana yazdırılır.
  • Bir hata olursa hata mesajı gösterilir.
  • Işlem iptal edilirse iptal mesajı ekrana yansıtılır.

🔸signOut()

Bu fonksiyon, accountServicearacılığıyla oturum kapatma işlemini başlatır ve işlem başarılı, başarısız veya iptal edildiğinde duruma uygun mesajı ekrana yansıtır.

Kimlik Doğrulama Servisi: Bir veya Daha Fazla Kimlik Doğrulama Modu

1- Eposta/Şifre Girişi

2- Telefon Numarasıyla Giriş

AuthScreen
AuthScreen

📌Adım 1: Kimlik doğrulama hizmeti örneğini enjekte etme

Bu kod, Dagger Hilt kullanarak bir bağımlılık enjeksiyonu modülü tanımlar. @Module ve @InstallIn(SingletonComponent::class) anotasyonları, modülün uygulama boyunca geçerli olan (singleton) bağımlılıkları sağlaması gerektiğini belirtir. AuthServiceModule sınıfı içinde, @Singleton ve @Provides ile işaretlenmiş bir fonksiyon, AuthService'i oluşturur ve Context bağımlılığını kullanarak bu servisi sağlar. @ApplicationContext anotasyonu ise, uygulama genelinde kullanılan bağlamın (Context) enjekte edileceğini belirtir.

📌Adım 2: Email Password ve Phone Sign In için XML Düzeninin Oluşturulması

İlk olarak, kullanıcıdan e-posta ve şifre bilgilerini almak için bir kayıt (sign up) sayfası oluşturduk. Bu sayfada kullanıcı, e-posta ve şifresini girerek hesap oluşturabiliyor. Sonrasında, mevcut kullanıcıların oturum açabilmesi için bir oturum açma (sign in) sayfası hazırladık. Bu sayfada, kullanıcı yine e-posta ve şifresini girerek giriş yapabiliyor. Ayrıca, aynı sayfaya oturumu kapatmak için bir oturum kapatma (sign out) butonu da ekledik.

1- Eposta/Şifre Girişi

🎯 Adım 1: EmailPasswordScreen Fragment’ını Uygulama

🔸Kimlik doğrulama hizmeti örneği oluştur

Bu satır, Dagger Hilt kullanarak AuthServicenesnesinin, sınıf içerisine lateinit enjeksiyon ile enjekte edilmesini sağlar.

🔸signInWithEmail()

Bu kod, e-posta ve şifre ile oturum açma işlemini gerçekleştiren bir fonksiyondur. Kullanıcıdan e-posta ve şifre alınır; eğer bu bilgiler boşsa, bir hata mesajı gösterilir. Bilgiler doğruysa, authService kullanılarak oturum açma işlemi başlatılır. Oturum başarılı olursa, e-posta ve şifre alanları temizlenir ve kullanıcıya hoş geldiniz mesajı gösterilir. Eğer oturum açma işlemi başarısız olursa, hata mesajı ekrana yansıtılır.

🔸checkUser()

Bu kod, mevcut oturum açmış bir kullanıcı olup olmadığını kontrol eden bir fonksiyondur. authService kullanarak oturum açmış bir kullanıcı alır (getUser()). Eğer kullanıcı mevcutsa, kullanıcı kimliğiyle birlikte bir hoş geldiniz mesajı gösterilir. Kullanıcı yoksa, genel bir hoş geldiniz mesajı görüntülenir.

🔸signOut()

Bu kod, kullanıcının oturumunu kapatan bir fonksiyondur. authService.signOut() fonksiyonu ile oturum kapatılır ve ardından checkUser() çağrılarak oturum açmış bir kullanıcı olup olmadığı tekrar kontrol edilir.

🎯Adım 2: SignUpScreen Fragment’ını Uygulama

🔸signUp()

Bu kod, e-posta ve şifre ile kullanıcı kaydı gerçekleştiren bir fonksiyondur. Kullanıcıdan e-posta ve şifre alınır; eğer bu alanlar boşsa, bir hata mesajı gösterilir. Bilgiler geçerliyse, authService.signUp ile kayıt işlemi başlatılır. Kayıt başarılı olursa, doğrulama türüne göre iki farklı işlem yapılır: Eğer doğrulama kodu gerekiyorsa, bir uyarı penceresi gösterilir (showAlertDialog()); doğrulama gerekmezse, başarı mesajı gösterilir ve önceki ekrana geri dönülür. Kayıt başarısız olursa, hata mesajı ekrana yansıtılır.

🔸showAlertDialog()

Bu kod, kullanıcıdan doğrulama kodunu almak için bir uyarı penceresi (alert dialog) gösteren bir fonksiyondur. AlertDialog.Builder kullanarak bir uyarı penceresi oluşturulur ve özel bir görünüm (bindingVerify.root) pencereye eklenir. Kullanıcı "Doğrula" butonuna tıkladığında, verifyCode(dialog) fonksiyonu çağrılarak doğrulama işlemi başlatılır. Ardından, oluşturulan diyalog gösterilir (dialog.show()).

🔸verifyCode()

Bu kod, kullanıcının girdiği doğrulama kodunu işleyen bir fonksiyondur. Doğrulama kodu alanı boşsa, bir hata mesajı gösterilir. Kod boş değilse, authService.verifyCode fonksiyonu ile e-posta, şifre ve doğrulama kodu kullanılarak doğrulama işlemi gerçekleştirilir. Doğrulama başarılı olursa, başarı mesajı gösterilir, diyalog kapatılır ve önceki ekrana geri dönülür. Eğer doğrulama başarısız olursa, hata mesajı ekrana yansıtılır.

2- Telefon Numarasıyla Giriş

🎯 Adım 1: PhoneSignInScreen Fragment’ını Uygulama

🔸initUI()

Bu kod, bir Android uygulamasında kullanıcı arayüzü (UI) elemanlarını başlatır ve belirli koşullara göre görünürlüklerini ve işlevlerini ayarlar. İlk olarak, cihazın hangi mobil servis türünü (GMS veya HMS) kullandığını kontrol eder ve eğer GMS (Google Mobile Services) kullanılıyorsa, kayıt olma seçeneği (tvSignUp) görünmez hale getirilir ve telefon kodu GMS'e özgü bir kodla güncellenir. Ardından, çeşitli butonlara tıklama dinleyicileri atanarak, kullanıcıların kayıt olma, giriş yapma ve çıkış yapma işlemleri gerçekleştirilir.

🔸signInWithPhone()

Bu kod, bir Android uygulamasında telefon numarası ile giriş yapma işlemini gerçekleştirir. Kullanıcıdan telefon numarası ve şifre alınır, eğer bu bilgiler boşsa bir hata mesajı gösterilir. Boş değilse, önce belirtilen telefon numarasına doğrulama kodu gönderilir. Doğrulama kodu başarıyla gönderilirse, kullanıcıya bu kodu girmesi için bir uyarı penceresi (alert dialog) gösterilir. Kod gönderme işlemi başarısız olursa, hata mesajı kullanıcıya gösterilir.

🔸showAlertDialog()

Bu kod, bir Android uygulamasında doğrulama kodunu girmek için kullanıcıya bir uyarı penceresi (alert dialog) gösterir. AlertDialog.Builder kullanarak bir diyalog oluşturur ve bindingVerify.root adlı bir görünüme (doğrulama kodunu girmek için hazırlanmış bir UI bileşeni) sahip olmasını sağlar. Kullanıcı "Doğrula" (Verify) düğmesine bastığında, verifyCode fonksiyonu çağrılarak girilen doğrulama kodu işlenir. Diyalog oluşturulup gösterildikten sonra, kullanıcı bu diyalog üzerinden doğrulama işlemini gerçekleştirebilir.

🔸verifyCode()

Bu kod, kullanıcıdan alınan doğrulama kodunu kullanarak telefonla giriş yapma işlemini gerçekleştirir. Girilen kod boşsa, hata mesajı gösterilir. Kod boş değilse, telefon numarası, şifre ve doğrulama kodu kullanılarak giriş yapılır. Giriş başarılı olursa, kullanıcıya bir başarı mesajı gösterilir, dialog kapatılır ve arayüz güncellenir (giriş alanları temizlenir, karşılama mesajı gösterilir). Başarısız olursa, hata mesajı görüntülenir.

🔸checkUser()

🔸signOut()

Bu kod, kullanıcının oturum durumunu kontrol eder ve oturum açma/çıkma işlemlerini yönetir. checkUser fonksiyonu, kullanıcı oturum açmışsa telefon numarasını alıp ekrana "Hoş geldiniz" mesajı ile birlikte gösterir, oturum açılmamışsa genel bir hoş geldiniz mesajı gösterir.

signOut fonksiyonu ise kullanıcının oturumunu kapatır ve ardından checkUser fonksiyonunu çağırarak güncel oturum durumunu kontrol eder.

🎯Adım 2: PhoneSignUpScreen Fragment’ını Uygulama

🔸signUpWithPhone()

Bu kod, telefon numarası ile kayıt olma işlemini başlatır. Kullanıcıdan telefon numarası ve şifre alınır, bu alanlar boşsa bir hata mesajı gösterilir. Boş değilse, belirtilen telefon numarasına doğrulama kodu gönderilir. Kod başarılı bir şekilde gönderildiğinde, kullanıcıya bu kodu girmesi için bir doğrulama penceresi gösterilir. Gönderim başarısız olursa, hata mesajı kullanıcıya iletilir.

🔸showAlertDialog()

🔸verifyCode()

Bu kod, kullanıcıya doğrulama kodunu girmesi için bir uyarı penceresi (alert dialog) gösterir. AlertDialog.Builder kullanarak bir diyalog oluşturur ve doğrulama ekranı (bindingVerify.root) eklenir. Kullanıcı "Doğrula" düğmesine bastığında, verifyCode fonksiyonu çağrılarak girilen kod işlenir. Ardından diyalog gösterilir.

Bu kod, kullanıcıdan alınan doğrulama kodunu kullanarak telefonla kayıt olma işlemini gerçekleştirir. Eğer doğrulama kodu boşsa, hata mesajı gösterilir. Kod boş değilse, telefon numarası, şifre ve doğrulama kodu kullanılarak kayıt işlemi yapılır. Kayıt başarılı olursa, başarı mesajı gösterilir, dialog kapatılır ve önceki ekrana geri dönülür. Kayıt başarısız olursa, hata mesajı kullanıcıya iletilir.

Sonuç

Bu makalede, CMS DEMO projesini kullanarak bir Android uygulamasına Account ve Authentication (Auth) servislerinin entegrasyonunu inceledik. Bu örnekleri takip ederek, projelerinizde kullanıcı kimlik doğrulama ve hesap yönetimini etkili bir şekilde uygulayabilir, güvenliği ve kullanıcı deneyimini artırabilirsiniz.

CMS DEMO’yu daha ayrıntılı incelemekten ve projelerinize nasıl fayda sağlayabileceği konusunda geri bildiriminizi bizimle paylaşmaktan çekinmeyin 😊

Referanslar

--

--