Android Firebase Chat Uygulaması

Merhaba arkadaşlar,
Bugün dersimizde sizlere Firebase kütüphanesi kullanarak chat uygulamasının nasıl yapılacağını anlatacağım. Firebase ile ilgili realtime database kullanımını bu dersimizde ayrıntılı bir şekilde anlatmıştım. Şimdi Firebase Authentication ve Firebase Realtime Database özellikleri kullanılarak geliştirdiğimiz Firebase Chat Uygulaması dersimizi incelemeye başlayalım.

Öncelikle android uygulamamızda realtime database kullanacağımız için projemizi firebase sistemine dahil etmemiz gerekiyor. Android Studio da Tools->Firebase->Realtime Database dediğimizde bazı seçenekler karşımıza geliyor. Sırasıyla 1-Connect to Firebase 2-Add the Realtime Database to your app seçeneklerini tıklıyoruz ve firebase için gerekli kütüphaneler otomatik olarak uygulamamıza iniyor. Şimdi authentication işlemlerini sağlayabilmek için Firebase Authentication modulunu aktif hale getirmemiz gerekiyor realtime database de yer alan işlemlerin aynılarını uyguluyoruz ve projemizi bağlıyoruz. Android Studio da Tools->Firebase->Authentication seçeneklerinden ayarları tamamlıyoruz.

Authentication için ayrıntılı bir şekilde anlattığım bu dersimi inceleyebilirsiniz.

build.gradle

Daha sonra bu siteye girdiğimizde sisteme projemizin entegre olduğunu görüyoruz eğer daha önce firebase için başka projeler oluşturduysanız listeden chat uygulaması için oluşturduğunuz projeyi bulup açıyoruz.

( projemizin adını FirebaseChatAndroidApp koymuştum )

Daha sonra Firebase console dan Authentication kısmında yer alan SIGN-IN METHOD e tıklatarak orada bulunan seçeneklerden Email/Password Enabled hale getiriyoruz. Böylece kullanıcıların kimlik doğrulamasını; e-posta ve parola ile yapabilmelerini etkinleştirmiş oluyoruz.

Şimdi Android Firebase Chat Uygulaması içeriğinde kullanacağımız json formatını projemize dahil edelim. Chat uygulamamızda belirli konular var örneğin Yazılım, Genel, Futbol vb. bu konulara tıklayarak sohbet başlatabiliyoruz. json formatımız aşağıdaki gibidir.

Firebase Database seçeneğini seçtikten sonra bu json formatını import etmemiz gerekiyor ; Import JSON dedikten sonra hazırladığımız json uzantılı dosyayı seçip sisteme yüklüyoruz.

JSON formatını yükledikten sonra aşağıdaki gibi bir çıktı elde etmiş olacaksınız. “ChatSubjects” referansı altında çeşitli konular var konularıda açarsak içlerinde chat mesajları var ( gonderici, zaman ve mesajText ) gibi parametre değerleri tutuyor) sizde JSON formatını dilediğiniz gibi oluşturabilirsiniz.

Şimdi gelelim kod tarafını oluşturmaya; uygulamamızda ilk çalışacak olan MainActivity sınıfımız aşağıdadır. Eğer giriş yapmış ve firebase sistemine authenticate olmuş bir kullanıcı var ise direk HomeActivity açtırıyoruz. Login butonuna bastığımızda ise signInWithEmailAndPassword methodu kullanıcıdan email adresi ile parola alıyor ve login isteğinde bulunuyor. Daha sonra addOnCompleteListener ile de işlemin başarılı olup olmadığını kontrol ediyoruz.

MainActivity.java

Üye olabilmek için oluşturduğumuz Register sınıfımızda aşağıdadır. Kodları incelediğimizde; createUserWithEmailAndPassword methodu kullanıcı adını ( kullanıcı email adresi ) ile parolasını alıyor yine addOnCompleteListener ile de işlemin başarılı olup olmadığını kontrol ediyoruz eğer register işleminde sorun yok ise kullanıcıyı MainActivity sayfasına yönlendiriyoruz.

RegisterActivity.java

Login ve Register işlemlerine de incelediğimize göre şimdi HomeActivity sınıfımıza bakalım; yukarıda json yapısının oluştururken anlattığım gibi chat konularımızı Firebase Database den çekiyoruz ve ListView de gösteriyoruz. Bu konuları sohbet odaları olarak da düşünebiliriz.

HomeActivity.java

Mesaj yapısını tutabileceğimiz bir model oluşturuyoruz bu model de yukarıda anlatmış olduğum json yapısına göre tasarlanması gerekiyor.

Message.java

Chat kısmında eğer gönderici ile sisteme authenticate olan kişi aynı ise atmış olduğu mesaj için ayrı bir layout oluşturuyoruz ve tam tersi durumda ise yine farklı bir layout tasarlıyoruz. Bu aşamada kaynak kodları indirip çalıştırmanız faydalı olacaktır.

Chat kısmında iki çeşit layout olacağını söylemiştim bunların kaynak kodları:

right_item_layout.xml

left_item_layout.xml

Şimdi gelelim chat kısmındaki ListView i dolduracağımız Adapter yapısını incelemeye; sistemdeki güncel kullanıcının e-posta adresi ile mesajlardaki e-posta aynı olduğunda right_item_layout u kullan, farklı olduğunda left_item_layout u kullan diyoruz.

CustomAdapter.java

HomeActivity de ListView de yer alan konulara tıkladığımızda ChatActivity açıldığını göreceksiniz. Açılan bu sayfada neler yaptık şimdi onu inceleyelim; HomeActivity den gönderdiğimiz değeri aldık ve ilgili referans değerine ulaştık. Json yapısını incelediğimizde en üst kısıma “ChatSubjects” adını vermiştik önce ona ulaşıyoruz daha sonra içindeki konuya ( HomeActivity den gelen değer ) daha sonra da ilgili “mesaj” bloğuna erişiyoruz.

addValueEventListener methodu ile veritabanında değerlerde herhangi bir değişiklik oldu mu diye bakıyoruz eğer olduysa ListView yapımızı güncelliyoruz. ( yeni bir mesaj eklenebilir, mesajın içeriğinde değişiklik olabilir vb. )

Yeni bir mesaj girildiğinde ise Message model yapımızı oluşturuyoruz ( kullanıcıdan girdiği mesaj içeriğini, kullanıcının e-posta adresini ve mesajı girdiği andaki güncel zaman dilimini kullanıyoruz ) daha sonra da DatabaseReference objesini kullanarak oluşturduğumuz Message objesini veritabanına ekliyoruz.

ChatActivity.java

Evet arkadaşlar böylece Android Firebase Chat Uygulaması nı tamamlamış olduk kısaca yaptıklarımızı özetleyecek olursak Firebase Authentication ile kullanıcı kimlik doğrulama ( sisteme kayıt olma ve giriş yapma ) işlemlerini gerçekleştirdik kullanıcı giriş yaptıktan sonra karşısına JSON yapısına bağlı olarak çeşitli chat konuları geldi o chat konularına tıklayarak da sohbet odalarına giriş yapmış olduk. Firebase Realtime Dabase yapısını  kullanarak da mesajlaşma kısmını oluşturduk. Firebase de gerçekten bir çok özellik var sizlere tavsiyem Firebase yapısını daha çok kurcalayıp farklı bilgiler edinmek ayrıca bu dersimizdeki temel amaç diğer ders serilerimizde öğrenmiş olduğumuz bilgileri kullanarak chat uygulamasının yapım aşamalarını sizlere göstermekti umarım faydalı olmuştur.

not: ( Firebase Chat Uygulaması Google Play Services  yüklü olmayan bir Genymotion emülatörde  çalışmayacaktır !  Eğer Google Play Service yüklü değilse ya GenyMotion a eklenti olarak kuracaksınız yada Android Emulator veya gerçek cihazda deneyeceksiniz. ) 

Tüm Android Ders, Proje ve Kaynak Kodlar için tıklayınız.

Mobilhanem.com üzerinden anlattığımız mobil uygulama geliştirme derslerine devam edeceğiz. Bu dersimizde Firebase Chat Uygulaması konusunu anlatmaya çalıştık. Konu hakkında sorunuzu yorum alanından sorabilirsiniz. Konu dışı sorularınızı ve tüm yazılımsal sorularınızı sorucevap.mobilhanem.com sitemizden de sorabilirsiniz.

Bir dahaki dersimizde görüşmek dileğiyle..

Alper Beyler

Yüksek Lisans: Çankaya Üniversitesi / Bilgisayar Mühendisliği
Lisans: Çankaya Üniversitesi / Bilgisayar Mühendisliği (4/3.30) (2010-2014)
Lisans : Viyana Teknik Üniversitesi / Bilgisayar Bilimleri (2013)

38 Yorum

  • Merhaba hocam, elinize sağlık güzel bir ders olmuş. Bu mesajlaşmayı 1’e 1, yani sadece 2 kullanıcı arasında nasıl gerçekleştirebiliriz?

  • merhaba uygulamayı yaptım login olurken ve giriş yaparken uygulama durduruldu hatası veriyor bir daha acılmıyor uygulamayı kaldırıp tekrar kuruyorum tekrar login olurken ay nı hatayı alıyorum

    • Merhaba, öncelikle dersteki kaynak kodu mu indirip çalıştırdığınızda bu hatayı alıyorsunuz ? uygulama durduruldu hatasını aldığınızda logcat çıktısında hatanın neden kaynaklandığını yazması gerekiyor onuda paylaşırsanız yardımcı olmaya çalışalım

  • Merhaba.
    Amatör bir programcı olarak Bulut Veritabanı sistemlerinin herangi bir işe yarayacağını düşünmüyorum. Örneğin ben firmamın veritabanı bilgilerini neden Bulut Veritabanında saklayayım. O zaman benim verilerimin gizliliği nerede kalır. Programcıları yenilik filan deyip böyle boş işlerle uğraştırıyorlar. Böyle bir veritabanı sistemi ancak sunucu sizin kendinize aitse kullanılabilir. Yoksa ABD nin bilmem neresindeki Bulut Veritabanında kimse veri falan saklamaz. Olsa olsa önemsiz bilgilerini resimdir, notlardır bunları saklar. Gereksizdir demiyorum ama çok iddialı olmak ve yazılımcıyı böyle boş şeylerle meşgul etmek gereksiz.

    • Merhaba, Firebase sistemini ne kadar incelediniz ? güvenlik açısından neler yaptığını nasıl bir çalışma mekanizması olduğunu biliyor musunuz ? Google gibi bir şirket bu sisteme onca destek verirken , Turkcell kendi gerçekleştirdiği eğitimlerinde olsun kendi projelerinde olsun Firebase sistemini kullanıyorken sizin kalkıp bol şeylerler uğraşmak demeniz ne kadar doğru bilemiyorum. Sektörde kaç yıldır yazılım dünyasının içerisinde biri olarak sizlere ; önyargılı yaklaşmanın doğru olmadığını belirtip, bu konuda daha çok araştırma yapmanızı öneririm.

  • Merhaba,

    HomeActivity.java içerisinde editör R.menu.menu (2.sıradaki menu) ve R.id.exit (exit) tanımıyor. “cannot resolve symbol” ibaresi çıkıyor. Ne yapabilirim?

  • Merhabalar bu projedeki bir konuya tıkladığımızda bu konuyu 2 kişinin bire bir konuşma olayını nasıl yapabiliriz?

  • Eline Sağlık. Türkçe kaynağın neredeyse olmadığı bir zamanda bu şekilde projeyi paylaşmak gerçekten emek içeren ve güzel bir hareket. Başarılarının devamını dilerim

    • Merhaba, çok teşekkürler olumlu düşünceleriniz için biz de elimizden geldiğince bildiklerimizi aktarmaya çalışıyoruz.

      • Whatsapp tarzı bir uygulama örneğini, firebase veya benzeri bir api üzerinden anlatma şansın var mı, yabancı kaynaklarda bulmak mümkün lakin, türkçe bir kaynak olduğunda anlaşılması daha kolay olur diye düşünüyorum hocam. Saygılarımla

        • Merhaba, whatsapp tarzı uygulamalar biraz daha kapsamlı ve zaman alıcı konular fakat söylediğinizi dikkate alacağız zaman olursa en kısa zamanda anlatmaya çalışırız, iyi günler.

  • Saygı değer hocam her şeyi iyi hoş güzelce yaptım fakat takıldığım bi yer oldu yeni mesaj gelince en alt satırı göstermesi için ne yapmam gerek

  • one to one bir mesajlaşma yaptırmak istiyorum. Ancak diyelim ki zaman geçtikçe çok fazla kullanıcıya ulaşabilir uygulama. Bunun için firebase yine de uygun mudur hocam?

    • Bu arada burada FCM kullanılmamış.
      Normal bir veritabanı işlemi yapılmış.
      Mesajlaşma diyince aklıma FCM geldi. Bu yaklaşım doğru mu? ayrıca bir cihazdan başka bir cihaza direk mesaj yollamayı FCM desteklemiyormuş bunu öğrendiğim iyi oldu.
      ilgili link:

      https://stackoverflow.com/questions/37990140/how-to-send-one-to-one-message-using-firebase-messaging

      Bu arada ben aynı zamanda firebase databasemde facebook ile giriş yapan kullanıcıların verilerini saklıyorum. Mesajlaşma için 2. bir veritabanımı oluşturmam gerekiyor yoksa farklı bir json şablonu ekleyip bir tabloymuşcasına orayı mesajlaşma için kullanabiliyor muyum ???

        • Merhaba, yoğun olduğum için ilgilenemiyorum sorularla şimdi gördüm. kullanıcı verilerini nasıl saklıyorsun ? verileri çektiğinde kişileri ve mesajları ilişkilendirebilirsin. ben yukarıdaki örnekte bir konuya göre mesajlaşma işlemini gerçekleştirmiştim.

    • zaman geçtikçe veri sayısının çok artacağını düşünüyorsan ya firebase a para verip burdan devam edeceksin yada kendin server kısmını oluşturup firebase bağlı kalmadan ilerleyeceksin.

    • Merhaba, tam olarak sorunuz nedir nerede takıldınız ? buradan yardımcı olmaya çalışalım ne yazık ki dediğiniz şekilde yardımcı olamıyoruz.

  • Hocam kaynak kodu android studioda açtıyorum ChatActivity yi açtığımda bir anda birsürü şeyin altı kırmızı çiziliyor yanlış yazılmış gibi ama bu birtek bu projede olmuyor çoğunda böyle sanırım bu ide den kaynaklı eksik birşey mi yükledim acaba yardımcı olabilir misiniz

  • merhaba firebase te kullanıcı arkadaşinin ismine tıklayınca onun profil sayfasına gitmesini nasil şağlarım acaba?

  • Benim bu güvenlik olayında anlam veremediğim bir kaç olay var.

    Uygulamamda bir tabloya herhangi bir güvenlik koymaz isem uygulamam dışında bir kişi bağlantıyı bilirse veri tabanına istediği gibi yazabilirmi?

    yoksa sadece uygulama içinden istekler gönderilerek benim yazdığım fonksiyonlar ile mi çalışması sağlanır. sadece o aplikasyona özel bir bağlantımı oluyor?

    aplikasyon dışında linki bilen biri sisteme bağlanıp istediği değişikliği yapabilir mi

  • Hocam her şey sorunsuz çalışıyor fakat giriş yaptığımda HomeActivity’e futbol vs. gelmiyor boş geliyor, sizce sorun nerede?

  • Burada bile futbol muhabeti yapman çok sinir bozucu. Yazacak baska bir sey bulamadın da futbol muhabeti mi…

    • selamlar,futbol muhabbeti ile bu konumuzun nasıl bir bağlantısı var ? o kadar detaylı anlatımı ve kodları incelemeyip; futbol örneğine mi takıldınız gerçekten şaşırtıcı.

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?