HUAWEI Servisleri Kullanarak Book Store Uygulaması Geliştirmek| HMS | Kotlin

Sezer Özaltun
Huawei Developers - Türkiye
6 min readSep 14, 2022
HMS Servisleri

GİRİŞ

Herkese merhabalar,

Bu makalede sizlere Huawei servislerini kullanarak Book Store uygulamasını nasıl geliştirdiğimi anlatacağım. Öncelikle bu uygulama içerisinde kullandığım servislerden bahsetmek istiyorum. Bunlar ; Account Kit, Location Kit, Map Kit, Push Kit, Site Kit, Analytics Kit, Auth Service ve Cloud DB. Bu makalede Location Kit, Map Kit , Site Kit ve Cloud DB’yi anlatacağım. Kodlamaya başlamadan önce kısaca sırasıyla kullanacağımız servislerden bahsetmek istiyorum.

SERVİSLER HAKKINDA

1.Location Kit

Location Kit, cihaz konumunu hızlı bir şekilde almamıza olanak sağlar ve global konum yetenekleri oluşturmamıza ve global işinizi genişletmenize yardımcı olur.

2. Map Kit

Map Kit, kişiselleştirilmiş harita gösterimini ve etkileşimi kolaylıkla uygulamanız için güçlü ve kullanışlı harita hizmetleri sağlar.

3. Site Kit

Site Kit, yer arama, saat dilimi arama, coğrafi kodlama ve idari bölge arama gibi birçok arama özelliği sunarak uygulamanızın daha fazla kullanıcı çekmesine yardımcı olur.

4. Cloud DB

Cihaz ile cloud arasında ve cihazlar arasında sorunsuz veri senkronizasyonu sağlayan ve çevrimdışı uygulama işlemlerini gerçekleştimemizi sağlayan bir veritabanıdır.

Cloud DB, Object Modele dayalı veri depolama yapısını kullanır. Veriler object olarak farklı DB Zone bolgesinde depolanır. Her object bir veri kaydıdır. Cloud DB Zone bağımsız bir depolama alınıdır.

Object Type : Klasik veritabanı mantığında bulunan her bir tabloyu teslim eder.

Cloud DB Zone : Cloud tarafındaki veri bolgesini teslim eder. Veritabanı adına karşılık gelir.

UYGULAMA

Kodlama kısmına başlamadan önce uygulamanıza HMS Core entegre etmeniz gerekiyor. Bunun için buradaki bağlantıya tıklayabilirsiniz.

HMS Core entegre ettikten sonra gerekli izinleri vermemiz ve gerekli kütüphaneleri eklememiz gerekiyor.

Bunun için öncelikle Android Manifest Dosyasındaki izinleri tanımlayalım.

AndroidManifest.xml

Şimdi ise build.gradle(app) içinde gerekli kütüphaneleri ekleyelim.

build.gradle

İzinleri verdik. Şimdi ise layout xml dosyamızı düzenlememiz gerekiyor.

MapActivity.kt’ye ait activity_map.xml dosyası içinde aşağıdaki kodları ekleyelim.

activity_map.xml

Layout dosyamızı da bitirdik. MapActivity.kt dosyamızın içerisinde gerekli kodları yazabiliriz.

Kodlamaya başlamadan önce haritanın çalışabilmesi için OnMapReadyCallBack implement etmemiz gerekiyor. Implement ettikten sonra ihtiyacımız olan değişkenleri oluşturuyoruz.

MainActivity.kt 1

Değişkenleri oluşturduktan sonra şimdi de map kit SDK’ yı yüklememiz gerekiyor. Aşağıdaki gibi kodlarımızı yazıyoruz.

MainActivity.kt 2

Şimdi ise konumu almak için bazı izinleri almamız gerekiyor. Ayrıca her cihazda farklı android sürümü yüklü olduğu için versiyon kontrolü de yapmamız gerekiyor. Hadi şimdi de bu kodları yazalım.

MapActivity.kt 3

Şimdi ise Site Kit kullanımına geçebiliriz. Öncelikle konumumuzu alalım.

Konumu alırken Fused Location kullanarak kullanıcının anlık konumunu alabiliyoruz. Eğer kullanıcı konumu değiştirirse requestLocationUpdates çağırıyoruz.

MapActivity.kt 4

Konumumuzu aldık. Her şey mükemmel. Hadi yakındaki kitap mağazalarını bulalım. Bunun için Site Kit özelliği olan NearbySearch kullanacağız. Kodları aşağıda görebilirsiniz.

location : Kullanıcının konumu

radius: tarama yapacağımız alanı belirtir. Default değeri 1000 dir.

query: arama yapmak istediğimiz keyword

poitype: arama yapmak istediğimiz yerin tipi. Örneğin biz BOOKSTORE kullanacağız.

NOT : Huwai api key yazan alana kendi uygulamanızın apisini yazmalısınız. AppGalleryConnect üzerinden bakabilirsiniz.

MapActivity.kt 5

Yakınımızdaki kitap mağazalarını aldık. Şimdi ise bunları harita üzerinde gösterelim. Map Kit özelliği olan marker eklemeyi kullanacağız. Böylece daha güzel bir görüntü elde edeceğiz. Marker eklerken kişiselleştirilmiş bir ikon kullandım. Siz dilerseniz default ikon kullanabilirsiniz.

MapActivity.kt 6

Şu ana kadar her şey mükemmel. Tek bir şey kaldı. Harita üzerinde yaptıklarımızı göstermek. Bunun için yazının en başında söylediğim gibi OnMapReadyCallBack implement etmiştik. Implement ettikten sonra bize override fun onMapReady eklememizi istiyor. Bunu ekliyoruz ve içine aşağıdaki kodları yazıyoruz.

MapActivity.kt 7

CLOUD DB İLE ÇALIŞMAK

Şu ana kadar Location Kit, Map Kit ve Site Kit ile çalıştık. Uygulamız içerisinde Google Books Api üzerinden alınan kitaplar gösteriliyor ve uygulamaya giriş yapmış kullanıcılar istediği kitapları favorilerine ekleyebiliyorlar. Uygulamaya kayıt olan kullanıcılar ve favorilere eklenen kitaplar Cloud DB üzerinde tutuluyor.

Cloud DB’de Yapılan İşlemler

1- Kullanıcı kaydı

2- Kullanıcı verilerini profil sayfasında gösterme

3- Favorilere kitap ekleme

4- Favorilerden kitap silme

5- Favorilerdeki kitapları gösterme

Cloud DB üzerinde yapılan işlemleri de öğrendiğimize göre şimdi kodlama kısmına geçebiliriz.

Öncelikle AppGallery Connect üzerinden Object Type oluşturmalıyız.

Object Types
User Object Type
Book Object Type

Book Object Type içinde ek olarak publishedDate (String) ve isFavorite (Boolean) yer alıyor.

bookid : Kitapların id’si.

id : Kullanıcıların id’si

Object Typeları oluşturduk şimdi ise Cloud Zone oluşturmamız gerekiyor. AppGallery Connect üzerinden Cloud DB Zones sekmesine geldikten sonra Add butonuna tıklayarak oluşturabilirsiniz. Ben adına UserDB dedim.

Her şey bittikten sonra Java olarak Export almanız gerekiyor. Kotlin desteği olmadığı için Java olarak alıyoruz.

Export

Yukarıdaki resimde Package Name yazan yere kendi uygulamanızın paket adını yazmanız gerekiyor. Export aldıktan sonra dosyaları Android Studio içine yüklemelisiniz.

Dosyalar

Sizin indirdiğiniz dosyalarda sadece Book,User ve ObjectTypeInfoHelper olacaktır. Diğer dosyalarıda oluşturalım ve hadi kodlamamıza geçelim.

CloudDBQuickStartApplication

Yukarıdaki kodlamada CloudDBZoneWrapper sınıfını initialize ediyoruz ve zone bölgesini belirliyoruz. Ben DB yi oluştururken Germany seçmiştim o yüzden burada da Germany seçtim.

Yukarıdaki kodlamada sırasıyla zone bölgesini belirliyoruz. Sonrasında ise Cloud DB için gerekli olan createObjectType oluşturuyoruz. Veee Cloud DB’yi kullanabilmemiz için açmamız gerekiyor.

Uygulamaya kayıt olan kullanıcıları Cloud DB’ye ekleyen kodumuz.

Burada ise Profil sayfamızda kullanıcı bilgilerini göstermek için Cloud DB üzerinde sorgulama yapmamızı sağlayan kodlar yer alıyor.

Kullanıcı ile ilgili Cloud DB kodları bitti şimdi Kitaplar için yazalım.

Aslında user kodları ile neredeyse aynı sadece ek olarak delete fonksiyonu yer alıyor. Bu yazdığımız kodları ilgili sınıflardan çağırmak ve yük bindirmemk için CallBack kullanıyoruz. Aşağıda kodları görebilirsiniz.

CloudDBZoneWrapper içindeki kodlarımız bitti. Şimdi sırasıyla User ve Book işlemlerini yapalım.

Cloud DB User İşlemleri

Bir kullanıcı uygulamamıza kayıt olduğu anda bilgileri Cloud DB’ye gidecek ve profil sayfasında da kullanıcı bilgileri Cloud DB’den çekilecek. Hadi yapalım.

Yukarıdaki kod parçasında kullanıcı kayıt ol butonuna tıkladığı anda bilgileri Cloud DB’ye kayıt ediliyor. Cloud DB’de AutoIncrement olmadıgı için userId ye AuthService’den gelen id’yi tanımladım. Böylece her kullanıcının id’si benzersiz oldu.

Profil sayfasında kullanıcı bilgerini aldık ve ilgili TexView’lerde gösterdik. Burada Kotlin Coroutines ile asenkron işlem gerçekleştirdim çünkü Cloud DB Zone açılırken ki kod ile query yaptığımız kod çok kısa bir sürede bir yerde çakışıyordu ve null hatası alıyordum. Coroutines ile bu hatayı çözdüm.

Cloud DB Book İşlemleri

Uygulama içerisinde Anasayfada kitaplar gösteriliyor. Kullanıcı herhangi bir kitaba tıkladığı zaman kitabın detay sayfasına yönlendiriliyor ve burada favorilere ekleyebileceği bir kalp butonu görüyor. Kullanıcı kalbe tıkladığı zaman ilgili kitap Cloud DB’ye ekleniyor , tekrar tıkladığında ise ilgili kitap Cloud DB’den siliniyor. Kullanıcı favorilere eklediği kitaplarını favoriler sayfasında görebiliyor. Buradaki kitaplar ise Cloud DB’de alınıyor.

Uygulamda olmasını istediğimiz case bu şekilde. Hadi kodlayalım.

Butona tıklandığı anda kitap favorilere ekleniyor. Bir başka deyişle Cloud DB’ye ekleniyor.

Kitapları Cloud DB’den silen kodumuz.

Tabii ki CloudDBZoneWrapper sınıfından UICallBack’i çağırmamız gerekiyor.

Buradaki kodlar ise favoriye eklenen kitapları Cloud DB’den çekiyor ve ilgili sayfada gösteriyor. Kitapları benzersiz göstermesi için Hashset kullandım.

Cloud DB işlemlerimiz de bitti. Şimdi uygulama görüntülerine geçebiliriz.

Uygulama ekran görüntüsünü aşağıda görebilirsiniz.

Cloud DB (Book)
Cloud DB (User)

ÖNEMLİ

  • AppGalleryConnect üzerinden FingerPrint tanımlanması gerekiyor
  • Site Kit kullanırken Api key tanımlarken encode yapılması gerekiyor
  • Map Kit üzerinde Site Kit kullanabilmek için RequiresPermission yapılması gerekiyor.
  • Cloud DB kullanırken null hatası alırsanız Kotlin Coroutines kullanarak çözebilirsiniz.

SONUÇ

Bu yazımda, location kit, map kit ve site kit kullanarak yakınımızda bulunan kitap mağazalarını gösteren ve Cloud DB kullanarak ise kullanıcı ve kitapları DB’de tutan bir uygulama geliştirdik. Umarım sizler için faydalı bir kaynak olmuştur. Bir sonraki makalede görüşmek üzere. Kendinize iyi bakın.

REFERANSLAR

--

--