Bilgisayar
OKUDUĞUNUZ KONU
AppInventor FIREBASE / REALTIME DB
0

AppInventor FIREBASE / REALTIME DB

Yazar : Turgut Güneysu3 Ocak 2019
Verileri gerçek zamanlı olarak depolayın ve senkronize edin...

FirebaseDB ve APP Inventor sinerjisinin gizemlerini açıklayacağımız yazımıza hoş geldiniz.

APPInventor (AI2) ortamında mobil uygulama geliştirenler önce cihazda veri kaydetmeyle başlayıp kısa süre içinde cihazlar arasında veri paylaşma problemiyle karşılaşırlar. Bu noktada genelde TinyDB den TinyWebDB ye geçmeye karar verirler. Fakat her iki seçenekte de aynı sıkıntı yaşanır: Tiny veri tabanları (adlarının da belirttiği gibi, tiny = minik) bütün AI2 kullanıcıları arasında paylaşıldığından ve 1000 kayıt sınırlı olduğundan olumlu bir veri kaydetme ortamı değildirler. Tabi ki başlangıçta bu bir problem değildir ve uygulama geliştirme safhalarında bu tip veri tabanı kullanmak gayet  kolay bir yöntem sağlar. İşler ciddi bir noktaya geldiğinde daha uygun bir veri tabanı seçmek gerekir.

Mobil cihaz dışında veri tutmak için AI2 bize üç tane seçenek sunar: Google Fusion Tables, FirebaseDB ve CloudDB. Adlarındaki değişikliğe nazaran bunlar bulut veri tabanlarıdırlar.

Ufak bir seri olarak, iki veya üç değişik yazıyla FirebaseDB’ye odaklanıp bunu nasıl kullanabileceğinizi anlatmaya çalışacağım.

Not: FirebaseDB bileşeni hala deneyseldir.
         Uygulama değişebilir ve uygulamalarınız çalışmayabilir.

FirebaseDB Nedir?

FIREBASE iOS, Android ve web için SDK desteği ile bulut tarafında barındırılan bir NoSQL veritabanıdır. Bu araç, verileri JSON belgelerinde saklar, bu nedenle her şey bir anahtar (key) veya değerdir (value). Veri senkronizasyonu, çok hızlı işlemlere izin veren websoketlerini kullanır. FIREBASE , bir cihaz çevrimdışı olduğunda, ağ yeniden bağlandığında sizin için değişiklikleri senkronize ederken güncellemeleri de işler.

Yukarıdaki paragrafta gördüğünüz kalın yazılmış terimleri gözden geçirip detaylarını inceleyelim. Bunun sayesinde FirebaseDB’nin nasıl bir araç olduğunu ve kullanırken aklınızda tutmanız gereken noktaları belirtmiş olacağız.

NoSQL veritabanı:

Veritabanı kullanan uygulamalar yazanlar muhakkak RDBMS – Relational Data Base Management System (İlişkisel Veritabanı Yönetim Sistemi) temelli veri tabanlarını bilirler. RDBMS SQL, MS SQL Server, IBM DB2, Oracle, MySQL ve Microsoft Access gibi tüm modern veritabanı sistemleri için temel oluşturur. RDBMS’deki veriler, tablo adı verilen veritabanı nesnelerinde saklanır. Bir tablo, ilgili veri girişlerinin bir koleksiyonudur ve sütunlar ve satırlardan oluşur. SQL (Structured Query Language)  Yapılandırılmış Sorgu Dili anlamına gelir ve ilişkisel veritabanlarındaki verileri işlemek ve sorgulamak için kullanılan standart yoldur.

FirebaseDB ise bunun tam tersi yani RDBMS tipinde olmayan ve SQL kullanmayan bir veritabanıdır. Bunun için de NoSQL olarak tanımlanmıştır.

JSON belgeleri ve “anahtar” : “değer” notasyonu:

JSON (JavaScript Object Notation) JavaScript Nesne Notasyonu anlamına gelir. JSON, verilerin depolanması ve değiştirilmesi için bir sözdizimidir. JSON  JavaScript nesne notasyonu ile yazılmış metindir.

Bir tarayıcı ile sunucu arasında veri alışverişi yapılırken, veriler yalnızca metin olabilir. JSON metindir ve bununla herhangi bir JavaScript nesnesini JSON’a dönüştürebilir ve JSON’u da sunucuya gönderebiliriz. Ayrıca sunucudan alınan herhangi bir JSON’u JavaScript nesnelerine dönüştürebiliriz. Bu şekilde, karmaşık ayrıştırma ve çeviriler olmadan, JavaScript nesneleri olarak verilerle çalışabiliriz. FirebaseDB bu tekniği uygulayarak verilerinizi bulutta saklayıp yönetmenizi sağlar.

JSON sözdizimi kuralları gayet basittir:

  • Veri “anahtar” : “değer” çiftleri olarak kaydedilir,
    ör: { “ad”:”İsmail” }
  • Veriler virgüllerle ayrılır,
  • Kıvrımlı parantez nesneleri belirler,
    ör: {“1” : {“ad”:”İsmail” , “yaş”:”35″} }
  • Köşeli parantezler dizileri belirler,
    ör:  {“1” :  {“ad”:”İsmail”, “yaş”:35, “arabalar”:[ “Ford”, “BMW”, “Fiat” ] } }

JSON veri tipleri: metin, sayı, nesne (JSON nesnesi), dizi, boole, null .

AI2 ortamında JSON uygulaması biraz kısıtlı olup tüm veri tiplerini desteklemez:

Anahtar (key)  için kullanılan değerler “metin” olmalıdır.
Değer (value) için ise yalnız metin, sayı, liste (JSON nesnesi olarak) veya bir boole desteklenir.

WebSoket:

WebSoket, tek bir TCP bağlantısı üzerinden tam çift yönlü iletişim kanalları sağlayan bir bilgisayar iletişim protokolüdür. WebSokets, bir istemci ile sunucu arasında, herhangi bir zamanda veri göndermeye başlamak için kullanabilecek kalıcı bir bağlantı sağlar. İstemci, WebSoket anlaşması olarak bilinen bir işlemle bir WebSoket bağlantısı kurar. Bu işlem, istemcinin sunucuya düzenli bir HTTP isteği göndermesi ile başlar.

 WebSoket’in bilgi alışveriş modu tam çift yönlüdür. Sunucu, bilgileri istemciye iletebilir (istemci genelde direkt HTTP’ye izin vermez). WebSoket’in (AJAX’a nazaran) avantajı temelde daha az HTTP ek yükü olmasıdır. Bağlantı kurulduktan sonra, tüm gelecekteki mesaj geçişleri yeni HTTP istek / cevap çağrıları yerine bir soket üzerinden yapılır. Dolayısıyla, WebSoket’lerin birim zaman başına çok daha fazla ileti gönderip alabileceğini varsayabilirsiniz.

Eğer yukarıdaki websoket detaylarını anladıysanız, FirebaseDB’nin inanılmaz süratinin nedenini de kavramışsınız demektir.

AI2 ve FirebaseDB

AI2 ile FirebaseDB kullanmanın iki yolu var:

  1. MIT App Inventor kullanıcısı, MIT tarafından sağlanan özel bir varsayılan hesap üzerinden FirebaseDB bileşenini ücretsiz olarak kullanabilir. Bu MIT hesabı sadece kişisel çalışma ve test için tasarlanmıştır. Uygulamaları yoğun kullanım ve çok sayıda kullanıcıya dağıtmak için kendi Firebase hesabınızı almanız tavsiye edilir.
  2. MIT App Inventor kullanıcısı, kendi Google Firebase hesabını oluşturup kullanabilir. Google “SPARK” hesap tipi olarak ücretsiz servis sunuyor.  Fakat anlaşma gereği, eğer hesap trafik yoğunluğu belli limitler üzerine çıkarsa ücretlere tabi olabilirsiniz. FirebaseDB hesabınızı bu linkten oluşturabilirsiniz.

Şimdi bu iki seçeneğe göre FB ayarlarını nasıl yapmamız gerektiğine bakalım.

AI2’nin varsayılan hesabını kullanacaksanız fazla birşey yapmanıza lüzum yok:

  • Use Default alanını işaretleyin. Bu Firebase Token ve Firebase URL alanlarını otomatikman varsayılan değerlerle ayarlayıp, kullanıma hazırlayacaktır. Firebase URL “DEFAULT” olacaktır.

Kendi Google FirebaseDB hesabınızı kullanacaksanız:

  • Use Default alanını işaretlemeyin. Boş Bırakın.
  • Firebase Token alanını boş bırakın.
  • Firebase URL sizin Google’da açtığınız hesabın size atadığı proje ulaşım linkidir.
    Örneğin: https://benimProjem.firebaseio.com/
    Burada “benimProjem” kısmı açtığınız hesaptaki proje adı ile aynı olmalıdır.

Her iki seçenek için de ProjectBucket alanı sizin projeniz için seçmeniz gereken bir veritabanı adıdır. Buraya girilen metin FirebaseDB içinde oluşturulan ve sizin veritabanı değerlerini tutan nesnenin adı olarak kullanılır. Değişik adlar kullanarak birden fazla veritabanı oluşturup kullanabilirsiniz.

Not:
AI2 hesabı ile kendi hesabınızı kullanmak arasında teknik olarak bir fark yoktur. Kodlama ve uygulama bakımından aynı şeyleri yapmak  gerekir. Kendi hesabınızın en büyük avantajı, uygulamanızı geliştirirken, FirebaseDB konsolüne ulaşma imkanınızdır. AI2 ortamı FirebaseDB konsolüne ulaşma imkanı vermez. Bu neden önemli: Evvelden NOSQL tipi veritabanlarıyla çalışmamışsanız, bu ortamda veri  yapısı geliştirme detaylarını tam bilmeyebilirsiniz. Aynı zamanda, geliştirme safhalarında veritabanını ilk baştan doğru tanımlamayabilirsiniz. Bu koşullarda veritabanının nasıl oluşturulduğunu, anahtar:değer çiftlerinin nasıl saklandığını görsel olarak izlemenizin büyük bir faydası olacaktır. Bundan dolayı da kodun veritabanı ile ilgili hatalarını çok daha çabuk bir şekilde düzeltme imkanına sahip olursunuz.

Kendi Hesabınızla
FirebaseDB Kullanıma Başlama

Firebase kullanımı için bir Google kimliğine sahip olmanız gerekmekte.

Varsa sahip olduğunuz Google Mail (GMail) hesabınızdan faydalanabilirsiniz.

Yoksa bir hesap oluşturun ve sonra devam edin.

Firebase web sayfası üzerinden giriş yaparak kullanıcı paneline ulaşabilirsiniz.

Resimde mavi renkle belirttiğimiz Get Started butonunu ya da sağ üst bölümde yer alan Console bağlantısını tıklayarak ilerleyebilirsiniz.

Sonra ulaşacağınız sayfa PROJE yaratma sayfası olacak.

Burada Add Project butonunu tıkayarak proje tanımlamasına başlayabilirisiniz.

Açılan pencerede bir Proje Adı girin ve en alttaki koşulları kabul alanını seçin.

Sonra Create project butonuna tıklayın ve projenizi oluşturun.

Birkaç saniye içinde projenizin hazır olduğunu belirleyen şu mesajı alacaksınız:

Hemen Continue butonuna tıklayın ve proje sayfanıza ulaşın. Bu sayfanın diğer bir adı da Firebase Console sayfasıdır. Bu URL’i Yer İşaretleri Çubuğuna kaydederseniz, ileride veritabanınızı yönetmek için bu sayfaya çabucak ulaşabilirsiniz.

Bu sayfada SARI cizgilerle belirttiğim alanları kontrol edin. Üstte Proje Adınız  (ör: benimProjem), yanında ve en altta ise ödeme planı (Spark Plan) görmelisiniz. SPARK Plan, limitleri aşmadığınız sürece, bedava kullanabileceğiniz bir plandır.

Herşey yolunda ise veritabanı ayarları ile devam edeceğiz.

FirebaseDB Veritabanı ve Erişim Kuralları

Yukarıdaki proje ekranının sol kenarındaki Database seçeneğini tıklayın. Açılan ekranın en üstünde Beta Cloud Firestore seçeneğini göreceksiniz. Sayfayı biraz aşağı kaydırıp Realtime Database seçeneğini bulun.

Create database butonunu tıklayın. Aşağıdaki ekranı göreceksiniz:

Ekran ilk açıldığında Start in locked mode (Kilitli modda çalışın) seçenek düğmesi aktif görünecek. Bu modda veritabanı okuma ve yazma kuralları “false” ayarlı olduğundan girdi / çıktı yasaklanmıştır.

Bunu Start in test mode (test modda çalışın) seçeneğine ayarlayın. Göreceğiniz gibi okuma ve yazma “true” olarak ayarlanacak be veritabanı G/Ç ‘sı açılacaktır.

Önemli Nokta:
Bu mod genelde veritabanını test etmek için kullanıldığından, hiçbir güvenlik kuralına tabi olmadan çalışır. Yani veritabanı ulaşım detaylarını bilen herkes buna ulaşabilir ve değişiklik yapabilir.

Son olarak Enable butonuna basın ve veritaban tanımlamasını tamamlayın.

Herşey yolunda ise yukarıdaki ekrana ulaşmış olmanız gerekir. Burada iki önemli kısma dikkatinizi çekelim:

  • Birinci mavi ile belirlenmiş alan veritabanının erişim URL’ ini gösteriyor.
    Tabi ki “benimProjem” kısmı sizin kendi yarattığınız proje adına göre değişik olacaktır.
    AI2 programınızdaki Firebase URL ayarında bunu kullanacağız.
  • İkinci mavi ile belirlenmiş alan veritabanının adı ve kaç tane anahtar:değer
    kayıtı olduğunu gösteriyor.
    Şu anda daha kayıt olmadığı için değer null.

Örnek FirebaseDB Uygulaması

Size FirebaseDB ile oynayarak bilgi edinebileceğiniz bir uygulama sunuyorum: FBTutorial.aia

Projenin blok resimleri:

Proje İndirme Linki: mitAI2 Proje Dosyası – TXT

Bunu indirdikten sonra adını FBTutorial.aia olarak değiştirin. Sonra AppInventor’a yükleyebilirsiniz.

Uygulamayı kullanmaya başlamadan önce FirebaseDB ile ilgili ayarları kendi Google FirebaseDB hesabınıza göre değiştirmeniz gerekir. Bunun içi yukarıda AI2 ve FirebaseDB kısmında anlatılan değişiklikleri uygulayın.

Eğer DEFAULT ayarını tercih ederseniz, her şey aynen çalışır; fakat Google FirebaseDB hesabınız olmadığından veritabanı detaylarını web tarayıcısından izleyemezsiniz.

En azından ilk önce bir hesap oluşturup çalışırsanız, veritabanının detaylarını daha çabuk kavrarsınız. Sonra isterseniz kendi projenizi DEFAULT ayarı ile geliştirebilirsiniz.

NOT:
Uygulamayı kullanırken TAG ve VALUE alanlarını silip yeni değerleri girmeye önem verin.
VALUE alanında uygun olmayan girdiler programın hata yapmasına sebep olabilir.
Çok mühim değil. Düzeltip tekrar deneyebilirsiniz.

Şimdi uygulamanın detaylarını inceleyelim:

Sarı alan programın işlemlerle ilgili iletişimleri yazdığı yer.

KAYITLARI Yap butonu size değişik veri yapıları sunan örnek bir veritabanı oluşturur.

getTags butonu veritabanındaki kayıtların tag (anahtar) değerlerini listeler.

KAYITLARI Sil butonu veritabanındaki tüm kayıtları siler.

YAZ Tag:Value butonu bir üstteki TAG ve VALUE alanlarına girdiğiniz değerleri veritabanına yazar.

OKU Tag:Value butonu TAG alanına girdiğiniz anahtar değerine uyan veriyi okur.

SİL Tag:Value butonu TAG alanına girdiğiniz anahtar değerine uyan veriyi siler.

Web tarayıcınızın bir sekmesinde Google FirebaseDB Konsolü açın ve hesabınıza giriş yapın. Sonra sol menüden Database seçip veritabanı sayfasına ulaşın. Sonra başka bir sekmede mitAI2 uygulamasına geçin. Mümkünse iki sekmeyi de yan yana açarsanız en olumlu şekilde çalışırsınız. Bu düzenleme mitAI2 uygulamasında yaptığınız işlemlerin sonucunu FirebaseDB Konsolünde gerçek zamanda izlemenizi sağlar.

FirebaseDB Veri Yapıları

Bu uygulama ile oynamaya başlamadan önce veritabanında oluşturulan değişik veri yapılarını bir gözden geçirelim. Bunların ne olduğunu ve nasıl çalıştığını anlamadan FirebaseDB’yi kullanmanız çok zor olur.

KAYITLARI Yap butonuna bastığınızda aşağıdaki örnek veritabanını yaratmış olursunuz:

   

Sol taraftaki görsel Google Firebase Konsolundaki veritabanı, sağ taraftaki ise bu veritabanının JSON olarak gösterilişidir. Burada web’den bir JSON Parser (Ayrıştırıcı) kullanıyoruz. Google görselinin sol üst köşesindeki üç noktalı menüyü açtığınızda Export JSON seçeneğini göreceksiniz. Bununla yaratabileceğiniz JSON dosyasını Ayrıştırıcıya yüklerseniz aynı yukarıdaki sağ görsele ulaşırsınız.

Google FirebaseDB Konsolünün üst tarafındaki “benimprojem-e610f” alanı size ait  hesap ve proje adına göre değişik olacaktır.

İlk dikkatinizi çeken nokta FirebaseDB içeriklerinin JSON nesneleri olarak kayıt edildikleridir. Yukarıda JSON açıklamalarında belirtiğim gibi, bunu sağ görselin 1 ve 11 numaralı satırlarındaki kıvrımlı parantezlerden anlarsınız. Yani tüm veritabanı bir JSON nesnesidir.

1 numaralı kayıt tipi:

FirebaseDB’nin tipik JSON nesnesidir. Bu nesne sağ görselin 2ci ve 6cı satırlarındaki kıvrımlı parantezlerle sınırlanmıştır ve ad, konum, yaş anahtar : değer çiftlerinden oluşmaktadır.  Sol tarafta ise “1″ değerli anahtar altındaki aynı ad, konum, yaş anahtar:değer çiftleri JSON nesnesini tanımlamaktadır.

Bu tip bir veri yapısı oluşturmak için birincil ve ikincil değerlerden oluşan bir anahtar yapı kullanmanız gerekir. Bu örnekte 1 numaralı kayıtın üç tane anahtar:değer çifti var. Bunlar birincil_anahtar/ikincil_anahtar değeri kullanarak kaydedilmiştir. Yani veritabanına üç değişik kayıt yapılmış:

1ci kayıt: anahtar = "1/ad"     değer = "Ali"
2ci kayıt: anahtar = "1/konum"  değer = "Kars"
3cü kayıt: anahtar = "1/yaş"    değer = "25"

Tip-1 verilerinizi okumak istediğinizde bu kayıtlara iki  değişik yöntemle ulaşabilirsiniz.

  • Birinci yöntem: birincil_anahtar kullanarak, yani tag=1 olarak okuduğunuzda bu anahtar altındaki tüm çiftleri alırsınız:
anahtar = "1"  değer = {"ad":"Ali","konum":"Kars","yaş":"25"}

Okuduğunuz değer in JSON nesne yapısında olduğunu unutmayın !

  • İkinci yöntem: tag=birincil_anahtar/ikincil_anahtar kullanarak okuduğunuzda var olan çiftlerden hangisini isterseniz onu alabilirsiniz:
anahtar = "1/ad"      değer = "Ali"
anahtar = "1/konum"   değer = "Kars"
anahtar = "1/yaş"     değer = "25"

Her iki yöntemin uygulamadaki görünümleri: TAG girip OKU butona basın.

  

2 numaralı kayıt tipi:

Bu kayıt tipi “Liste içinde liste” olarak bilinir ve yapı olarak yukarıdaki Tip-1 JSON nesneye çok benzer. Bu tipte üç tane anahtar:değer liste çifti bir ana listenin içeriğidir. Her iki görselde de görüldüğü gibi (solda #2, sağda satır 7), üç iç liste köşeli parantezlerle sınırlanıp, gene köşeli parantezlerle sınırlanan dış ana listenin içinde yer alır.

Bu tip bir veri yapısı oluşturmak için liste blokları ile iç içe anahtar:değer listelerini başka bir listenin içinde tanımlamanız ve sonra bu toplam yapıyı bir anahtar değeri ile kaydetmeniz gerekir. Burada üç anahtar:değer listesi kullandık.

Tip-2 verilerinizi okumak istediğinizde tek ulaşma yönteminiz anahtar değeri iledir. Ulaştığınız değer size üç tane anahtar:değer çiftinden oluşan bir liste olarak gelecektir.

anahtar = "2"  değer = [["ad":"Ali"],["konum":"Kars"],["yaş":"25"]]

Okuduğunuz değer in Liste içinde Liste yapısında olduğunu unutmayın !

Tip-1 ile Tip-2 birbirlerine benzer demiştik. Bunun sebebi, bizim örneğimizde, her iki yapıda da üç tane anahtar:değer çiftinin olmasıdır. Farklılıkları ise Tip-1 in anahtar:değer çiftleri birincil anahtar değeri olan “1” altında JSON nesne kaydedilmişken, Tip-2 nin anahtar:değer çiftleri sadece liste olarak kaydedilmiştir.

Peki bu ne işe yarar diye sorarsanız, şu cevabı inceleyin:

Uygulamanızda verilerinizin bazen tüm kayıtına, bazen de alan detaylarına direkt olarak ulaşmanız gerekiyorsa, Tip-1 yapısı daha uygun olabilir. Tip-1 kayıtlarını ikinci yöntemle okuduğunuzda sadece tek alan okuduğunuzu unutmayın. Eğer kayıt uzunluğu büyükse bu tip okuma en az bayttan oluşur ve ağ transferi çok az zaman alır.

Eğer genelde bir anahtar altında tüm alan verilere ulaşmayı arzu ediyorsanız o zaman Tip-2 daha uygun olabilir. Ve gerektiğinde biraz liste kod oynamasıyla (look up in pairs blok kullanarak) alan detaylarını da  teker teker alabilirsiniz. Eğer kayıt uzunluğu büyükse bu tip okuma her zaman en fazla bayttan oluşur ve ağ transferi daha çok zaman alır.

Uygulamadaki görünümler: TAG girip OKU butona basın. Liste içindeki alan çiftlerine ulaşmak için değer alanına alan adını girin.

  

3 numaralı kayıt tipi:

Bu kayıt tipi sadece yazmak istediğiniz alan değerlerinden oluşan basit bir “Liste” dir.

Bu tip bir veri yapısı oluşturmak için kayıtlamak istediğiniz alan değerlerini bir liste içinde toplayıp, sonra bu toplam yapıyı bir anahtar değeri ile kaydetmeniz gerekir.

Tip-3 verilerinizi okumak istediğinizde tek ulaşma yönteminiz anahtar değeri iledir.

anahtar = "3"  değer = ["Ali","Kars","25"]
Okuduğunuz değer in Liste yapısında olduğunu unutmayın !

Alan adları, yukarıdaki Tip-2 ye nazaran, liste içinde olmadığından verilerin ne belirttiğini sizin yönetmeniz gerekir. Ayrıca, alan detaylarına ulaşmak için de gereken liste bloklarını kullanarak tüm kayıtı parçalara ayırmanız gerekir.

Tip-3 bir anahtar altında tüm alan verilere ulaşma dışında bir avantaj daha sunar:  sadece alan değerlerinden oluştuğu için Tip-2 ye nazaran daha az yer alır.

Benzer veri türlerinden oluşan büyük miktarda veri kaydetmeniz gerekiyorsa, bu tip işinize yarayabilir. Eğer kayıt uzunluğu büyükse bu tip okuma her zaman en fazla bayttan oluşur ve ağ transferi daha çok zaman alır.

Uygulamadaki görünümler: TAG girip OKU butona basın.

4 numaralı kayıt tipi:

Bu kayıt tipi sadece yazmak istediğiniz anahtar ve alan değerlerinden oluşan en basit veri yapısıdır. Kullandığınız anahtar adı kaydettiğiniz alan değerini tanımlar. Sağdaki JSON görselinin 9cu satırında göründüğü gibi, bu veri yapısı metin/text tiplerinden oluşan bir anahtar:değer çifti içerir.

Bu tip bir veri yapısı oluşturmak için kayıtlamak istediğiniz alan değerini bir anahtar değeri ile kaydetmeniz gerekir.

Tip-4 verilerinizi okumak istediğinizde tek ulaşma yönteminiz anahtar değeri iledir.

anahtar = "alan1"  değer = "değer1"
Okuduğunuz değer in Metin / Text yapısında olduğunu unutmayın !

Veritabanı anahtarlarının benzersiz değerlerden oluşması gerektiğinden, Tip-4 yapısı fazla olumlu değildir. Fakat gene de az miktarda değerleri kaydetmek için kullanılabilir.

Uygulamadaki görünümler: TAG girip OKU butona basın.

Gelişmiş Uygulama Özellikleri

Bu kısımda uygulamamın çeşitli özelliklerini inceleyeceğiz.

getTags (anahtar oku)

KAYITLARI Yap butonu ile veritabanını yazdıktan sonra ilk kontrol etmek isteyeceğiniz şey yazdığınız kayıtların TAG‘leri (anahtar ları) olacaktır. Böylece hem kayıtların yazıldığını hem de veritabanının yazma sırasını kontrol etmiş olursunuz. getTags butonu bu işi yapar.

Uygulamadaki görünümler:

Dikkatinize:
getTags 
okuma değeri Liste tipindendir. Bunu değeri sınırlayan köşeli parantezlerden anlarsınız.

FirebaseDB’nin işlemlerindeki bir gariplikten dolayı bazen getTags okuma yapamıyor. Bunun sebebi veritabanında kullanılan anahtar değerlerinden en az bir tanesinin metin olması gerektiğidir. Bundan dolayı benim uygulamam veritabanının sonuna “debug”:”false” olan bir kayıt yapar. Kendi projenizde bu tip bir olayla karşılaşırsanız bunu hatırlayın.

Bunun denemesi için Google Konsolünde fareyi debug üzerine getirin ve sağ kenarda açılan “X” üzerine tıklayarak debug kayıtını silin. Sonra da telefon ekranında TAG alanına “alan1” girin ve SİL butonu tıklayın. Google Konsolünde “alan1” anahtarlı kayıtın silindiğini göreceksiniz.

Şimdi getTags denediğinizde ekrandaki sarı alana önce “TAG’ler okunuyor…” ve 3 saniye sonra da “getTags Hatası…” yazılacaktır. Uygulamadaki kod getTags işleminin tamamlanmasını 3 saniye bekler. TAG’ler gelmediyse bu mesajı yazar.

Bununla biraz oynayın. Sonra Google Konsolündeki proje adının üzerinde fare ile gezinip çıkan “X” i tıkalayın ve veritabanını silin. Arkasından telefondan KAYITLARI Yap kullanıp veritabanınızı tekrar oluşturun.

Bu özelliği kullanarak veritabanı ile istediğiniz gibi oynayıp denemeler yapabilir, sonra da her şeyi yenileyebilirsiniz.

KAYITLARI Sil

Bu buton önce kod içinde    kullanarak anahtarların listesini alır. Sonra bu listeyi işleyerek kayıtları teker teker siler. Veritabanını manuel olarak kendiniz silmek isterseniz, bunu yukarıda anlatıldığı gibi proje adı alanından yapabilirsiniz.

DİKKAT: Veritabanını silerseniz geri almanın bir yolu yoktur ! 

Bundan dolayı “X” e tıkladığınız zaman kırmızı bir uyarıyla karşılaşırsınız.

Veritabanı silinmişse ama elinizde bir JSON Export (JSON aktarımı) dosyası varsa, bunu kullanarak JSON Import özelliği ile tekrar kayıtları dosya tarihindeki seviyeye yenileyebilirsiniz. Hiç yoktan iyidir !

YAZ Tag:Value

Bu buton hemen üstündeki TAG ve VALUE alanlarını kullanarak veritabanına kayıt yapmanızı sağlar. Aynı şekilde, eğer varolan TAG (anahtar) kullanırsanız, ona uyan kayıtın değerlerini de değiştirebilirsiniz. Fakat burada biraz dikkatli olmanız gerekir. Çünkü bu yöntemle yalnız anahtar:değer çiftiyle alan seviyesinde ulaşabileceğiniz kayıtları değiştirebilirsiniz. Bu ne demek:

  • Tip-1 kayıtlar: EVET – çünkü birincil_anahtar/ikincil_anahtar yöntemi sizi alan seviyesine ulaştırır.
  • Tip-2 kayıtlar: HAYIR – çünkü bu tip bir liste içinde listedir ve anahtar:değer yöntemi listelere ulaşmaz.
  • Tip-3 kayıtlar: HAYIR – çünkü bu tip bir listedir ve anahtar:değer yöntemi listelere ulaşmaz.
  • Tip-4 kayıtlar: EVET – çünkü bu tip anahtar:değer çiftinden oluşur.

UNUTMAYIN: Uygulamada yapamadığınızı Google Konsolünde yapabilirsiniz. Her tip yeni kayıtlar oluşturmak, var olanları kopyala/yapıştır ile yeni yaratmak veya değerleri değiştirmek konsolde gayet kolaydır. Yaptığınız değişiklikleri de uygulamada OKU kullanarak kontrol edebilirsiniz.

Denemek isterseniz:

  • TAG=1 girip OKU tıklayın.
  • Değiştirmek istediğiniz alanı seçin, örneğin: ad
  • TAG=1/ad girin ve VALUE alanına yeni ad girin örneğin: Mehmet
  • YAZ tıklayın. Google Konsolünde 1 numaralı kayıt adının Mehmet’e değiştiğini görmelisiniz.
  • TAG ve VALUE alanlarını silin. TAG=1 girin ve OKU ile değişmiş kayıtı görün.
  • TAG=1/soyad girin. VALUE=Gündüz girin. YAZ tıklayın.
  • Google Konsolünde 1 numaralı kayıta “soyad” anahtarı ve “Gündüz” değeri atandığını göreceksiniz.
  • TAG ve VALUE alanlarını silin. TAG=1 girin ve OKU ile değişmiş kayıtı görün.
  • Aynı şekilde yeni bir kayıt ve anahtar:değer atamalarıyla yeni alanlar oluşturun.
  • İstediğiniz alanları SİL Tag:Value kullanarak silin. Doğru alana ulaştınız mı?
  • Veritabanını tekrar orijinal haline döndürün (Yukarıda anlatılmıştı).
OKU Tag:Value

Bu buton hemen üstündeki TAG ve VALUE alanlarını kullanarak veritaban kayıtlarını okumanızı sağlar. Her kayıtın en az bir birincil veya benzersiz değerden oluşan anahtarı olduğu için, her kayıtı okuyabilirsiniz. Gelen değerlerdeki parantez tiplerinden ne tip bir kayıt olduğunu da anlarsınız: {…} nesneler, […] listeler, “…” metin/text olarak.

Okuma işlemlerini daha esnek yapabilmek için uygulama kodunda VALUE alanını özel bir şekilde yorumlayıp kullandım:

Anahtar:değer çiftiyle alan seviyesine ulaşmak mümkünse, VALUE alanına kayıtın alan anahtar değerini girdiğinizde bu ekranda DETAY olarak gösterilir. Örneğin:

  • Tip-1 Kayıt: TAG=1 girin. VALUE=konum girin. OKU tıklayın.
    Hem 1 anahtar değerli kayıt okunacak, hem de bu kayıtın içindeki “konum” anahtar:değer çifti ekrana yazılacaktır.
  • Tip-2 Kayıt: TAG=2 girin. VALUE=konum girin. OKU tıklayın.
    Hem 2 anahtar değerli kayıt okunacak, hem de bu kayıtın içindeki “konum” anahtar:değer çifti ekrana yazılacaktır.
  • Aralarındaki fark değerlerin sınırlanma karakterleridir. Tip-1 nesne olduğundan {…}, Tip-2 liste olduğundan […]

Uygulama görüntüleri:

  

  • Tip-3 Kayıt: Bu yöntem Tip-3 le çalışmaz, çünkü Tip-3 basit bir listedir ve alan adlarını içermez. Yalnız alan değerlerinden oluşur.
  • Tip-4 Kayıt: Bu tip için yalnız TAG alanı girmek yeter. Kayıt zaten bir anahtar:değer çiftidir. Bunu kendiniz deneyin.
SİL Tag:Value

Bu buton aynı OKU gibi çalışır fakat TAG alana girilen anahtar değerlerin belirttiği verileri siler. Kendiniz oynayarak deneyin. Zorluk olduğunda veritabanını evvelden anlatıldığı gibi yenileyin ve devam edin.

Son Açıklamalar

Yazımızın sonuna geldik. Buraya kadar takip ettiyseniz FirebaseDB hakkında baya bilgi edinmişsiniz demektir. Uygulama ve Google FirebaseDB Konsolü ile oynayarak değişik fikirlerinizi deneyin. Aksaklıklar olduğunda veritabanını yenileyip devam edin.

Unutmayın ki, uygulamanın bahsedilen kısıtlamaları kodları basit yapıp anlaşılmasının kolay olmasını istediğim içindir. Kendi projelerinizde tamamen serbest olarak geliştirme yapmanızı umarım.

Daha derin çalışma yapmak isteyenler, benim uygulamamı değiştirip daha gelişmiş kodlama deneyebilirler. Örneğin:

  • Ön sayfanın altına birkaç alan ekleyip bunlarda veritabanından okunan değerleri göstermek
  • Aynı alanları kullanarak Liste tipi kayıtların değerlerini kodlama ile değiştirmek

Bu yazının alacağı yorumlar ve gösterilen ilgiye göre FirebaseDB üzerinde daha derin detayları paylaşan başka yazılar da düşünüyorum.

Hepinize iyi çalışmalar dilerim.

 

SİZCE NASIL OLMUŞ?
Beğendim
0%
İlginç
0%
Eh İşte
0%
Anlamadım
0%
Kötü
0%
Berbat
0%
YAZAR HAKKINDA
Turgut Güneysu
Turgut Güneysu
Anadolu'nun tam ortasında ufak bir köyden memleketimizin çocuklarına STEM programlarına uygun bilgisayar, robotik, yazılım, donanım, mikro işlemciler hakkında yardımcı olmaya çalışıp, emekli hayatımın zevkini çıkarıyorum. Gençlerimizin kabiliyetlerinin sonsuz olduğuna ve onları doğru yönlendirirsek değerli katkılarla ortamımızı dünya çapına ulaştıracaklarına inanıyorum.
YORUMLAR

YORUM YAP