Cara Mudah Push Notifikasi Dengan Laravel Firebase

1. Menambahkan File Credential

Di sini kita akan menambahkan env firebase bedasarkan donwload apps berupa credential json yang kita daftarkan dari firebase console

FIREBASE_CREDENTIALS=firebase-credential-demo.json

2. Membuat Firebase Notification

Pada langkah ini kita akan menambahkan request permission, mengambil token, dan menampilkan notifikasi pada browser.

Buat file pada public\js\firebase.js dan masukan script di bawah ini.

var firebaseConfig = {
	apiKey: "xxx",
	authDomain: "firebase-demo.firebaseapp.com",
	projectId: "firebase-demo",
	storageBucket: "firebase-demo.appspot.com",
	messagingSenderId: "12345",
	appId: "1:12345:web:12345abc",
	measurementId: "G-N8EHJ1Y15R"
};
  
firebase.initializeApp(firebaseConfig);
const messaging = firebase.messaging();
messaging.requestPermission().then(function () {
	return messaging.getToken({ vapidKey: '*public-key' })
}).then(function(token) {
	console.log(token);
	$.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } });
	$.ajax({
		url: 'api/firebase/register',
		type: 'POST',
		data: { token: token },
		dataType: 'JSON',
		success: function (response) {
			console.log('Token has storing.');
		},
		error: function (err) {
			console.log('Token Error: ' + err);
		},
	});
}).catch(function (err) {
	console.log('Token Error'+ err);
});
  
messaging.onMessage(function(payload) {
	const noteTitle = payload.notification.title;
	const noteOptions = {
		body: payload.notification.body,
		icon: payload.notification.icon,
	};
	new Notification(noteTitle, noteOptions);
});

Lalu kita panggil pada home.

<script src="" defer></script>

3. Membuat Controller Firebase

Pada langkah ini kita akan membuat controller firebase untuk menyetor token dan membuat send notification. Untuk menyetor token di sini kita menggunakan cloud message yang sudah di sediakan, untuk lebih lanjut kalian bisa kunjungi tutorial di sini kreait/laravel-firebase.

php artisan make:controller FirebaseController

Kemudian tambahkan script di bawah ini.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Kreait\Firebase\Messaging\CloudMessage;
use Kreait\Firebase\Messaging\WebPushConfig;

class FirebaseController extends Controller
{
    public function register(Request $request)
    {
        $messaging = app('firebase.messaging');

        $topic = 'testing';

        $result = $messaging->subscribeToTopic($topic, $request->token);

        return response()->json(['status' => $result[$topic][$request->token] ?? 'OK']);
    }
    
    public function sendNotification(Request $request) {

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

        $topic = 'testing';

        $message = CloudMessage::withTarget('topic', $topic);

        $config = WebPushConfig::fromArray([
            'notification' => [
                'title' => $request->title,
                'body' => $request->body,
                'icon' => asset('favicon.ico'),
            ],
            'fcm_options' => [
                'link' => url('/'),
            ],
        ]);

        $message = $message->withWebPushConfig($config);

        $messaging->send($message);
    }
}

Lalu tambahkan route pada api.

Route::post('firebase/register', 'FirebaseController@register')->name('firebase.register');
Route::post('firebase/send-notification', 'FirebaseController@sendNotification')->name('firebase.send-notification');

4. Membuat Form

Pada langkah ini kita akan membuat form.blade.php untuk mengetes pada push notification.

@extends('layouts.app')

@section('title', 'Form Push Notification')

@section('content')
<div class="card-body">
	@if (session('status'))
		<div class="alert alert-success" role="alert">
			
		</div>
	@endif
	<form action="" method="POST">
		@csrf
		<div class="form-group">
			<label>Title</label>
			<input type="text" class="form-control" name="title">
		</div>
		<div class="form-group">
			<label>Body</label>
			<textarea class="form-control" name="body"></textarea>
		  </div>
		<button type="submit" class="btn btn-primary">Send</button>
	</form>
</div>
@endsection

Sekian untuk kali ini semoga bermanfaat :D untuk lebih lanjut bisa kunjungi link tersebut.