İbrahim SAYAR
Naylalabs
Published in
5 min readApr 21, 2022

--

Laravel ile Firebase‘de Cloud Message - Push Notification Nasıl Gönderilir?

Laravel aracılığı ile push notification

Bu yazımda Türkçe kaynağını pek bulamadığım ve biraz zamanımı harcayarak çok basit bir kullanımının olduğunu öğrendiğim Firebase üzerinden Laravel ile Cloud Message-Push Notification gönderimini anlatacağım. Öncelikle Firebase ve Cloud Messaging hakkında kısa bir bilgi vermek istiyorum.

Firebase

Firebase’i, web ve mobil uygulamalarınızda size kolaylık sağlayacak ve hız kazandıracak servisleri içerisinde bulunduran bir çatı olarak tanımlayabiliriz.

Cloud Message

Peki “Cloud Message nedir?” diye soracak olursanız, “Firebase çatısı altında bulunan, mobil uygulamalarınıza anlık olarak push notification(bildirim) göndermenizi sağlayan bir servistir.” diye cevaplayabiliriz.

Hemen Kolları Sıvayalım

Araştırma yaparken, Laravel ile uyumlu, Firebase servislerinin hepsine erişim sağlayabildiğimiz ve sürekli olarak güncel tutulduğunu gördüğüm bir kütüphane buldum. Bu kütüphaneyi Laravel projemize dahil ediyoruz.

composer require kreait/laravel-firebase
composer require kreait/laravel-firebase composer kodunun çalıştırılması

Paketimiz başarıyla yüklendikten sonra projemize tanımlamalar yapmamız gerekiyor.

config/app.php’de bulunan ‘providers’ dizisine projemize dahil ettiğimiz kütüphanemizi tanımlıyoruz.

Kreait\Laravel\Firebase\ServiceProvider::class
dahil edilen kütüphanenin providers’e tanımlanması

Bir sonraki adımda gerekli config ayarlarını tanımlayabileceğimiz dosyayı oluşturuyoruz.

php artisan vendor:publish --provider="Kreait\Laravel\Firebase\ServiceProvider" --tag=config

Bu komutu çalıştırdıktan sonra config klasörü altında firebase.php adında bir dosya oluştuğunu göreceksiniz. Bu oluşan dosyanın içerisinde önemli iki tane parametre var. Hemen gelin bunları inceleyelim.

Parametrelerimiz:

projects.app.credentials.file
Private servis bilgilerimizin olduğu firebase'den alacağımız json dosyası
projects.app.database.url
Projemizin veritabanına bağlanmak için kullanacağımız adresimiz

Bu iki parametreyi, ana dizinimizde bulunan .env dosyamıza ekleyeceğiz. Peki bu iki parametreye neler tanımlamamız gerekiyor?

İlk parametreye tanımlanacak dosyaya ulaşmak için Firebase panelimizi açtıktan sonra sırasıyla alttaki adımları izlemeniz gerekiyor.

Project settings - Service accounts - Generate new private key
ilk parametreye tanımlanacak dosyanın indirilmesi

Bir üst resimdeki gibi adımları takip ettikten sonra ilk parametrenize tanımlayacağınız json dosyanıza ulaşacaksınız. Bu dosyayı direkt olarak projenizin ana dizininize kopyalayın.

indirdiğimiz json dosyasının ana dizine kopyalanması

Bu adımı tamamladıktan sonra ikince parametremize tanımlamamız gereken projemizin veritabanı bilgisine ulaşmamız gerekiyor. Yine bu parametreye ulaşmak için de aşağıdaki adımları izlemeniz gerekiyor.

Realtime Database - Veritabanı adresi
ikinci parametreye tanımlanacak adrese ulaşılması

Burada https:// ile başlayan veritabanı adresinizi kopyalayın.

Son ikinci parametre bilgimizi de aldıktan sonra, .env dosyamıza ulaştığımız parametrelerimizi tanımlamamız gerekiyor.

.env dosyamızı açıyoruz ve indirdiğimiz json dosyamız ile veritabanı adresimizi tanımlıyoruz.

FIREBASE_CREDENTIALS=indirdigimiz-json-dosyasi.json
FIREBASE_DATABASE_URL=https://projeniz-3f33a.firebaseio.com
.env dosyasına yapılan tanımlamalar

İpucu

.env dosyanızın güncellendiğinden emin olmak için aşağıdaki komutu bir kez çalıştırın.

php artisan config:clear

Gerekli yapılandırmalarımız artık tamam. Hemen kod yazmaya geçelim.

Heyecanlıyız

Hemen projemizde controller dosyamızı oluşturalım

php artisan make:controller PushNotificationController
controller oluşturma işlemimiz

Ulaşacağımız api adresimizi hemen routes/api.php dosyamıza tanımlıyoruz.

istek göndereceğimiz adresi oluşturduğumuz işlem

İpucu

routes/api.php dosyanızın çalıştığından emin olmak için yine aşağıdaki komutu bir kez çalıştırın.

php artisan route:clear
route önbelleğimizi temizliyoruz

Controller dosyamızı açıyoruz ve kütüphanemizin fonksiyonlarını kullanabilmek için hemen import ediyoruz.

use Kreait\Firebase\Messaging\CloudMessage;
kütüphanemizi import ettiğimiz işlem

Başlık ve içerik bilgilerini post ile alacağım. Hemen post isteğimi karşıladığım kodlarımı yazıyorum.

Bu adımdan sonra kodlarım aşağıdaki gibi görünüyor.

post isteği ile dışarıdan gelen bilgileri alıyorum

Kütüphanemin push notification göndermek için gerekli olan tanımlamasını yapıyorum.

$messaging = app('firebase.messaging');
işlem yapacağımız fonksiyonun tanımlanması

Kısa bir hatırlatma

push notification gönderirken ihtiyacımız olan şeylerden biri de push notification göndereceğiniz tanımlayıcılar. “Nedir bu tanımlayıcılar?” diye soracak olursanız Web ya da mobil tarafında push notification göndereceğiniz kullanıcıların kaydını oluştururken onlara tanımlayabildiğiniz ayrıcalıklardır. Örnek olarak bir grup belirlersiniz ve bir istek ile tüm bu gruba push notification gönderebilirsiniz. Cloud Message tarafında bu işlemler topic üzerinden yürüyor. Daha ayrıntılı bilgilere aşağıda paylaşacağım kaynaklardan ulaşabilirsiniz.

Artık son işlemimizi de gerçekleştirdiğimize göre, push notification gönderebiliriz. Kütüphanemizdeki push notification gönderme fonksiyonumuza tanımlamalarımızı yapıyoruz. (Ben kodlarımı try-catch blokları arasına alıyorum ki herhangi bir sorunla karşılaştığımda sorunu yakalayabileyim)

Kodlarımızın en son hali bu şekilde;

try {

$title = $request->input('title');
$content = $request->input('content');

$messaging = app('firebase.messaging');

$topic = 'firebase_tarafinda_belirlediginiz_topic';

$message = CloudMessage::fromArray([
'topic' => $topic,
'notification' => [
'title' => $title,
'body' => $content,
]
]);

$messaging->send($message);
return response()->json([
'success' => true,
'title' => $title,
'content' => $content,
]);

} catch (\Exception $e) {
return response()->json(['error' => $e->getMessage()], 500);
}

Görüntüsü de bu şekilde;

Son işlemimiz… İsteğimizi çalıştırıyoruz ve ilerlediğimiz adımların başarılı olup olmadığını deniyoruz.

gönderdiğimiz isteğimizden aldığımız cevap

Başarılı sonucunu aldıktan sonra hemen cihazımızı kontrol ediyoruz.

cihazda görüntüleyebildiğimiz çıktı

Yaşasın! İsteğimize başarılı bir şekilde ulaşabildik.

Siz de artık istediğiniz kullanıcılarınıza push notification gönderebilirsiniz. Mutlu kod yazmalar…

Kaynaklar.

Ufacıkta bir reklamımız olsun değil mi? :)

scorely live google play: https://play.google.com/store/apps/details?id=com.naylalabs.footballPrediction&hl=en&gl=US

scorely live app store: https://apps.apple.com/us/app/football-soccer-predictions/id1503500057

kreait/laravel-firebase: https://github.com/kreait/laravel-firebase

laravel: https://laravel.com/docs/9.x/installation

firebase: https://firebase.google.com/docs

firebase cloud messaging: https://firebase.google.com/docs/cloud-messaging

Teşekkürler.

Muhammet Ateş

--

--