<?php
namespace App\Services;
use Google\Client as GoogleClient;
use GuzzleHttp\Client as GuzzleClient;
use Symfony\Component\HttpKernel\KernelInterface;
class NotificationService
{
private $httpClient;
private $fcmUrl = 'https://fcm.googleapis.com/v1/projects/pcieictus/messages:send';
public function __construct(KernelInterface $kernel)
{
// Initialisation du client Google et récupération du token
$googleClient = new GoogleClient();
$googleClient->setAuthConfig($kernel->getProjectDir()."/pcieictus-firebase-adminsdk-fbsvc-10398550ce.json");
$googleClient->addScope('https://www.googleapis.com/auth/firebase.messaging');
// Récupération du token d'accès
$token = $googleClient->fetchAccessTokenWithAssertion()['access_token'];
$this->httpClient = new GuzzleClient([
'headers' => [
'Authorization' => 'Bearer ' . $token,
'Content-Type' => 'application/json',
]
]);
}
public function sendNotification($fcmToken, $title, $body, $data = [])
{
$message = [
"message" => "FCM token absent"
];
if (!empty($fcmToken)) {
//Convertir toutes les valeurs dans le tableau $data en chaînes de caractères
$data = array_map('strval', $data);
// Préparer le message pour FCM
$message = [
'message' => [
'token' => $fcmToken,
'notification' => [
'title' => $title,
'body' => $body,
],
'data' => $data
]
];
}
// Envoyer la requête POST à l'API FCM
$response = $this->httpClient->post($this->fcmUrl, [
'body' => json_encode($message)
]);
// Retourner le code de statut de la réponse
return $response->getStatusCode();
}
}