steveeakin / pushok
Apple Push Notification Service (APNs) 的 PHP 客户端 - 使用基于令牌(JWT 与 p8 私钥)或基于证书的认证,通过新的 APNs HTTP/2 协议向 iOS 发送推送通知
0.13.0
2021-03-22 09:47 UTC
Requires
- php: ^7.2|^8.0
- ext-curl: *
- ext-intl: *
- ext-json: *
- ext-openssl: *
- ext-xml: *
- lib-curl: >=7.46.0
- lib-openssl: >=1.0.2.5
- web-token/jwt-key-mgmt: ^2.0
- web-token/jwt-signature-algorithm-ecdsa: ^2.0
Requires (Dev)
- ext-xdebug: *
- php-coveralls/php-coveralls: ^2.0
- phpunit/phpunit: ^8.4
- squizlabs/php_codesniffer: ^3.4
This package is auto-updated.
Last update: 2024-09-24 22:15:13 UTC
README
Pushok 是一个用于向 APNs 发送推送通知的简单 PHP 库。
特性
- 使用新的 Apple APNs HTTP/2 连接
- 支持基于 JWT 的认证
- 支持基于证书的认证
- 支持新的 iOS 10 功能,如折叠 ID、子标题和可变通知
- 使用对 APNs 的并发请求
- 已在 APNs 生产环境中测试并工作
要求
- PHP >= 7.2
- lib-curl >= 7.46.0(启用 http/2 支持)
- lib-openssl >= 1.0.2e
满足要求的 Docker 镜像可在此处找到。或者,您可以遵循本教程创建自己的带有 HTTP/2 支持的 curl Docker 镜像。
安装
通过 Composer
$ composer require edamov/pushok
入门
使用 JWT 令牌。有关更多信息,请参阅处理来自 APNs 的通知响应。
<?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 ]; // 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 ($deviceTokens as $deviceToken) { $notifications[] = new Notification($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 = new Client($authProvider, $production = false); $client->addNotifications($notifications); $responses = $client->push(); // returns an array of ApnsResponseInterface (one Response per Notification) foreach ($responses as $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(); }
使用证书 (.pem)。初始化代码与 JWT 代码(如上所述)不同。请记住自行包含其余代码。
<?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); ...
注意:请参阅此帖子有关 SSL 验证。
其他选项。请参阅向 APNs 发送通知请求。
<?php $client = new Client($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();
测试
$ composer test
安全性
如果您发现任何与安全相关的问题,请通过电子邮件edamov@gmail.com联系,而不是使用问题跟踪器。
鸣谢
许可协议
MIT 许可协议(MIT)。有关更多信息,请参阅许可文件。