Sebelumnya kita telah membahas bagaimana mengirim firebase push notification dari aplikasi laravel kita, untuk lebih jelasnya bisa lihat di Laravel Firebase Push Notification. Pada postingan tersebut kita menggunakan *Cloud Messaging API (Legacy) *atau API versi lama, kali ini kita akan migrasi dengan menggunakan API terbaru dari firebase yaitu Firebase Cloud Messaging API (V1). Alasan kita tidak lagi menggunakan Cloud Messaging API (Legacy), dikarenakan sudah depracated sejak 20 Juni 2023 dan perlu dilakukan migrasi ke Firebase Cloud Messaging API (V1) paling lambat 20 Juni 2024. Selain itu untuk project firebase yang baru dibuat setelah 20 Juni 2023, pilihan Cloud Messaging API (Legacy) sudah tidak tersedia dan hanya tersedia Firebase Cloud Messaging API (V1), sehingga mau tidak mau harus migrasi.
Prerequisites
Service Account JSON
Pergi ke Firebase Console kamu lalu ke Project Settings > Service Accounts > Generate New Private Key. Jika file JSON sudah ter-generate, pindahkan file ke root folder project kamu.
Google Client Library
Install menggunakan composer:
composer require google/apiclient
Firebase Cloud Messaging API (V1)
Get Access Token
private function getAccessToken()
{
$credentialsPath = storage_path('app/firebase-service-account.json'); // Path to your service account file
$client = new Google_Client();
$client->setAuthConfig($credentialsPath);
$client->addScope('https://www.googleapis.com/auth/firebase.messaging');
$token = $client->fetchAccessTokenWithAssertion();
return $token['access_token'];
}
Ubah YOUR_PROJECT_ID menggunaka project ID dari firebase project kamu.
Send Firebase Notification Method
protected function firebaseNotification($message, $title = null, $topic = 'all')
{
$client = new Client;
return $client->post(config('firebase.url'), [
'headers' => [
'Authorization' => "Bearer {$this->getAccessToken()}",
'Content-Type' => 'application/json',
],
'json' => [
'message' => [
'topic' => $topic,
'notification' => [
'title' => $title ?? env('APP_NAME'),
'body' => $message,
],
],
],
]);
}
Testing Notification
public function send(BroadcastNotificationRequest $request)
{
try {
$request->validated();
$response = $this->firebaseNotification($request->message);
$status = 'success';
$message = 'Berhasil mengirim broadcast notification!';
if ($response->getStatusCode() != 200) {
$status = 'error';
$message = $response->getBody()->getContents();
}
$result = ['status' => $status, 'message' => $message];
} catch (\\Exception $e) {
$result = ['status' => 'error', 'message' => $e->getMessage()];
}
return response()->json($result);
}