Migrasi dari API FCM Legacy ke API HTTP v1 di PHP

Dengan diperkenalkannya HTTP v1 API, Firebase Cloud Messaging (FCM) telah meningkatkan keamanan dan memperluas kapabilitas. Panduan ini akan membantu Anda bermigrasi dari API FCM lama ke API HTTP v1 di PHP.

Prasyarat

Kunci Akun Layanan: Pastikan Anda memiliki file kunci JSON akun layanan untuk proyek Firebase Anda. Buat ini dari Firebase Console di bawah “Project Settings” > “Service Accounts” > “Generate New Private Key”.
Google Client Library: Pastikan paket `google/apiclient` telah terinstal. Jika belum, instal menggunakan Composer:

composer require google/apiclient
require 'vendor/autoload.php';
use Google\Client;
function getAccessToken($serviceAccountPath) {
   $client = new Client();
   $client->setAuthConfig($serviceAccountPath);
   $client->addScope('https://www.googleapis.com/auth/firebase.messaging');
   $client->useApplicationDefaultCredentials();
   $token = $client->fetchAccessTokenWithAssertion();
   return $token['access_token'];
}
function sendMessage($accessToken, $projectId, $message) {
  $url = 'https://fcm.googleapis.com/v1/projects/' . $projectId . '/messages:send';
  $headers = [
   'Authorization: Bearer ' . $accessToken,
   'Content-Type: application/json',
   ];
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['message' => $message]));
  $response = curl_exec($ch);
   if ($response === false) {
   throw new Exception('Curl error: ' . curl_error($ch));
   }
  curl_close($ch);
  return json_decode($response, true);
}
// Path to your service account JSON key file
$serviceAccountPath = 'path/to/your/service-account-file.json';

// Your Firebase project ID
$projectId = 'your-firebase-project-id';

// Example message payload
$message = [
 'token' => 'device-token',
 'notification' => [
 'title' => 'Hello',
 'body' => 'World',
 ],
];
try {
   $accessToken = getAccessToken($serviceAccountPath);
   $response = sendMessage($accessToken, $projectId, $message);
   echo 'Message sent successfully: ' . print_r($response, true);
} catch (Exception $e) {
   echo 'Error: ' . $e->getMessage();
}

Catatan Penting

Ganti `path/to/your/service-account-file.json` denganlokasi sebenarnya ke file key JSON akun layanan Anda.

Ganti `your-firebase-project-id` dengan ID proyek Firebase Anda yang sebenarnya.

Ganti `device-token` dengan token FCM perangkat target.

Struktur array `message` harus sesuai dengan format pesan HTTP v1 API.

Dengan mengikuti langkah-langkah ini, Anda dapat memigrasikan integrasi FCM Anda dari API lama ke HTTP v1 API, memanfaatkan keamanan dan fungsionalitas yang ditingkatkan.