update 1.0.8.0
Commits for version update
This commit is contained in:
13
vendor/brozot/laravel-fcm/src/FCMManager.php
vendored
13
vendor/brozot/laravel-fcm/src/FCMManager.php
vendored
@@ -1,6 +1,5 @@
|
||||
<?php namespace LaravelFCM;
|
||||
|
||||
|
||||
use GuzzleHttp\Client;
|
||||
use Illuminate\Support\Manager;
|
||||
|
||||
@@ -8,14 +7,14 @@ class FCMManager extends Manager {
|
||||
|
||||
public function getDefaultDriver()
|
||||
{
|
||||
return $this->app['config']['fcm.driver'];
|
||||
return $this->app[ 'config' ][ 'fcm.driver' ];
|
||||
}
|
||||
|
||||
|
||||
protected function createHttpDriver()
|
||||
{
|
||||
$config = $this->app['config']->get('fcm.http', []);
|
||||
return new Client([
|
||||
'timeout' => $config['timeout'],
|
||||
]);
|
||||
$config = $this->app[ 'config' ]->get('fcm.http', []);
|
||||
|
||||
return new Client([ 'timeout' => $config[ 'timeout' ] ]);
|
||||
}
|
||||
|
||||
}
|
@@ -1,11 +1,13 @@
|
||||
<?php namespace LaravelFCM;
|
||||
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use LaravelFCM\Sender\FCMSender;
|
||||
use LaravelFCM\Sender\FCMGroup;
|
||||
use LaravelFCM\Sender\FCMSender;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
|
||||
class FCMServiceProvider extends ServiceProvider {
|
||||
|
||||
protected $defer = true;
|
||||
|
||||
public function boot()
|
||||
{
|
||||
if (str_contains($this->app->version(), 'Lumen')) {
|
||||
@@ -19,27 +21,29 @@ class FCMServiceProvider extends ServiceProvider {
|
||||
}
|
||||
|
||||
public function register()
|
||||
{
|
||||
$this->app->bind('fcm.group', function($app) {
|
||||
return new FCMGroup();
|
||||
});
|
||||
|
||||
$this->app->bind('fcm.sender', function($app) {
|
||||
return new FCMSender();
|
||||
});
|
||||
|
||||
$this->registerClient();
|
||||
}
|
||||
|
||||
public function registerClient()
|
||||
{
|
||||
$this->app->singleton('fcm.client', function($app) {
|
||||
return (new FCMManager($app))->driver();
|
||||
});
|
||||
|
||||
$this->app->bind('fcm.group', function($app) {
|
||||
$client = $app[ 'fcm.client' ];
|
||||
$url = $app[ 'config' ]->get('fcm.http.server_group_url');
|
||||
|
||||
return new FCMGroup($client, $url);
|
||||
});
|
||||
|
||||
$this->app->bind('fcm.sender', function($app) {
|
||||
$client = $app[ 'fcm.client' ];
|
||||
$url = $app[ 'config' ]->get('fcm.http.server_send_url');
|
||||
|
||||
return new FCMSender($client, $url);
|
||||
});
|
||||
}
|
||||
|
||||
protected function provide()
|
||||
public function provides()
|
||||
{
|
||||
return [ 'fcm', 'fcm.client' ];
|
||||
return [ 'fcm.client', 'fcm.group', 'fcm.sender' ];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,6 +1,5 @@
|
||||
<?php namespace LaravelFCM\Facades;
|
||||
|
||||
use LaravelFCM\Message;
|
||||
use Illuminate\Support\Facades\Facade;
|
||||
|
||||
class FCM extends Facade {
|
||||
|
@@ -1,6 +1,5 @@
|
||||
<?php namespace LaravelFCM\Facades;
|
||||
|
||||
use LaravelFCM\Message;
|
||||
use Illuminate\Support\Facades\Facade;
|
||||
|
||||
class FCMGroup extends Facade {
|
||||
|
@@ -1,7 +1,6 @@
|
||||
<?php namespace LaravelFCM\Message\Exceptions;
|
||||
|
||||
use Exception;
|
||||
use GuzzleHttp\Psr7\Response as GuzzleResponse;
|
||||
|
||||
/**
|
||||
* Class InvalidOptionsException
|
||||
|
@@ -1,7 +1,6 @@
|
||||
<?php namespace LaravelFCM\Message\Exceptions;
|
||||
|
||||
use Exception;
|
||||
use GuzzleHttp\Psr7\Response as GuzzleResponse;
|
||||
|
||||
/**
|
||||
* Class NoTopicProvidedException
|
||||
|
@@ -1,6 +1,5 @@
|
||||
<?php namespace LaravelFCM\Message;
|
||||
|
||||
use Exception;
|
||||
use LaravelFCM\Message\Exceptions\InvalidOptionsException;
|
||||
use ReflectionClass;
|
||||
|
||||
|
@@ -1,9 +1,9 @@
|
||||
<?php namespace LaravelFCM\Request;
|
||||
|
||||
use LaravelFCM\Message\Topics;
|
||||
use LaravelFCM\Message\Options;
|
||||
use LaravelFCM\Message\PayloadData;
|
||||
use LaravelFCM\Message\PayloadNotification;
|
||||
use LaravelFCM\Message\Topics;
|
||||
|
||||
/**
|
||||
* Class Request
|
||||
|
@@ -9,7 +9,7 @@ use GuzzleHttp\Psr7\Response as GuzzleResponse;
|
||||
*
|
||||
* @package LaravelFCM\Response
|
||||
*/
|
||||
class DownstreamResponse extends BaseResponse {
|
||||
class DownstreamResponse extends BaseResponse implements DownstreamResponseContract{
|
||||
|
||||
const MULTICAST_ID = 'multicast_id';
|
||||
const CANONICAL_IDS = "canonical_ids";
|
||||
|
85
vendor/brozot/laravel-fcm/src/Response/DownstreamResponseContract.php
vendored
Normal file
85
vendor/brozot/laravel-fcm/src/Response/DownstreamResponseContract.php
vendored
Normal file
@@ -0,0 +1,85 @@
|
||||
<?php namespace LaravelFCM\Response;
|
||||
|
||||
/**
|
||||
* Interface DownstreamResponseContract
|
||||
*
|
||||
* @package LaravelFCM\Response
|
||||
*/
|
||||
interface DownstreamResponseContract {
|
||||
|
||||
/**
|
||||
* Merge two response
|
||||
*
|
||||
* @param DownstreamResponse $response
|
||||
*/
|
||||
public function merge(DownstreamResponse $response);
|
||||
|
||||
/**
|
||||
* Get the number of device reached with success
|
||||
* @return int
|
||||
*/
|
||||
public function numberSuccess();
|
||||
|
||||
/**
|
||||
* Get the number of device which thrown an error
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function numberFailure();
|
||||
|
||||
/**
|
||||
* Get the number of device that you need to modify their token
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function numberModification();
|
||||
|
||||
/**
|
||||
* get token to delete
|
||||
*
|
||||
* remove all tokens returned by this method in your database
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function tokensToDelete();
|
||||
|
||||
/**
|
||||
* get token to modify
|
||||
*
|
||||
* key: oldToken
|
||||
* value: new token
|
||||
*
|
||||
* find the old token in your database and replace it with the new one
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function tokensToModify();
|
||||
|
||||
/**
|
||||
* Get tokens that you should resend using exponential backoof
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function tokensToRetry();
|
||||
|
||||
/**
|
||||
* Get tokens that thrown an error
|
||||
*
|
||||
* key : token
|
||||
* value : error
|
||||
*
|
||||
* In production, remove these tokens from you database
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function tokensWithError();
|
||||
|
||||
/**
|
||||
* check if missing tokens was given to the request
|
||||
* If true, remove all the empty token in your database
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function hasMissingToken();
|
||||
|
||||
}
|
@@ -9,7 +9,7 @@ use GuzzleHttp\Psr7\Response as GuzzleResponse;
|
||||
*
|
||||
* @package LaravelFCM\Response
|
||||
*/
|
||||
class GroupResponse extends BaseResponse {
|
||||
class GroupResponse extends BaseResponse implements GroupResponseContract{
|
||||
|
||||
const FAILED_REGISTRATION_IDS = "failed_registration_ids";
|
||||
|
||||
|
30
vendor/brozot/laravel-fcm/src/Response/GroupResponseContract.php
vendored
Normal file
30
vendor/brozot/laravel-fcm/src/Response/GroupResponseContract.php
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php namespace LaravelFCM\Response;
|
||||
|
||||
/**
|
||||
* Interface GroupResponseContract
|
||||
*
|
||||
* @package LaravelFCM\Response
|
||||
*/
|
||||
interface GroupResponseContract {
|
||||
|
||||
/**
|
||||
* Get the number of device reached with success
|
||||
* @return int
|
||||
*/
|
||||
public function numberSuccess();
|
||||
|
||||
/**
|
||||
* Get the number of device which thrown an error
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function numberFailure();
|
||||
|
||||
/**
|
||||
* Get all token in group that fcm cannot reach
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function tokensFailed();
|
||||
|
||||
}
|
@@ -1,7 +1,7 @@
|
||||
<?php namespace LaravelFCM\Response;
|
||||
|
||||
use LaravelFCM\Message\Topics;
|
||||
use Monolog\Logger;
|
||||
use LaravelFCM\Message\Topics;
|
||||
use Monolog\Handler\StreamHandler;
|
||||
use GuzzleHttp\Psr7\Response as GuzzleResponse;
|
||||
|
||||
@@ -10,7 +10,7 @@ use GuzzleHttp\Psr7\Response as GuzzleResponse;
|
||||
*
|
||||
* @package LaravelFCM\Response
|
||||
*/
|
||||
class TopicResponse extends BaseResponse {
|
||||
class TopicResponse extends BaseResponse implements TopicResponseContract{
|
||||
|
||||
const LIMIT_RATE_TOPICS_EXCEEDED = "TopicsMessageRateExceeded";
|
||||
|
||||
|
31
vendor/brozot/laravel-fcm/src/Response/TopicResponseContract.php
vendored
Normal file
31
vendor/brozot/laravel-fcm/src/Response/TopicResponseContract.php
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php namespace LaravelFCM\Response;
|
||||
|
||||
/**
|
||||
* Interface TopicResponseContract
|
||||
*
|
||||
* @package LaravelFCM\Response
|
||||
*/
|
||||
interface TopicResponseContract {
|
||||
|
||||
/**
|
||||
* true if topic sent with success
|
||||
* @return bool
|
||||
*/
|
||||
public function isSuccess();
|
||||
|
||||
/**
|
||||
* return error message
|
||||
* you should test if it's necessary to resent it
|
||||
*
|
||||
* @return string error
|
||||
*/
|
||||
public function error();
|
||||
|
||||
/**
|
||||
* return true if it's necessary resent it using exponential backoff
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function shouldRetry();
|
||||
|
||||
}
|
@@ -1,45 +0,0 @@
|
||||
<?php namespace LaravelFCM\Sender;
|
||||
|
||||
/**
|
||||
* Class BaseSender
|
||||
*
|
||||
* @package LaravelFCM\Sender
|
||||
*/
|
||||
abstract class BaseSender {
|
||||
|
||||
/**
|
||||
* Guzzle Client
|
||||
* @var \Illuminate\Foundation\Application|mixed
|
||||
*/
|
||||
protected $client;
|
||||
|
||||
/**
|
||||
* configuration
|
||||
* @var array
|
||||
*/
|
||||
protected $config;
|
||||
|
||||
/**
|
||||
* url
|
||||
* @var mixed
|
||||
*/
|
||||
protected $url;
|
||||
|
||||
/**
|
||||
* BaseSender constructor.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->client = app('fcm.client');
|
||||
$this->config = app('config')->get('fcm.http', []);
|
||||
|
||||
$this->url = $this->getUrl();
|
||||
}
|
||||
|
||||
/**
|
||||
* get the url
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected abstract function getUrl();
|
||||
}
|
@@ -8,7 +8,7 @@ use GuzzleHttp\Psr7\Response as GuzzleResponse;
|
||||
*
|
||||
* @package LaravelFCM\Sender
|
||||
*/
|
||||
class FCMGroup extends BaseSender {
|
||||
class FCMGroup extends HTTPSender {
|
||||
|
||||
const CREATE = "create";
|
||||
const ADD = "add";
|
||||
@@ -96,13 +96,4 @@ class FCMGroup extends BaseSender {
|
||||
return $response->getReasonPhrase() != 'OK' || $response->getStatusCode() != 200;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the url
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getUrl()
|
||||
{
|
||||
return $this->config['server_group_url'];
|
||||
}
|
||||
}
|
@@ -1,23 +1,21 @@
|
||||
<?php namespace LaravelFCM\Sender;
|
||||
|
||||
use GuzzleHttp\Exception\ClientException;
|
||||
use LaravelFCM\FCMRequest;
|
||||
use LaravelFCM\Message\Options;
|
||||
use LaravelFCM\Message\PayloadData;
|
||||
use LaravelFCM\Message\PayloadNotification;
|
||||
use \GuzzleHttp\Psr7\Response as GuzzleResponse;
|
||||
use LaravelFCM\Message\Topics;
|
||||
use LaravelFCM\Request\Request;
|
||||
use LaravelFCM\Response\DownstreamResponse;
|
||||
use LaravelFCM\Message\Options;
|
||||
use LaravelFCM\Message\PayloadData;
|
||||
use LaravelFCM\Response\GroupResponse;
|
||||
use LaravelFCM\Response\TopicResponse;
|
||||
use GuzzleHttp\Exception\ClientException;
|
||||
use LaravelFCM\Response\DownstreamResponse;
|
||||
use LaravelFCM\Message\PayloadNotification;
|
||||
|
||||
/**
|
||||
* Class FCMSender
|
||||
*
|
||||
* @package LaravelFCM\Sender
|
||||
*/
|
||||
class FCMSender extends BaseSender {
|
||||
class FCMSender extends HTTPSender {
|
||||
|
||||
const MAX_TOKEN_PER_REQUEST = 1000;
|
||||
|
||||
@@ -39,17 +37,13 @@ class FCMSender extends BaseSender {
|
||||
{
|
||||
$response = null;
|
||||
|
||||
if (is_array($to)) {
|
||||
if (is_array($to) && !empty($to)) {
|
||||
|
||||
$partialTokens = array_chunk($to, self::MAX_TOKEN_PER_REQUEST, false);
|
||||
foreach ($partialTokens as $tokens) {
|
||||
$request = new Request($tokens, $options, $notification, $data);
|
||||
|
||||
try {
|
||||
$responseGuzzle = $this->client->post($this->url, $request->build());
|
||||
}
|
||||
catch (ClientException $e) {
|
||||
$responseGuzzle = $e->getResponse();
|
||||
}
|
||||
|
||||
$responseGuzzle = $this->post($request);
|
||||
|
||||
$responsePartial = new DownstreamResponse($responseGuzzle, $tokens);
|
||||
if (!$response) {
|
||||
@@ -62,8 +56,9 @@ class FCMSender extends BaseSender {
|
||||
}
|
||||
else {
|
||||
$request = new Request($to, $options, $notification, $data);
|
||||
$response = $this->client->post($this->url, $request->build());
|
||||
$response = new DownstreamResponse($response, $to);
|
||||
$responseGuzzle = $this->post($request);
|
||||
|
||||
$response = new DownstreamResponse($responseGuzzle, $to);
|
||||
}
|
||||
|
||||
return $response;
|
||||
@@ -83,14 +78,9 @@ class FCMSender extends BaseSender {
|
||||
{
|
||||
$request = new Request($notificationKey, $options, $notification, $data);
|
||||
|
||||
try {
|
||||
$response = $this->client->post($this->url, $request->build());
|
||||
}
|
||||
catch (ClientException $e) {
|
||||
$response = $e->getResponse();
|
||||
}
|
||||
$responseGuzzle = $this->post($request);
|
||||
|
||||
return new GroupResponse($response, $notificationKey);
|
||||
return new GroupResponse($responseGuzzle, $notificationKey);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -105,27 +95,29 @@ class FCMSender extends BaseSender {
|
||||
*/
|
||||
public function sendToTopic(Topics $topics, Options $options = null, PayloadNotification $notification = null, PayloadData $data = null)
|
||||
{
|
||||
|
||||
$request = new Request(null, $options, $notification, $data, $topics);
|
||||
try {
|
||||
$response = $this->client->post($this->url, $request->build());
|
||||
}
|
||||
catch (ClientException $e) {
|
||||
$response = $e->getResponse();
|
||||
}
|
||||
|
||||
$responseGuzzle = $this->post($request);
|
||||
|
||||
return new TopicResponse($response, $topics);
|
||||
return new TopicResponse($responseGuzzle, $topics);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* get the url
|
||||
* @internal
|
||||
*
|
||||
* @return string
|
||||
* @param $request
|
||||
*
|
||||
* @return null|\Psr\Http\Message\ResponseInterface
|
||||
*/
|
||||
protected function getUrl()
|
||||
private function post($request)
|
||||
{
|
||||
return $this->config[ 'server_send_url' ];
|
||||
try {
|
||||
$responseGuzzle = $this->client->post($this->url, $request->build());
|
||||
}
|
||||
catch (ClientException $e) {
|
||||
$responseGuzzle = $e->getResponse();
|
||||
}
|
||||
|
||||
return $responseGuzzle;
|
||||
}
|
||||
}
|
38
vendor/brozot/laravel-fcm/src/Sender/HTTPSender.php
vendored
Normal file
38
vendor/brozot/laravel-fcm/src/Sender/HTTPSender.php
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
<?php namespace LaravelFCM\Sender;
|
||||
|
||||
use GuzzleHttp\ClientInterface;
|
||||
|
||||
/**
|
||||
* Class BaseSender
|
||||
*
|
||||
* @package LaravelFCM\Sender
|
||||
*/
|
||||
abstract class HTTPSender {
|
||||
|
||||
/**
|
||||
* The client used to send messages.
|
||||
*
|
||||
* @var GuzzleHttp\ClientInterface
|
||||
*/
|
||||
protected $client;
|
||||
|
||||
/**
|
||||
* The URL entry point.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $url;
|
||||
|
||||
/**
|
||||
* Initializes a new sender object.
|
||||
*
|
||||
* @param GuzzleHttp\ClientInterface $client
|
||||
* @param string $url
|
||||
*/
|
||||
public function __construct(ClientInterface $client, $url)
|
||||
{
|
||||
$this->client = $client;
|
||||
$this->url = $url;
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user