- Notifications
You must be signed in to change notification settings - Fork126
PHP client for Apple Push Notification Service (APNs) - Send push notifications to iOS using the new APNs HTTP/2 protocol with token-based (JWT with p8 private key)
License
edamov/pushok
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Do you like the library? Please considerdonating to support Ukraine 🇺🇦
Pushok is a simple PHP library for sending push notifications to APNs.
- Uses new Apple APNs HTTP/2 connection
- Supports JWT-based authentication
- Supports Certificate-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
- PHP >= 8.1
- lib-curl >= 7.46.0 (with http/2 support enabled)
- lib-openssl >= 1.0.2e
Docker image that meets requirements can be foundhere.Or you can followthis tutorial to create your own docker image with curl with HTTP/2 support.
Via Composer
$ composer require edamov/pushok
Using JWT token. SeeHandling Notification Responses from APNs for more info.
<?phprequire__DIR__ .'/vendor/autoload.php';usePushok\AuthProvider;usePushok\Client;usePushok\Notification;usePushok\Payload;usePushok\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];// Be aware of thing that Token will stale after one hour, so you should generate it again.// Can be useful when trying to send pushes during long-running tasks$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->setSound('default');//add custom value to your notification, needs to be customized$payload->setCustomValue('key','value');$deviceTokens = ['<device_token_1>','<device_token_2>','<device_token_3>'];$notifications = [];foreach ($deviceTokensas$deviceToken) {$notifications[] =newNotification($payload,$deviceToken);}// If you have issues with ssl-verification, you can temporarily disable it. Please see attached note.// Disable ssl verification// $client = new Client($authProvider, $production = false, [CURLOPT_SSL_VERIFYPEER=>false] );$client =newClient($authProvider,$production =false);$client->addNotifications($notifications);$responses =$client->push();// returns an array of ApnsResponseInterface (one Response per Notification)foreach ($responsesas$response) {// The device token$response->getDeviceToken();// A canonical UUID that is the unique ID for the notification. E.g. 123e4567-e89b-12d3-a456-4266554400a0$response->getApnsId();// Status code. E.g. 200 (Success), 410 (The device token is no longer active for the topic.)$response->getStatusCode();// E.g. The device token is no longer active for the topic.$response->getReasonPhrase();// E.g. Unregistered$response->getErrorReason();// E.g. The device token is inactive for the specified topic.$response->getErrorDescription();$response->get410Timestamp();}
Using Certificate (.pem). Only the initilization differs from JWT code (above). Remember to include the rest of the code by yourself.
<?php$options = ['app_bundle_id' =>'com.app.Test',// The bundle ID for app obtained from Apple developer account'certificate_path' =>__DIR__ .'/private_key.pem',// Path to private key'certificate_secret' =>null// Private key secret];$authProvider =AuthProvider\Certificate::create($options);...
Note : Please seethis post about ssl verification
Options to fiddle around. SeeSending Notification Requests to APNs
<?php$client =newClient($authProvider,$production =false);$client->addNotifications($notifications);// Set the number of concurrent requests sent through the multiplexed connections. Default : 20$client->setNbConcurrentRequests(40 );// Set the number of maximum concurrent connections established to the APNS servers. Default : 1$client->setMaxConcurrentConnections(5 );$responses =$client->push();
$ composertest
If you discover any security related issues, please emailedamov@gmail.com instead of using the issue tracker.
The MIT License (MIT). Please seeLicense File for more information.
About
PHP client for Apple Push Notification Service (APNs) - Send push notifications to iOS using the new APNs HTTP/2 protocol with token-based (JWT with p8 private key)