CMS DEMO’yu Keşfedin: Android’de Hesap Kiti ve Kimlik Doğrulama Servisi Örnekleri
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
📌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 AccountService
nesnesi 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 AccountScreen
iç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 AccountService
nesnesinin, 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ındatextViewAccountInfo
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, accountService
aracı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ş
📌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 AuthService
nesnesinin, 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 😊