<?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/ictuspharma/messages:send';
public function __construct(KernelInterface $kernel)
{
// Initialisation du client Google et récupération du token
$googleClient = new GoogleClient();
$googleClient->setAuthConfig($kernel->getProjectDir()."/ictuspharma-firebase-adminsdk-b8v5v-394c664b5e.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 = [])
{
if (empty($fcmToken)) {
throw new \InvalidArgumentException("FCM token is absent");
}
// 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,
]
];
try {
// Envoyer la requête POST à l'API FCM
$response = $this->httpClient->post($this->fcmUrl, [
'json' => $message // utilisez 'json' au lieu de 'body' pour Guzzle
]);
return $response->getStatusCode();
} catch (\Exception $e) {
// Gérer l'exception et loguer l'erreur
error_log('Erreur lors de l\'envoi de la notification: ' . $e->getMessage());
throw $e; // Relancez ou gérez l'erreur comme vous le souhaitez
}
}
}