%PDF- %PDF-
| Direktori : /home/bitrix/www/local/php_interface/lib/vendor/kreait/firebase-php/src/Firebase/ |
| Current File : //home/bitrix/www/local/php_interface/lib/vendor/kreait/firebase-php/src/Firebase/Messaging.php |
<?php
declare(strict_types=1);
namespace Kreait\Firebase;
use Kreait\Firebase\Exception\InvalidArgumentException;
use Kreait\Firebase\Exception\Messaging\InvalidArgument;
use Kreait\Firebase\Exception\Messaging\InvalidMessage;
use Kreait\Firebase\Exception\Messaging\NotFound;
use Kreait\Firebase\Messaging\ApiClient;
use Kreait\Firebase\Messaging\CloudMessage;
use Kreait\Firebase\Messaging\Message;
use Kreait\Firebase\Messaging\RegistrationToken;
use Kreait\Firebase\Messaging\Topic;
use Kreait\Firebase\Messaging\TopicManagementApiClient;
use Kreait\Firebase\Util\JSON;
class Messaging
{
/**
* @var ApiClient
*/
private $messagingApi;
/**
* @var TopicManagementApiClient
*/
private $topicManagementApi;
public function __construct(ApiClient $messagingApiClient, TopicManagementApiClient $topicManagementApiClient)
{
$this->messagingApi = $messagingApiClient;
$this->topicManagementApi = $topicManagementApiClient;
}
/**
* @param array|CloudMessage|Message $message
*
* @return array
*/
public function send($message): array
{
if (\is_array($message)) {
$message = CloudMessage::fromArray($message);
}
if (!($message instanceof Message)) {
throw new InvalidArgumentException(
'Unsupported message type. Use an array or a class implementing %s'.Message::class
);
}
$response = $this->messagingApi->sendMessage($message);
return JSON::decode((string) $response->getBody(), true);
}
/**
* @param array|CloudMessage|Message $message
*
* @throws InvalidArgumentException
* @throws InvalidMessage
*
* @return array
*/
public function validate($message): array
{
if (\is_array($message)) {
$message = CloudMessage::fromArray($message);
}
if (!($message instanceof Message)) {
throw new InvalidArgumentException(
'Unsupported message type. Use an array or a class implementing %s'.Message::class
);
}
try {
$response = $this->messagingApi->validateMessage($message);
} catch (NotFound $e) {
throw (new InvalidMessage($e->getMessage(), $e->getCode()))
->withResponse($e->response());
}
return JSON::decode((string) $response->getBody(), true);
}
/**
* @param string|Topic $topic
* @param RegistrationToken|RegistrationToken[]|string|string[] $registrationTokenOrTokens
*
* @return array
*/
public function subscribeToTopic($topic, $registrationTokenOrTokens): array
{
$topic = $topic instanceof Topic ? $topic : Topic::fromValue($topic);
$tokens = $this->ensureArrayOfRegistrationTokens($registrationTokenOrTokens);
$response = $this->topicManagementApi->subscribeToTopic($topic, $tokens);
return JSON::decode((string) $response->getBody(), true);
}
/**
* @param string|Topic $topic
* @param RegistrationToken|RegistrationToken[]|string|string[] $registrationTokenOrTokens
*
* @return array
*/
public function unsubscribeFromTopic($topic, $registrationTokenOrTokens): array
{
$topic = $topic instanceof Topic ? $topic : Topic::fromValue($topic);
$tokens = $this->ensureArrayOfRegistrationTokens($registrationTokenOrTokens);
$response = $this->topicManagementApi->unsubscribeFromTopic($topic, $tokens);
return JSON::decode((string) $response->getBody(), true);
}
private function ensureArrayOfRegistrationTokens($tokenOrTokens): array
{
if ($tokenOrTokens instanceof RegistrationToken) {
return [$tokenOrTokens];
}
if (\is_string($tokenOrTokens)) {
return [RegistrationToken::fromValue($tokenOrTokens)];
}
if (\is_array($tokenOrTokens)) {
if (empty($tokenOrTokens)) {
throw new InvalidArgument('Empty array of registration tokens.');
}
return array_map(function ($token) {
return $token instanceof RegistrationToken ? $token : RegistrationToken::fromValue($token);
}, $tokenOrTokens);
}
throw new InvalidArgument('Invalid registration tokens.');
}
}