Mengirim Firebase Topic Notification Secara Mudah dengan Package kreait/laravel-firebase

Wahyu Ivan
5 min readJan 2, 2024

--

Image Source: https://docs.kii.com/en/functions/cloudsdk/managing-push-notification/push-to-user/01.png

Halo gais, kali ini aku akan membawakan sebuah tulisan mengenai integrasi dan implementasi Firebase pada backend. Sedikit overview mengenai apa itu Firebase, Firebase merupakan sebuah platform untuk mendukung pengembangan aplikasi mobile dan web yang menyediakan serangkaian alat dan layanan untuk membantu developer membangun dan scaling aplikasi dengan lebih mudah.

Firebase memiliki banyak fitur, salah satunya adalah Cloud Messaging. Cloud Messaging pada Firebase memiliki beberapa jenis, salah satunya yaitu Topic Notification. Topic Notification berguna untuk mengirimkan notifikasi ke banyak device yang subscribe ke suatu topic.

Beberapa hal yang perlu diingat tentang Topic Notification:

1. Topic Notification mendukung topic dan subscription tanpa batas untuk setiap aplikasi.

2. Topic Notification paling cocok untuk konten seperti berita, cuaca, atau informasi publik lainnya.

3. Topic Notification dioptimalkan untuk throughput, bukan latensi. Untuk pengiriman yang cepat dan aman ke satu perangkat atau sekelompok kecil device, targetkan notifikasi ke token pendaftaran, bukan topik.

Jadi untuk tulisan ini akan lebih fokus ke sisi konfigurasi pada Firebase console dan integrasi serta implementasi pada backend (Laravel) dengan bantuan package kreait/laravel-firebase. Jadi mari kita menuju pembahasan pertama yaitu melakukan konfigurasi pada Firebase console.

1. Konfigurasi pada Firebase Console

Untuk melakukan konfigurasi pada Firebase console, kalian bisa menuju halaman https://console.firebase.google.com, lalu membuat sebuah proyek Firebase baru (jika belum memilikinya), jika sudah memiliki existing project, kalian tinggal menuju ke dashboard proyek kalian.

Dashboard Project

Setalah itu, pada menu “Project Overview”, kalian klik logo gear dan pilih opsi “Project Settings”.

Project Settings

Setelah itu, pada halaman Project Settings, pilih tabs “Service accounts”, lalu klik tombol “Generate new private key”.

Generate New Private Key

Jika sudah, maka akan menampilkan pop up untuk generate private key, lakukan langkah selanjutnya dan jika sudah, maka private key dalam bentuk JSON akan ter-download. Okay, segitu saja konfigurasi di Firebase console. Kita akan lanjut untuk integrasi dan implementasi pada backend.

2. Integrasi, Implementasi, dan Mengirimkan Topic Notification pada Backend Laravel

Integrasi pada backend akan memerlukan private key dalam bentuk JSON yang sudah kita download sebelumnya. Implementasi pengiriman notifikasi akan memanfaatkan package kreait/laravel-firebase agar kita tinggal pakai saja dan tidak perlu develop ulang semua logic yang diperlukan untuk melakukan request ke Firebase. Okay jadi langkah pertama yang perlu dilakukan adalah melakukan instalasi dari package kreait/laravel-firebase. Kalian tinggal jalankan command di bawah ini pada terminal project.

composer require kreait/laravel-firebase

Selanjutnya kita akan melakukan publishing configuration pada package ini agar bisa kita kustomisasi. Kalian tinggal menjalankan command di bawah ini dan pada berkas config, akan muncul file dengan nama firebase.php.

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

Setelah itu, kita akan menambahkan kredensial dari Firebase ke project. Ada 2 cara yang bisa kalian lakukan, pertama dengan include file private key dalam bentuk JSON pada root project kalian, lalu modifikasi .env kalian dengan menambahkan kode di bawah ini.

FIREBASE_CREDENTIALS=firebase.json
Letak Kredensial Firebase pada Project

Cara kedua yaitu dengan modifikasi key credentials pada file config/firebase.php dengan menambahkan isi dari file service account Firebase. Contohnya seperti di bawah ini.

'credentials' => [
'type' => 'service_account',
'project_id' => 'some-project-123',
'private_key_id' => '123456789',
'private_key' => '-----BEGIN PRIVATE KEY-----\nFOO_BAR_123456789\n-----END PRIVATE KEY-----\n',
'client_email' => 'firebase-adminsdk-cwiuo@some-project-123.iam.gserviceaccount.com',
'client_id' => '123456789',
'auth_uri' => 'https://accounts.google.com/o/oauth2/auth',
'token_uri' => 'https://oauth2.googleapis.com/token',
'auth_provider_x509_cert_url' => 'https://www.googleapis.com/oauth2/v1/certs',
'client_x509_cert_url' => 'https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-cwiuo%40some-project-123.iam.gserviceaccount.com',
'universe_domain' => 'googleapis.com',
],

Jika sudah, maka setup integrasi Firebase pada project sudah selesai. Sekarang kita akan ke tahap implementasi pada panel admin untuk me-manage topic dan me-manage topic notification.

Pertama kita akan membuat sebuah migration dan model untuk tabel topic dan notifikasi topik, lalu dilanjutkan dengan membuat views dan controller sederhana untuk me-manage topic dan me-manage notifikasi topic. Akan ada 2 tabel yang akan kita buat, yaitu tabel topic dan tabel topic_notification.

php artisan make:migration create_topic_table
php artisan make:migration create_topic_notification_table
Skema Table topic dan topic_notification

Setelah itu, kita akan membuat model untuk tabel topic dan topic_notification.

php artisan make:model Topic
php artisan make:model TopicNotification

Selanjutnya, kita akan membuat views dan controller. Akan ada 2 jenis page yaitu page untuk me-manage topic dan page untuk me-manage topic notification. Pada proyek playground-ku , tampilan page me-manage topic akan seperti ini.

Tampilan Halaman Manage Topic

Page diatas berfungsi sebagai tempat untuk melakukan operasi CRUD data topic. Data topic ini juga akan di-present sebagai API untuk tulisan berikutnya mengenai integrasi topic notification pada platform mobile Android. Selanjutnya tampilan page me-manage topic notification akan seperti ini.

Tampilan Halaman Buat Notifikasi Topic
Tampilan Halaman History Notifikasi Topic

Page diatas berfungsi sebagai tempat untuk membuat dan mengirim topic notification, melihat history dari topic notification yang pernah dikirim, menghapus data history dari topic notification yang pernah dikirim, serta melakukan resend terhadap topic notification yang sudah pernah dikirim sebelumnya.

Untuk potongan kode yang akan aku tunjukan pada tulisan ini hanya potongan kode pada controller untuk men-handle pengiriman notifikasi topik dengan package kreait/laravel-firebase. Berikut merupakan potongan kodenya.

use Kreait\Firebase\Messaging\CloudMessage;
use Kreait\Firebase\Messaging\Notification;

public function sendNotification($topic, $title, $body)
{
$firebase = app('firebase.messaging');
$message = CloudMessage::withTarget('topic', $topic)
->withNotification(Notification::create($title, $body));

$firebase->send($message);
}

Penjelasan mengenai block kode diatas yaitu:

  • Baris 1 dan 2: Menggunakan namespace dan class dari package kreait/laravel-firebase. CloudMessage digunakan untuk membuat pesan yang akan dikirim ke Firebase Cloud Messaging, sementara Notification digunakan untuk menentukan konten notifikasi
  • Variabel $firebase mendapatkan instance pesan FCM dari service container Laravel dan menggunakannya untuk mengirim pesan
  • CloudMessage::withTarget('topic', $topic): Menentukan bahwa notifikasi akan dikirim ke sebuah topik. Argumen kedua ($topic) adalah nama topik tujuan pengiriman notifikasi
  • ->withNotification(Notification::create($title, $body)): Mengatur konten notifikasi. Argumen pertama adalah judul notifikasi dan argumen kedua adalah body notifikasi.
  • Method send mengirimkan notifikasi FCM dengan data yang ada pada variabel$message

Cukup mudah bukan? Kalian bisa kustomisasi bagaimana cara kalian me-manage data topic dan notifikasi topic sesuai kebutuhan kalian. Nah, pada tulisan berikutnya aku akan menunjukan bagaimana caranya kalian bisa melakukan subscribe ke suatu topic serta menampilkan notifikasi topic melalui aplikasi Android.

Oke gais, sekian dulu untuk pembahasan integrasi dan implementasi notifikasi topic dengan package kreait/laravel-firebase. Terimakasih sudah membaca dan semoga bermanfaat!

Refrensi:
[1]
https://firebase-php.readthedocs.io/en/latest/cloud-messaging.html

--

--