Huawei AppGallery ve Dynamic Ability Servisi ile Modüler Uygulama Dağıtımı
Herkese Selam,
Bu yazıda, Huawei AppGallery Connect Dynamic Ability servisi nedir, çalışma prensibi, nasıl kullanılır, ne gibi kullanım durumları ve fonksiyonları vardır konuları üzerinde duracağım. Yazımın son bölümünde bu sistemi kullanarak geliştirdiğim uygulamanın detaylarını ve çıktılarını paylaşarak konuyu daha detaylı olarak açıklamaya çalışacağım.
Dynamic Ability Nedir?
Dynamic Ability, Huawei AppGallery’ nin, Android App Bundle teknolojisi tabanlı, dinamik yüklemeyi sağlayan bir servisidir. Dynamic Ability kullanılarak oluşturulmuş uygulamalar, kullanıcı isteğine bağlı olarak Huawei AppGallery’ den uygulamanın diğer özelliklerini ve dil paketlerini indirebilirler. Dynamic Ability’ nin amacı, ağ trafiğinin ve cihaz depolama alanının gereksiz tüketiminin önüne geçmektir.
Dynamic Ability SDK, kullanıcı isteklerine göre bir uygulamanın özelliklerini ve dil paketlerini dinamik olarak yüklemek için Huawei AppGallery ile etkileşime girer. Ek olarak, yükleme durumunu dinlemek için dinleyicileri kullanabiliriz. Şu anda, Dynamic Ability SDK cep telefonlarını, akıllı ekranları ve ekranlı hoparlörleri desteklemektedir.
Çalışma Prensibi
App Bundle, Android tarafından sağlanan yeni bir paketleme biçimidir. Bir uygulamanın yeni paketlenmiş aab dosyasını Huawei AppGallery’ e yükledikten sonra, platform uygulamayı üç boyuta göre birden çok apk’ ye böler: dil, ekran yoğunluğu ve ABI mimarisi. Bir kullanıcı bir uygulamayı indirdiğinde, Huawei AppGallery, cihaz dili, ekran yoğunluğu ve ABI mimarisine bağlı olarak kullanıcı cihazı için uygun bir apk sunar. Bu, uygulamanın özelliklerini etkilemeden kullanıcı cihazındaki depolama alanı ve ağ trafiğinin tüketimini azaltır.
App Bundle teknolojisi tabanlı AppGallery Connect, dinamik özellik yükleyebilme hizmetini sağlar. Uygulamamız için ilk yükleme anında gerekli olmayan dinamik özellikler geliştirebiliriz. Bir kullanıcı bir uygulamayı ilk kez indirdiğinde, uygulamanın yalnızca temel özellik modülü indirilir ve dinamik özellikler yalnızca gerektiğinde indirilir.
Geliştirme Adımları
Dynamic Ability SDK’ sının Entegrasyonu
Proje seviyesindeki build.gradle dosyasına aşağıdaki kod bloğunda bulunan satırı ekliyoruz.
Uygulama seviyesindeki build.gradle dosyasına da aşağıdaki kod bloğunda bulunan satırı ekliyoruz.
Dynamic Ability SDK’ sının Başlatılması
Dynamic Ability SDK’ yı entegre ettikten sonra, uygulamamıza, başlatma kodunu eklememiz gerekir.
Ana projemizdeki Application sınıfından extends olarak oluşturduğumuz sınıfımızın içinde attachBaseContext metodunu Override ediyoruz ve Dynamic Ability SDK’ yı başlatmak için FeatureCompat.install fonksiyonunu aşağıdaki kod bloğunda olduğu gibi çağırıyoruz.
Eğer projemizdeki alt modüllerde Dynamic Ability SDK’ yı entegre etmemiz ve dinamik özelliklerin kullanılması ihtiyacımız olursa, alt modülümüzdeki başlangıç Activity’ si içinde attachBaseContext metodunu Override ediyoruz ve Dynamic Ability SDK’ yı başlatmak için FeatureCompat.install fonksiyonunu aşağıdaki kod bloğunda olduğu gibi çağırıyoruz.
Uygulamanın Geliştirilmesi
Dynamic Ability SDK’ nın sağladığı metotları ve API’ ları da kullanarak ihtiyacımıza uygun şekilde uygulamamız için gerekli geliştirmeleri yapıyoruz.
Uygulamanın Test Edilmesi
Son aşama olarak geliştirdiğimiz uygulamanın test edilmesi geliyor. Projemizin çıktısı olarak aldığımız aab uzantılı dosyayı direkt olarak cihazımızda test etme imkanımız maalesef yok. Bu yüzden test için iki yöntemimiz vardır.
- bundletool kullanarak uygulamamızı lokalde test edebiliriz. Ancak bu tam anlamıyla bir test olmamaktadır. Çünkü Dynamic Ability servisi Huawei AppGallery bağımlılığı olan bir servistir. Burada sadece istediğimiz modülleri cihazımıza yükleyerek bu modüller özelinde uygulamamızın nasıl çalıştığını test edebiliriz. Ancak modüllerin çalışma anında yüklenmesini sağlayamayacağımız için tam anlamıyla uygulamamızı test edemiyoruz. Bu konuyla ilgili detaylı bilgiyi Referanslar kısmına ekleyeceğim Dynamic Ability resmi dokümantasyonunda bulabilirsiniz.
- Diğer yöntemimiz ise Huawei AppGallery’ nin bizlere sağladığı Open Testing servisini kullanmaktır. Bu şekilde yapacağımız test de uygulamamızı tam anlamıyla test etmemiz mümkündür. Projemizin çıktısı olan aab dosyasını Huawei AppGallery’ e yükleyebilir, belirlediğimiz test kullanıcılarına yetki verebilir ve uygulamamızın testini gerçekleştirebiliriz. Bu konuyla ilgili detaylara da yine Referanslar kısmındaki resmi dokümantasyon linkinden ulaşabilirsiniz.
Fonksiyonlar
Dynamic Ability servisinin bize sağladığı metot ve API’ ları kısaca açıklamak istiyorum. Bu fonksiyonları kullanmaya başlamadan önce ilk olarak ihtiyacımız olan FeatureInstallManager nesnesini oluşturmalıyız. Bu işlemi FeatureInstallManagerFactory.create metodunu kullanarak yapacağız.
Yüklü Özellikler
Uygulamada hali hazırda bulunan dinamik özelliklerin listesini çekebilmek için FeatureInstallManager.getAllInstalledModules metodunu kullanabiliriz.
Özellik Yükleme
Dynamic Ability servisinin en temel fonksiyonudur. İhtiyaç duyduğumuz dinamik özellik modüllerini yüklemek için Huawei AppGallery’ e istek göndermede Dynamic Ability SDK metotlarını kullanabiliriz.
Özellik Yüklemesini İptal Et
Öncelikle her özellik yükleme isteğinin kendine özgü bir sessionId değeri olduğunu söylemek istiyorum. Bir dinamik özellik yüklemesi başladıktan sonra eğer bu yükleme işlemini iptal etmek istiyorsak, o yükleme isteğine ait sessionId değeri ile Dynamic Ability SDK içindeki FeatureInstallManager.abortInstallFeature metodunu kullanarak bu işlemi yapabiliriz.
Yükleme İsteği Durumu
Bir dinamik yükleme isteğinin durumunun ne olduğunu o yükleme isteğine özgü sessionId değerini kullanarak Dynamic Ability SDK içindeki FeatureInstallManager.getInstallState metodu ile öğrenebiliriz.
Tüm Yükleme İsteklerinin Durumu
Daha önceden isteği yapılmış tüm dinamik özellik yükleme isteklerinin durumunu Dynamic Ability SDK içindeki FeatureInstallManager.getAllInstallStates metodu ile öğrenebiliriz.
Ertelemeli Özellik Yükleme
Eğer bir dinamik özelliğin anında yüklenmesi gerekmiyorsa, ertelemeli özellik yüklemeyi kullanabiliriz. Bu yöntem ile dinamik özellik, uygulama arka planda çalışırken yüklenebilir. Ertelemeli dinamik özellik yüklemek için Dynamic Ability SDK içindeki FeatureInstallManager.delayedInstallFeature metodunu kullanabiliriz. Bir dinamik özellik için ertelemeli özellik yükleme isteğinde bulunduktan sonra Huawei AppGallery, cihazın çalışma durumuna göre yükleme işlemini gerçekleştirecektir.
Ertelemeli Özellik Silme
Kullanılmayan dinamik özellikleri silebilmek için Dynamic Ability SDK içindeki FeatureInstallManager.delayedUninstallFeature metodunu kullanabiliriz. Ertelemeli özellik yüklemedeki duruma benzer şekilde Huawei AppGallery, uygulama arka plandayken, cihazın çalışma durumuna göre uygun bir zamanda dinamik özelliğin silinmesi işlemini gerçekleştirecektir.
Dil Paketi Yükleme
Uygulamalarımızda birden fazla dil için destek sağlayabiliriz. Eğer bu dil desteğini, kullanıcının cihaz dili dışında, uygulamanın çalışma anında kullanıcının uygulama içerisinden değiştirmesine izin verecek şekilde uygulamamızı geliştirirsek gerekli dil paketinin yüklenmesi için Dynamic Ability SDK içinde bulunan metotları kullanabiliriz. Buradaki yapı dinamik özellik yüklemeye benzer şekildedir.
Not: Bir dil paketinin dinamik olarak yüklenmesi için bir isteğe eklenen dil paketi bilgilerinin ülke kodunu içermesi gerekmez. Örneğin, bir Fransız paketi yüklemek için yalnızca fr girilmesi gerekir. Dynamic Ability SDK, birden çok ülke ve bölgenin Fransız kaynaklarını otomatik olarak yükler. Bu nedenle, belirsizliği azaltmak için, dilin orijinal değerini değiştirmek için Locale.forLanguageTag(lang) yöntemini kullanmanız önerilir.
Yükleme Durumu Dinleyicisi
Dinamik bir özellik yüklenmeye başladıktan sonra, dinamik yükleme durumunu dinlemek için Dynamic Ability SDK içindeki yükleme durumu dinleyicisini kullanabiliriz. Kullanacağımız dinleyiciyi Activity yaşam döngüsü çerçevesinde kontrol etmemiz gerekiyor. Bunun için onResume ve onPause metotlarının içine dinlemeyi başlatma ve durdurma kodlarını eklemeliyiz. Dinleyici içinde oluşabilecek durumları aşağıda açıklamaya devam edeceğim.
- REQUIRES_USER_CONFIRMATION
Dynamic Ability servisinin kullanılabilmesi için Huawei AppGallery sözleşmesinin kabul edilmesi gereklidir. Dinamik özellik yüklenmesi başlamadan önce Dynamic Ability SDK bu durumu kontrol eder ve eğer kullanıcı hali hazırda bu sözleşmeyi kabul etmediyse REQUIRES_USER_CONFIRMATION durumu gerçekleşir. Bu durumda Dynamic Ability SDK içindeki FeatureInstallManager.triggerUserConfirm metodunu kullanarak ekranda bir diyalog ekranının açılmasını ve sözleşme onayının kullanıcıdan alınmasını sağlayabiliriz. Eğer kullanıcı bu diyalog ekranından sözleşme onayını verirse yükleme işlemi devam eder. Sözleşme onayı verilmezse de yükleme işlemi sonlandırılır.
- REQUIRES_PERSON_AGREEMENT
Dinamik özelliğin yüklenmesi başlamadan önce Dynamic Ability SDK, cihazın o anda mobil veriyi kullanıp kullanmadığını kontrol eder. Eğer mobil veri kullanıyorsa, REQUIRES_PERSON_AGREEMENT durumu gerçekleşir. Bu durumda Dynamic Ability SDK içindeki FeatureInstallManager.triggerUserConfirm metodunu kullanarak ekranda bir diyalog ekranının açılmasını ve gerekli onayının kullanıcıdan alınmasını sağlayabiliriz. Eğer kullanıcı bu diyalog ekranından gerekli onayını verirse yükleme devam eder. Gerekli onay verilmezse de yükleme işlemi sonlandırılır.
- DOWNLOADING
Dinamik yüklemenin yükleme ilerlemesini bu durum gerçekleştiğinde hesaplayabilir ve kullanıcımıza yükleme ilerlemesi ile ilgili bilgi verebiliriz.
- INSTALLED
Dinamik özellik yüklememizin başarıyla sonuçlandığını ve artık bu dinamik özelliği kullanabilir olduğumuzu bildiren durumdur.
- FAILED
Dinamik özellik yükleme işlemimizin gerçekleşmediğini bildiren durumdur. Elde edeceğimiz hata kodu ile işlemin neden gerçekleşmediği ile alakalı bilgi sahibi olabiliriz.
Örnek Uygulama
Daha önce buradaki yazım için oluşturduğum uygulamam üzerinde Dynamic Ability servisi için de kullanım durumu örnekleri oluşturdum. Kısaca uygulamadan bahsetmem gerekirse; bir mekan listemiz var, bu mekanların bilgilerini görüntüleyebiliyoruz ve harita üzerinde bu mekanların konumlarını görebiliyoruz. Kullanıcı dilerse kendi konumundan seçtiği mekana rota çizebiliyor ve yönlendirme bilgilerini elde edebiliyor. Dynamic Ability servisi için ise şu iki kullanım durumunu bu uygulamaya ekledim. Bunlardan ilki, dil paketleri ile alakalı. Kullanıcı isterse uygulamanın destek verdiği dil paketleri arasında uygulamanın çalışma anında geçiş yapabiliyor. Yani Dynamic Ability SDK’ nın metot ve API’ larını kullanarak uygulamanın ilk yükleme anında yüklü olmayan dil paketlerinin yüklenmesini sağlıyorum. Bir diğer kullanım durumu ise, rota çizme ve yönlendirme bilgilerinin elde edilmesi özelliği ile ilgili. Rota çizme özelliğini, projeye modüler yapıda ve Huawei AppGallery’ den uygulamanın ilk yüklenmesi anında yüklenmemesi ayarı ile ekledim. Dil paketlerinin yüklenmesine benzer şekilde Dynamic Ability SDK’ nın metot ve API’ larını kullanarak bu özelliğin çalışma anında yüklenmesini sağlıyorum. Aşağıda paylaşacağım uygulama çıktılarıyla daha detaylı olarak açıklamaya devam edeceğim.
Dil Paketlerinin Yüklenmesi
Uygulama için İngilizce ve Türkçe olmak üzere iki dilde destek sağlıyorum. Huawei AppGallery’ e uygulamamızı aab dosyası olarak yüklediğimizde Huawei AppGallery, uygulamanın ilk yükleme anında cihazda yüklü olan dillere göre uygun dillerin dil paketlerinin uygulama için yüklenmesini sağlar. Cihazda yüklü olan dilleri ayarlar ekranındaki ilgili yerde, aşağıdaki resimde bulunan ekran görüntüsünde de olduğu gibi, görebilirsiniz.
Yukarıdaki resimde de görüldüğü üzere cihazımızda sadece İngilizce dili yüklü. Bu yüzden uygulamanın ilk yüklenme anında Huawei AppGallery bize, uygulama için, sadece İngilizce dil paketini sağlayacaktır. Kullanıcı uygulama içerisinde Türkçe dil paketine geçmek istediğinde, Türkçe dil paketinin yüklenmesini, Huawei AppGallery üzerinden, aşağıdaki çıktıda da görüldüğü gibi, sağlıyoruz.
Rota Çizme Özelliğinin Yüklenmesi
Rota çizme özelliğini projeye modüler yapıda ve uygulamanın Huawei AppGallery’ den ilk yüklenmesi anında yüklenmemesi ayarı ile eklediğimiz için uygulamanın ilk yüklenmesi anında Huawei AppGallery, kullanıcının cihazına bu özelliği yüklemeyecektir. Kullanıcı istediği mekana rota çizmek istediğinde öncelikle rota çizme özelliğinin kullanıcının cihazında yüklü olup olmadığını kontrol ediyoruz. Eğer hali hazırda bu özellik yüklü ise gerekli akışı devam ettiriyoruz ve rota çizme işlemini gerçekleştiriyoruz. Yüklü değil ise kullanıcıya bu durumla ilgili bilgi verip yükleme işlemini yapmak isteyip istemediğini soruyoruz. Kullanıcı onayı verdiğinde ise Huawei AppGallery üzerinden rota çizme özelliğinin yüklenmesini sağlıyoruz. Aşağıdaki çıktıda bu anlattığım durumu görüntüleyebilirsiniz.
Yüklü Özelliğin Silinmesi
Kullanıcı rota çizme özelliğini yükledikten sonra, istemesi halinde, bu özelliği cihazından kaldırabilir. Aşağıdaki çıktıda da görüldüğü üzere, kullanıcı yüklü özellik listesinden silmek istediği özelliği seçerek dinamik özellik yüklemesini kaldırabilir. Özelliğin silinmesi işlemi arka plan cihazın çalışma durumuna göre uygun bir zamanda Huawei AppGallery tarafından gerçekleştirilecektir.
Yazıma konu olan Dynamic Ability servisi ile ilgili kullandığım kaynakları Referanslar bölümüne ekledim. Daha detaylı bilgiye erişebilmek için bu kaynaklara göz atabilirsiniz.
Bu yazımda, Huawei’ in Dynamic Ability servisini örnek bir proje üzerinde açıklamaya çalıştım. Umarım herkes için faydalı olmuştur. Lütfen sorularınız olursa sormaktan çekinmeyin. Bir sonraki yazımda görüşmek üzere :’)