Mengirim Firebase Topic Notification Secara Mudah dengan Package kreait/laravel-firebase
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.
Setalah itu, pada menu “Project Overview”, kalian klik logo gear dan pilih opsi “Project Settings”.
Setelah itu, pada halaman Project Settings, pilih tabs “Service accounts”, lalu klik tombol “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
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
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.
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.
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, sementaraNotification
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