Kendi Ücretsiz Mesajlaşma Uygulamanı Yap

Besir Karaoglu
Huawei Developers - Türkiye
4 min readJan 4, 2023

Giriş

Merhaba,

Şu günlerde en çok ne yaptığınıza dikkat ettiniz mi? Mesajlaşmak. Bu olaya son günlerde farklı bakmaya başladım. Günlük hayatta neredeyse yaptığımız her şey mesajlaşmak üzerine kurulu. Çünkü internet ve akıllı telefonların hayatımıza girmesiyle iletişim iyice yaygınlaştı ve kolaylaştı. Günlük kullandığımız uygulamalarda da bunun örneğini sıkça görmekteyiz. Gördüklerimizi, yaptıklarımızı, sorunlarımızı paylaşamadığımız hiçbir uygulama yok ve aksi bir durum uygulamaların retentionlarını göz ardı edilemeyecek şekilde olumsuz etkiliyor. Bu makalede az önce bahsettiğim bilgileri de göz önünde bulundurarak, tamamen ücretsiz(Temel kullanımda ücretsiz. Aksi bir durumda sorumluluk kabul etmiyorum.) ve backend server’a ihtiyaç duymadığımız bir mesajlaşma uygulamasının bileşenlerinden bahsedeceğiz. Bu makale sayesinde temel bir mesajlaşma uygulaması için ihtiyacınız olan her bilgiye sahip olacaksınız. Şimdi teknik bölüme geçelim.

Kütüphaneler Hakkında

Cloud Functions: Cloud Functions for Firebase, Firebase özellikleri ve HTTPS istekleri tarafından tetiklenen olaylara yanıt olarak arka uç kodunu otomatik olarak çalıştırmanıza izin veren sunucusuz bir çerçevedir.

Cloud Messaging: Firebase Cloud Messaging (FCM), ücretsiz ve güvenilir bir şekilde mesaj göndermenizi sağlayan bir platformlar arası mesajlaşma çözümüdür.

Firestore Database: Cloud Firestore, Firebase ve Google Cloud’dan mobil, web ve sunucu geliştirmeye yönelik esnek, ölçeklenebilir bir veritabanıdır.

Kullanacağımız SDK’lardan kısaca bahsetmiş olduk. Şimdi bu SDK’ların nasıl uygulandığına bakalım.

Kodlama

Bu makalede, makalenin basitliği açısından temel integrasyon adımlarını atlıyoruz. Herhangi bir kısımda eksiklik hissederseniz Referanslar başlığı altından GitHub kaynak kodlarını ya da resmi dökümantasyon linklerini inceleyebilirsiniz.

Uygulamayı inşa ederken SDK’lar üzerinden ilerleyelim. Bu sayede her SDK’nın işlevinden detaylı bir şekilde bahsetmiş oluruz.

  1. Cloud Messaging

Cloud Messaging kullanarak kullanıcının token’ını alacağız ve cihaza gönderilen push mesajlarını handle edeceğiz.

1.1 Push mesajlarını alma
Push mesajlarını almak için FirebaseMessagingService() class’ını extend ettiğimiz bir class oluşturmamız, ve sonrasında bunu AndroidManifest’e eklememiz gerekiyor.

1.2 Push token’ı alma

Push token’ı almak için çağıracağımız fonksiyon:

Bu fonksiyonu daha ileride örnek içinde göreceğiz.

2. Firestore Database

Firestore, döküman odaklı bir veritabanıdır. Koleksiyonlar dökümanları, dökümanlar anahtar-değer ikililerini barındırır. Bu uygulama üzerinden örnek verecek olursak; users, tokens, ve messages adında 3 koleksiyonumuz olacak ve bunların içine her veriyi döküman olarak ekleyeceğiz.

Firestore Screenshot

İlk olarak user’ın token’ını kaydettiğimiz örneğe bakalım.

Burada token’ı almak için daha önce bahsettiğimiz Firebase.messaging.token.await() fonksiyonunu kullandık. Sonrasında tokenCollection ile ilgili koleksiyonu seçtik, .document(sharedPreferences.getUid()!!) ile ekleyeceğimiz dökümanın id’sini belirledik, ve .set(Token(token)) ile anahter-değer ikilisini dökümana eklemiş olduk.

İkinci olarak ise mesajlaşma ekranında kullandığımız fonksiyona bakalım.

Burada çağırdığımız messageCollection.document(messageId).collection(“messages”).addSnapshotListener(snapshotListener) fonksiyonu sayesinde ilgili messageId dökümantasyonu altındaki “messages” koleksiyonunda herhangi bir değişiklik yapıldığında fonksiyon tetiklenecek ve sonuç kullanıcıya gösterilecek.

3. Cloud Functions

Bu kısımda ise bence uygulamanın en keyifli kısmı olan Cloud Functions SDK’sını inceleyeceğiz -Muhtemelen yıllar sonra ilk kez Kotlin harici bir dil kullandığımdan :)-. Bu uygulama özelinde Cloud Functions’ı kullanıcı yeni bir mesaj aldığında tetiklenmesi için kullandık. Şimdi kodu inceleyelim.

Öncelikle, functions.firestore .document(‘messages/{chatId}/messages/{messageId}’) ile Firestore’da .documents() içinde verdiğimiz path’i dinleyeceğimizi, .onWrite() ile de sadece yeni veri eklendiğinde işlem yapacağımızı belirtmiş olduk.

Fonksiyon tetiklendiğinde ise, const data = change.after.data(); ile yeni eklenen datayı almış olduk. Bu data mesajı gönderen ve alan kişilerin id’lerini ve mesaj textini içeriyor. Burada bildirim göndermek için nelere ihtiyacımız olduğunu tekrar hatırlayalım:
1. Mesaj içeriği
2. Mesajı gönderen kullanıcının bilgileri(Adı, profil fotoğrafı)
3. Mesajı alan kullanıcın token’ı

Mesaj içeriğini almak için:

Mesajı gönderen kullanıcının bilgileri için:

Mesajı alan kullanıcın token’ı için:

Fonksiyonlarını çağırdık. Bu aşamadan sonra sadece bildirim oluşturup bu bildirimi yollaması kaldı.

Bir value oluşturup ilgili verileri yerine ekliyoruz. Ardından return admin.messaging().sendToDevice(receiverToken, payload, options) ile bildirimi gönderiyoruz.

Sonuç

Bu makalede, akıllı telefon uygulamalarında sıkça kullandığımız mesajlaşma özelliğini herhangi bir backend server’a ihtiyaç duymadan, sadece gerekli Firebase SDK’larını kullanarak nasıl geliştirebileceğimizi, her SDK için ayrı örnekler vererek ve bu örneklerde hangi fonksiyonun neden gerekli olduğundan bahsederek anlattık. Kullanılan SDK’lar hakkında daha fazla bilgi almak ya da geliştirdiğim demo uygulamanın kodlarını incelemek için Referanslar kısmına göz atabilirsiniz.

Gelecek yazılarda görüşmek üzere :)

Referanslar

--

--