You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
1.9 KiB
84 lines
1.9 KiB
<?php
|
|
|
|
|
|
namespace App\Channels;
|
|
|
|
use App\Channels\Messages\FcmMessage;
|
|
use Illuminate\Notifications\Notification;
|
|
use GuzzleHttp\Client as HttpClient;
|
|
|
|
class SocketChannel
|
|
{
|
|
/**
|
|
* The API URL for Socket.
|
|
*
|
|
* @var string
|
|
*/
|
|
const API_URI = ''; //todo: fill it
|
|
|
|
/**
|
|
* The HTTP client instance.
|
|
*
|
|
* @var \GuzzleHttp\Client
|
|
*/
|
|
protected $http;
|
|
|
|
/**
|
|
* Create a new Socket channel instance.
|
|
*
|
|
* @param \GuzzleHttp\Client $http
|
|
* @return void
|
|
*/
|
|
public function __construct(HttpClient $http)
|
|
{
|
|
$this->http = $http;
|
|
}
|
|
|
|
/**
|
|
* Send the given notification.
|
|
*
|
|
* @param mixed $notifiable
|
|
* @param \Illuminate\Notifications\Notification $notification
|
|
* @return void
|
|
*/
|
|
public function send($notifiable, Notification $notification)
|
|
{
|
|
$message = $notification->toSocket($notifiable);
|
|
|
|
$message->to($notifiable->routeNotificationFor('socket', $notification));
|
|
|
|
if (! $message->to) {
|
|
return;
|
|
}
|
|
|
|
$this->http->post(self::API_URI, [
|
|
'headers' => [
|
|
'Authorization' => "key={$this->apiKey}",
|
|
'Content-Type' => 'application/json',
|
|
],
|
|
'json' => $this->buildJsonPayload($message),
|
|
]);
|
|
}
|
|
|
|
protected function buildJsonPayload(FcmMessage $message)
|
|
{
|
|
$payload = array_filter([
|
|
'priority' => $message->priority,
|
|
'data' => $message->data,
|
|
'notification' => $message->notification,
|
|
'condition' => $message->condition,
|
|
]);
|
|
|
|
if ($message->topic) {
|
|
$payload['to'] = "/topics/{$message->topic}";
|
|
} else {
|
|
if (is_array($message->to)) {
|
|
$payload['registration_ids'] = $message->to;
|
|
} else {
|
|
$payload['to'] = $message->to;
|
|
}
|
|
}
|
|
|
|
return $payload;
|
|
}
|
|
}
|