Fragment İçerisinde MVVM Mimarisi ile Auth Service Kullanımı

Feyza Ürkut
Huawei Developers - Türkiye
3 min readNov 15, 2022

Giriş

Herkese merhaba 🙌 Bu makalede startActivityForResult() fonksiyonuna ihtiyaç duyan Huawei Auth Service’i fragment içerisinde nasıl kullanacağımızı ve MVVM mimarisine nasıl adapte edeceğimizi anlatacağım.

HMS Auth Service

Auth Service, uygulamalarımızın kullanıcıların kimliğini doğrulaması için hızlı ve güvenli bir kullanıcı kimlik doğrulama sistemi oluşturmanıza yardımcı olur. Ve birden fazla üçüncü taraf kimlik doğrulama yöntemini destekler. Uygulamamızda Auth Service’i kullanabilmek için öncelikle projemizin ön hazırlıklarını tamamlayalım.

Implementations & Permissions

1- App Gallery Connect’te bir uygulama oluşturun ve App Gallery Connect SDK’yı uygulamanıza entegre edin. Ayrıntılar için ilgili codelab’ i takip edebilirsiniz: Preparations for Integrating HUAWEI HMS Core

2- AppGallery Connect’te Auth Service ve Account Kit ‘ i etkinleştirin.

3- Auth Service SDK ’yı uygulamanıza entegre edin.

app-level gradle file

4- AndroidManifest.xml dosyasına gerekli izinleri ekleyin.

Artık uygulamamızda Auth Service’i kullanmaya başlayabiliriz🎊

Bir Activity’den Sonuç Alma

Bir aktiviteyi sonuç alacak şekilde başlatmak için startActivityForResult() metodu, başlatılan aktiviteden elde edilen sonuçları almak ve işlem yapmak için ise, onActivityResult() metodu kullanılırdı. Ama artık bu fonksiyonlar DEPRECATED oldu.

Temel startActivityForResult() ve onActivityResult() API’leri tüm API düzeylerinde Activity sınıfında kullanılabilirken, artık AndroidX Activity ve Fragment’ında tanıtılan Activity Result API’lerinin kullanılması öneriliyor.

Peki bu yeni yöntem nedir gelin birlikte bakalım.

Activity Result Contracts

Bu yeni Activity Results API’yini kullanma işlemi şuna benziyor.

İlk olarak, contract’ınızı custom olarak tanımlamanız veya mevcut olanı kullanmanız gerekir. Contract, Activity Result Contracts arayüzünün uygulanmasıdır. Biz Huawei Auth Service üzerinden gideceğimiz için ActivityResultContracts.StartActivityForResult‘ı kullanabiliriz.

Contract’ımıza karar verdikten sonra bir sonraki adım, registerForActivityResult() yöntemi ile onu Activity Result API’sine kaydetmektir.

Son olarak, launch() çağrısı ile oluşturduğumuz contract’ı sonucu üretme işlemi için çalıştırıyoruz.

Artık onActivityResult() yöntemi yerine kullanacağımız Activity Results Contracts ile, kodlarımızı daha temiz, düzenli ve yeniden kullanılabilir hale getirmiş olduk 🎉

Şimdi Huawei Auth Service’i MVVM mimarisine temiz kod yazma yöntemleri ile nasıl adapte edebileceğimize bakalım.

Dependency Injection

Burada bağımlılık oluşturacak nesneleri Module class oluşturarak ayırıp, bunların dışardan verilmesiyle sistem içerisindeki bağımlılığı minimize ediyoruz.

Repository

Repository Pattern, veri katmanını uygulamanın geri kalanından izole eden bir tasarım modelidir. Bu modeldeki asıl amaç veri işlem ve sorgulamaların tekrarlardan kaçınılarak merkezi bir yapıya çekilmesidir. Biz bu aşamada Sign In işlemini repository sınıfı içinde tanımlıyoruz.

ViewModel

ViewModel sınıfı içerisinde öncelikle gözlemlenebilir bir nesne oluşturmalıyız. Daha sonra repository içerisindeki Sign in işlevimizi çağırıp sonucunu oluşturduğumuz nesneye atayarak, UI tarafında da bu nesneyi gözlemleyip, gelen duruma göre ilgili değişiklikleri yapabiliriz. Bununla View sadece isteklerini ViewModel’a bildirir ve sonrasında ViewModel’ i dinler.

Sonuç

onActivityResult yönteminde bize dönecek olan data’nın tipini sadece biz biliyorduk ve bu zamana kadar bütün durumları tek bir fonksiyon içerisinde kendimiz yönetiyorduk. Bu durumda farklı bir değer ile karsılaşma ihtimali vardı ve bunun için gelen değerin tipinden emin olmak gerekiyordu.

Yeni yöntem olan Activity Result Contracts ile istenen sonuçlar için giriş parametresini açıkça tanımlayarak her işlemin kontrolünü ayrı tutuyoruz.

Bu sayede hem kod okunabilirliğini artırıp hem de farklı tipteki dönüşlerden kaynaklı problemlerden, olası NPE (NullPointerException) hatalarından kaçınmış oluyoruz.

Ve tercih ettiğimiz mimarilerden MVVM ile Huawei Auth Service’i projelerimize entegre ederken nasıl Separation of Concerns prensibine bağlı kalabileceğimizi gördük.

Umarım yararlı bir yazı olmuştur. Herkese keyifli çalışmalarr 😊

Referanslar

--

--