Send push messages to Android, Apple and Firebase using one interface
Requires PHP 7.1 or later. It is installable and autoloadable via Composer as genkgo/push.
To run the unit tests at the command line, issue phpunit -c tests/
. PHPUnit is required.
This library attempts to comply with PSR-1, PSR-2, and PSR-4. If you notice compliance oversights, please send a patch via pull request.
<?php
use Genkgo\Push\Body;
use Genkgo\Push\Firebase\CloudMessaging;
use Genkgo\Push\Gateway;
use Genkgo\Push\Message;
use Genkgo\Push\Sender\FirebaseSender;
use Genkgo\Push\Sender\GoogleGcmSender;
use Genkgo\Push\Sender\AppleApnSender;
use Genkgo\Push\Recipient\AndroidDeviceRecipient;
use Genkgo\Push\Recipient\AppleDeviceRecipient;
use Genkgo\Push\Recipient\FirebaseRecipient;
// construct the gateway, using the different senders
$gateway = new Gateway([
GoogleGcmSender::fromApiKey('API key obtained through the Google API Console'),
AppleApnSender::fromCertificate('/location/to/cert.pem', 'passphrase'),
new FirebaseSender(new CloudMessaging($guzzleClient, $auth), 'fcm-project-id')
]);
// below message will automatically go to their own specific sender
$gateway->send(new Message(new Body('message content')), new AndroidDeviceRecipient('token'));
$gateway->send(new Message(new Body('message content')), new AppleDeviceRecipient('token'));
$gateway->send(new Message(new Body('message content')), new FirebaseRecipient('token'));
<?php
use Genkgo\Push\Certificate\Apple\Generator;
use Genkgo\Push\Certificate\Apple\PortalConnection;
use Genkgo\Push\Certificate\Apple\Type;
use GuzzleHttp\Client;
$generator = new Generator(new PortalConnection(new Client(), $appleId, $password, $teamId));
$pushCertificate = $generator->generate(new Type(Type::DEVELOPMENT), 'your app identifier');
file_put_contents('location/to/file.pem', (string) $pushCertificate);
- Found a bug? Please try to solve it yourself first and issue a pull request. If you are not able to fix it, at least give a clear description what goes wrong. We will have a look when there is time.
- Want to see a feature added, issue a pull request and see what happens. You could also file a bug of the missing feature and we can discuss how to implement it.