Java Programlama Dili ile Firebase Kullanımı

Merhaba Arkadaşlar..

Bu yazımda sizlere Java Programlama Dili ile Firebase Platformunda oluşturmuş olduğumuz bir veri tabanına bağlanarak; bu veri tabanının nasıl kullanıldığını örnekler ile anlatacağım.

Yazının sonunda ise, daha önceki makalemde bahsettiğim Sohbet (Chat) uygulamasının ilk ayağı olarak Java Programını yazmış olacağım. Sonraki makalelerde ise aynı Sohbet Uygulamasının Android ve iOS Platformlarında çalışacak olan uygulamalarını da oluşturarak; 3 ayrı platformu kullanan farklı kullanıcıların birbiriyle sohbet edebildiği bir ortam yaratmış olacağım.

Dolayısıyla bu makaleleri takip eden siz değerli takipçilerim; makalelerin sonunda artık en basit haliyle kendi sohbet platformunuzu oluşturabilecek düzeye geleceksiniz.

Anlatıma başlamadan önce Firebase kullanımı için gerekli Java Sanal Makinaları (JVM) için hazırlanan en son sürümünü aşağıdaki adresten indirip projemize dahil ediyoruz.

JVM Kütüphanesi : https://www.firebase.com/docs/android/changelog.html

Daha sonra Firebase hesabımızda bir uygulama oluşturuyoruz.

Firebase Android Java Swift Chat

Uygulamamızın ismini APP NAME kısmına giriyoruz. Girdiğimiz uygulama adı daha önce kullanılmamış olmalıdır.

APP URL kısmında ise Uygulamamızın URL adresini belirliyoruz. Bu adresi Java, Android, Swift ve diğer platformlardan Firebase’deki uygulamanın veri tabanına ulaşabilmek için kullanacağız.

Ben uygulamamın adını uochat olarak belirledim. Gördüğünüz gibi APP URL kısmı otomatik olarak uochat şeklinde değişti ve url adresi de “https://uochat.firebaseIO.com” olarak belirlendi.

Siz isterseniz APP NAME ile APP URL‘inizi birbirinden farklı olarak ta belirleyebilirsiniz. Bu size kalmış..

CREATE NEW APP butonuna tıklayıp uygulamamızı oluşturduktan sonra oluşan uygulamadaki Manage App butonuna tıklayarak veri tabanımızı görüntüleyelim.

Firebase Android Java Swift Chat

Uygulama ekranından da gördüğünüz gibi veri tabanımız şuan boş (null) durumda. Fakat oluşturduğumuz bu uygulamanın Security & Rules kısmında bir uyarı işareti mevcut.

Firebase Android Java Swift Chat

 

Security & Rules kısmına geldiğimizde rules ‘in içerisinde ki “.read” ve “.write” anahtarlarının değerlerinin true olduğunu göreceksiniz. Bu kuralların değerlerinin true olması; uygulamaya dışarıdan bağlanan herkesin tüm verileri okuyabileceği ve veriler üzerinde değişiklik yapabileceği anlamına gelmektedir. Yani veri tabanımızda şuan herhangi bir güvenlik önlemi alınmış durumda değildir. Bu nedenle Firebase bize böyle bir uyarı vererek, uyuygulamamızı daha güvenli hale getirmemiz gerektiğini söylemektedir.

Ben yazacağım örnek uygulamada; veri tabanına bağlanan herkesin bilgileri okuyabilmesini, veri kaydederken ise bir anahtar kelime (Firebase Secrets) kullanarak veri tabanında herhangi bir değişiklik yapılabilmesini istiyorum.

Bu yüzden güvenlik kurallarını şu şekilde düzenliyorum.

Bu kurallara göre; uygulamaya bağlanacak bir kullanıcının veri tabanında değişiklik yapabilmesi için mevcut anahtar kelimeleri (Firebase Secrets)  kullanıp Admin yetkisi alması gerekmektedir.

Bu anahtar kelimeler ise Secrets kısmında bulunmaktadır. Her anahtar kelimenin altındaki Show butonuna basarak kelimeyi görüntüleyebilir, Revoke butonuna basarak o anahtarı silebilirsiniz. Yeni bir anahtar eklemek için de Add New butonunu kullanabilirsiniz.

Firebase kısmındaki ıvır-zıvır işleri hallettikten sonra artık Java kısmına geçelim..

İlk Java projemizi oluşturup Firebase JVM Kütüphanesini projeye dahil etmeliyiz. Bu işlemi yaptığınızı varsayıyor ve kodlamaya başlıyorum.

Öncelikle, Firebase ile ilgili işlemleri yapabilmek için bir nesne tanımlıyoruz.

Firebase nesneninAdı = new Firebase(“Firebase Uygulamamızın URL Adresi”);

Firebase uygulaması ile yazmakta olduğumuz Java uygulaması arasındaki veri akışını daha ayrıntılı görmek isterseniz Logger.Level.INFO yerine Logger.Level.DEBUG yapabilrsiniz.

Firebase nesnesinin tanımlamasını yaptıktan sonra; veri tabanında her hangi bir değişiklik olduğunda yapılacak işlemleri belirlemek için addValueEventListener() isimli olay dinleyicisini düzenlememiz  gerekmektedir.

onDataChange() metodu veri tabanında herhangi bir değişiklik olduğunda harekete geçmektedir. Metoda parametre olarak verilen DataSnapshot sınıfı ise; bizim veri tabanındaki verileri okuyabilmemizi sağlar.
DataSnapshot sınıfı içindeki getValue() metodunu kullanarak veri tabanının o an ki halini görebiliriz.

onCancelled() metodu ise veri okuma sırasında herhangi bir hata ile karşılaştığımızda harekete geçmektedir. Bu hatalara bir örnek verecek olursak;
Diyelim ki Security & Rules bölümünde;

şeklinde bir okuma kuralı tanımlanmış olsun. Bu kurala göre veri tabanındaki verileri okumak isteyen kullanıcıların ‘admin’ yetkisine erişmesi gerekmektedir. Eğer kullanıcı henüz ‘admin’ yetkisine erişmeden; veri tabanında her hangi bir değişiklik yapılırsa programımız bunu okumak isteyecektir, fakat ‘admin’ yetkisine sahip olmadığımız için onCancelled() metodu harekete geçecektir.

Yetkilendirme (Login & Auth) : 

Firebase Platformu; uygulama geliştiricilere, yetkilendirme ve izin konularında birçok olanak sağlamaktadır.

4 Temel kategoriden oluşan Login & Auth kısmını açıklayacak olursak;

  1. Email & Password : Bu kısımda belirli kullanıcılara belirleyeceğiniz Email ve Şifrelere göre yetki verebilirsiniz. Firebase sistemine belirttiğiniz Email ve Şifre sonrasında, sistem size bir Kullanıcı ID‘si (User UID) verir. Her kullanıcı için farklı değer alan bu UID‘ler (Unique ID) sayesinde veri tabanımızın belirli bölgelerini yada tamamını, sadece belirli bir Kullanıcı ID sahibinin yada sahiplerinin erişimine açabiliriz.Mesela veri tabanımızda “mesajlar” anahtarı altındaki verileri sadece  b8d6f0f0-eba0-46eb-82a9-33831801101d şeklinde UID değerine sahip kullanıcıların okuyabilmesini; Security & Rules kısmını

    şeklinde düzenleyerek sağlayabiliriz.

    Detaylı Bilgi için : https://www.firebase.com/docs/web/guide/login/password.html

  2. Facebook, Twitter, GitHub ve Google : Bana kalırsa Firebase‘in geliştiricilere sunduğu en güzel olanaklardan birisi bu kısımdır. Bu özellik sayesinde; kullanıcıların, sadece sosyal medya hesapları ile giriş yaparak veri tabanına erişebilmesini sağlayabilirsiniz.
    Bu kısımla ilgili ayrıntıya Android Programlama için yapacağım bir sonraki makalemde gireceğim.
  3. Anonymous : Bu özellik sayesinde ise veri tabanımıza bağlanacak olan misafir kullanıcılara da belirli yetkiler ve kısıtlamalar getirebiliriz. Yapmamız gereken Login & Auth kısmından Anonymous özelliğini aktif etmek ve Security & Rules kısmına gerekli kuralları eklemektir.Detaylı Bilgi için : https://www.firebase.com/docs/web/guide/login/anonymous.html
  4. Custom : Vee geldik bu anlatımda ki Java Programımız için kullanacağımız bölüme..  Login & Auth kısmının sonuncusu olan bu bölümde Firebase bize çeşitli anahtar kelimeler (Custom Tokens) kullanarak (tıpkı MongoLab’ta olduğu gibi) kullanıcıların yetkilendirilebilmesini sağlamaktadır. Secrets kısmında sistemin bize vermiş olduğu bu anahtar kelimeler sayesinde veri tabanımıza kullanıcıların erişimini kısıtlayabilmemiz mümkündür. Genelde diğer Web API’lerde de verileri korumak için bu yöntem kullanılmaktadır. Veri tabanımızı sadece bu anahtar kelimelere (Custom Tokens) sahip olan kullanıcıların erişimine açarak; aslında veri tabanımızı, dışarıdan veri tabanına erişmek isteyen kişilerden de korumuş oluruz. Böylece bilgilerimiz güvence altında olur.

 Secrets :

Bu kısımda yetkilendirme için kullanacağımız anahtar kelimeler olan Firebase Secrets (Custom Tokens) yer almaktadır. Add New butonuna basarak birden çok Token oluşturmamız mümkündür. Oluşturulan Token‘in altındaki Show butonuna tıklayarak ilgili Token‘i görüntüleyebilir, Revoke butonuna tıklayarakta Token‘i silebiliriz.

Şimdi Java Programımıza geri dönüp, Custom Tokens kullanarak sistemde admin yetkisine nasıl erişeceğimize bir bakalım.

Bunun için authWithCustomToken(“Custom Token”, AuthResultHandler()); metodunu kullanıyoruz.

Benim Secrets kısmında oluşturmuş olduğum Custom Token: yRbx5iO7cDal6OdNtv53IwvmO24KANDDCpnSNJYX

Burada onAuthenticated() metodu yetkilendirme işlemi tamamlandığında çalışan metoddur.
Eğer yetkilendirme sırasında herhangi bir hata olursa (Örneğin yanlış bir Custom Token girilirse) onAuthenticationError() metodu harekete geçer.

child() Kavramı :

Firebase veri tabanında (anahtar-değer ilişkisine göre) değerlerin bulunduğu her anahtar ; child() olarak tanımlanmıştır. Veriler child()‘lar içine yazılır. Yani daha önceki anlatımlarda; JSON verilerinde anahtar olarak tanımladığımız kelimeler Firebase Platformu’nda child() olarak karşımıza çıkmaktadır.

Bizde Java Programı ile Firebase veri tabanına birşeyler yazarken :

firebaseNesnesi.child(“Child ismi”).setValue(“yazılacak değer”);

 

kodunda olduğu gibi setValue() metodunu kullanıyoruz.

Veri tabanında herhangi bir child‘ı silmek için ise removeValue() metodunu kullanıyoruz :

firebaseNesnesi.child(“Child ismi”).removeValue();

Java Programını toparlayacak olursak :

Yazdığımız Java Programında Firebase veri tabanına bağlanıp gerekli dinleyicileri ve yetkilerimizi düzenledik.

Program hakkında tekrar kısa bir açıklama yapmak gerekirse;
Bu Java Programında klavyeden değerler girilmekte ve her girilen değer veri tabanına mesaj 1, mesaj 2, mesaj 3,.. child‘ları ile kaydedilmektedir. Oluşturduğumuz while döngüsü sayesinde klavyeden exit yazana kadar bu işlem devam edecektir. exit yazıldığında ise döngü sona erecek ve program kapanacaktır.

Programı Çalıştıralım :

Ve Firebase veri tabanımızın son hali :

Java ve Firebase

 

Bu anlatımda Java Programlama dili kullanarak Firebase üzerindeki veri tabanına veri yazma/okuma/silme işlemlerini en genel haliyle anlatmış olup, basit bir Chat uygulamasınında temellerini atmış bulunmaktayız.. 🙂

Bir sonraki makalede Firebase‘in Android Platformunda nasıl kullanıldığı hakkında bilgi vererek temellerini atmış olduğumuz Chat Uygulamasını daha da geliştireceğiz.

Bir sonraki makale yayınlandığında haber vermemi istiyorsanız, sol taraftaki menüden e-posta adresinizle siteye abone olabilirsiniz…

Happy Codings.. 🙂



You may also like...

6 Responses

  1. numan dedi ki:

    Merhaba iyi günler,
    Benfirebase ile angular js de takıldım rica etsem yardımcı olur musunuz?
    Bir günlük saat verisini alıp firebase de göstermem lazım ve tıklanan saat onclick off-line olmasını istiyorum nasıl yapabilirim ?

    • Umut ONUR dedi ki:

      Merhaba numan.
      Maalesef Angular JS ile ilgili bir bilgi birikimine sahip değilim.. Bu yüzden bahsettiğin konuda sana yardımcı olabilmem pek mümkün değil..

  2. Burak dedi ki:

    Merhaba Firebasedatabase kullanarak güncelleme yapmak istiyorum android uygulamama güncelleme için bir buton koydum veri çekmede veritabanına eklemede sıkıntım yok tek problemim firebase’den gelen değişimi kontrol ettirebilmek aksi halde butona her bastığımda güncelliyor veriyi sildirsem güncelledikden sonra firebasedeki veriyi diğer telefonlarun firebasedeki veriyi görememesine yol açar.OndataChange yada childEventlistener childadd kısmını denedim butona her basıldığında değişim görüyor aynı veriyi bidaha bidaha ekliyor . Tek bulduğum çözüm yolu tüm içeriği SharedPref ile kayıt altına alıp değişiklik olup olmadığını kontrol etmek üstüne oldu buda başarılı bir sonuç vermiyor Umarım problemimi anlamışsındır

    • Umut ONUR dedi ki:

      Merhaba.
      addChildEventListener dinleyicisini referans nesnene ekleyerek istediğin child’daki tüm değişiklikleri dinleyebiliyorsun. Yani ekstradan güncelleme v.s. işlemi yapmana gerek yok..
      Zaten Firebase’i diğer platformlardan ayıran en temel özellik budur..
      Veri tabanındaki değişiklikler anlık olarak tüm cihazlara iletilir..

  3. Abdulla dedi ki:

    Guzel anlatim tesekkurler.

  4. Coder ACJHP dedi ki:

    Harika bir anlatım, elinize sağlık.

Bir Cevap Yazın