Note: This library is under development
Pushok is a simple PHP library for sending push notifications to APNs.
- Uses new Apple APNs HTTP/2 connection
- Supports JWT-based authentication
- Supports new iOS 10 features such as Collapse IDs, Subtitles and Mutable Notifications
- Uses concurrent requests to APNs
- Tested and working in APNs production environment
- Supports Certificate-based authentication
- PHP >= 7.0
- lib-curl >= 7.46.0 (with http/2 support enabled)
- lib-openssl >= 1.0.2e
Docker image that meets requirements can be found here. Or you can follow this tutorial to create your own docker image with curl with HTTP/2 support.
Via Composer
$ composer require edamov/pushok
<?php
require __DIR__ . '/vendor/autoload.php';
use Pushok\AuthProvider;
use Pushok\Client;
use Pushok\Notification;
use Pushok\Payload;
use Pushok\Payload\Alert;
$options = [
'key_id' => 'AAAABBBBCC', // The Key ID obtained from Apple developer account
'team_id' => 'DDDDEEEEFF', // The Team ID obtained from Apple developer account
'app_bundle_id' => 'com.app.Test', // The bundle ID for app obtained from Apple developer account
'private_key_path' => __DIR__ . '/private_key.p8', // Path to private key
'private_key_secret' => null // Private key secret
];
$authProvider = AuthProvider\Token::create($options);
$alert = Alert::create()->setTitle('Hello!');
$alert = $alert->setBody('First push notification');
$payload = Payload::create()->setAlert($alert);
//set notification sound to default
$payload = $payload->setSound('default');
//add custom value to your notification, needs to be customized
$payload = $payload->setCustomValue('key', 'value');
$deviceTokens = ['<device_token_1>', '<device_token_2>', '<device_token_3>'];
$notifications = [];
foreach ($deviceTokens as $deviceToken) {
$notifications[] = new Notification($payload,$deviceToken);
}
$client = new Client($authProvider, $production = false);
$client->addNotifications($notifications);
$responses = $client->push(); // returns an array of ApnsResponseInterface (one Response per Notification)
foreach ($responses as $response) {
$response->getApnsId();
$response->getStatusCode();
$response->getReasonPhrase();
$response->getErrorReason();
$response->getErrorDescription();
}
$ composer test
If you discover any security related issues, please email edamov@gmail.com instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.