<?php
namespace App\Classes;
use Google\Client as GoogleClient;
use Illuminate\Support\Facades\Log;
class PushNotification
{
private $icon;
private $image;
private $title;
private $shortMsg;
private $userFirebaseToken;
private $clickAction;
public function __construct(
$title,
$shortMsg,
$userFirebaseToken,
$clickAction = 'com.imali.payapp.payment_NOTICIA',
$image = '',
$icon = 'ic_imali_logo_verde_01',
) {
$this->title = $title;
$this->shortMsg = $shortMsg;
$this->userFirebaseToken = $userFirebaseToken;
$this->clickAction = $clickAction;
$this->icon = $icon;
}
//? Send Push notification
public function sendPush($data = array('sms' => '', 'route' => 'NOTICIA', 'terminal' => 'firebase'))
{
if (!$this->userFirebaseToken) {
Log::info('[ERROR_SEND_PUSH_PAYMENT_PUSH]', ['error' => 'Firebase Token Vazio']);
return false;
}
$notification = array(
'title' => $this->title,
'body' => $this->shortMsg,
'icon' => $this->icon,
'image' => $this->image,
'click_action' => $this->clickAction,
'color' => '#ffffff'
);
$pushResp = $this->pushNotifification($this->userFirebaseToken, $notification, $data);
if (isset($pushResp['name'])) {
Log::info('[SUCCESS_SEND_PUSH_PAYMENT_PUSH]', ['data' => $pushResp]);
return true;
} else {
Log::info('[ERROR_SEND_PUSH_PAYMENT_PUSH]', ['error' => $pushResp]);
return false;
}
}
private function getAccessToken()
{
$client = new GoogleClient();
// $client->setAuthConfig(storage_path('app/imaliapp-5155e-firebase-adminsdk-gv3wp-2713d42c5b.json')); // Caminho do arquivo JSON da conta de serviço
$client->setAuthConfig($this->getFirebaseAuthConf()); // Caminho do arquivo JSON da conta de serviço
$client->addScope($_ENV['FIREBASE_MESSAGE_SCOPE']);
$client->setAccessType('offline');
$token = $client->fetchAccessTokenWithAssertion();
return $token['access_token'];
}
private function getFirebaseAuthConf()
{
return [
"type" => $_ENV['TYPE'],
"project_id" => $_ENV['PROJECT_ID'],
"private_key_id" => $_ENV['PRIVATE_KEY_ID'],
"private_key" => $_ENV['PRIVATE_KEY'],
"client_email" => $_ENV['CLIENT_EMAIL'],
"client_id" => $_ENV['CLIENT_ID'],
"auth_uri" => $_ENV['AUTH_URI'],
"token_uri" => $_ENV['TOKEN_URI'],
"auth_provider_x509_cert_url" => $_ENV['AUTH_PROVIDER_X509_CERT_URL'],
"client_x509_cert_url" => $_ENV['CLIENT_X509_CERT_URL'],
"universe_domain" => $_ENV['UNIVERSE_DOMAIN']
];
}
public function pushNotifification($token, $notification = array(), $data = array())
{
$fields = [
'message' => [
'token' => $token,
'android' => [
'notification' => $notification
],
"apns" => [
"payload" => [
"aps" => [
"category" => "NEW_MESSAGE_CATEGORY"
]
]
],
'data' => $this->convert_array_values_to_string($data) ?? [],
]
];
$headers = array('Authorization: Bearer ' . $this->getAccessToken(), 'Content-Type: application/json');
$url = $_ENV['FIREBASE_NEW_URL'];
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($fields));
$result = curl_exec($curl);
curl_close($curl);
return json_decode($result, true);
}
public function setShortMsg($shortMsg)
{
$this->shortMsg = $shortMsg;
}
public function setClickAction($clickAction)
{
$this->clickAction = $clickAction;
}
public function setTitle($title)
{
$this->title = $title;
}
public function setFirebaseToken($userFirebaseToken)
{
$this->userFirebaseToken = $userFirebaseToken;
}
private function convert_array_values_to_string($array)
{
return array_map(function ($value) {
return (string) $value; // Convert each value to a string
}, array_combine(array_map('strval', array_keys($array)), $array));
}
}