php实现ios推送
PHP 实现 iOS 推送
要在 PHP 中实现 iOS 推送通知,需要使用 Apple 的推送通知服务 (APNs)。以下是实现步骤:
准备工作
确保拥有有效的 Apple 开发者账号,并已在开发者中心创建 App ID 和推送证书。证书需要导出为 .p12 或 .pem 格式。
安装依赖
使用 Composer 安装 pusher/push-notifications 或其他支持 APNs 的库。运行以下命令安装:

composer require pusher/push-notifications
配置证书
将导出的 .pem 或 .p12 证书文件放在项目安全目录中,确保路径正确。需要同时拥有证书和私钥文件。
代码实现
以下是一个基本的 PHP 实现示例,使用 curl 直接与 APNs 交互:

<?php
$deviceToken = 'DEVICE_TOKEN_HERE'; // 目标设备的 Device Token
$apnsHost = 'api.push.apple.com'; // 生产环境
// $apnsHost = 'api.sandbox.push.apple.com'; // 开发环境
$apnsUrl = "https://{$apnsHost}/3/device/{$deviceToken}";
$payload = [
'aps' => [
'alert' => [
'title' => '通知标题',
'body' => '通知内容'
],
'sound' => 'default',
'badge' => 1
]
];
$jsonPayload = json_encode($payload);
$certificatePath = '/path/to/certificate.pem'; // 证书路径
$headers = [
"apns-topic: YOUR_APP_BUNDLE_ID", // 替换为应用的 Bundle ID
"apns-push-type: alert",
"apns-priority: 10"
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apnsUrl);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonPayload);
curl_setopt($ch, CURLOPT_SSLCERT, $certificatePath);
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'CERT_PASSWORD'); // 证书密码(如果有)
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpCode !== 200) {
echo "推送失败,HTTP 状态码: {$httpCode}, 响应: {$response}";
} else {
echo "推送成功";
}
curl_close($ch);
?>
使用第三方库
如果希望简化流程,可以使用第三方库如 pushok 或 apns-php。以下是使用 pushok 的示例:
<?php
require 'vendor/autoload.php';
use Pushok\AuthProvider;
use Pushok\Client;
use Pushok\Notification;
use Pushok\Payload;
$authProvider = AuthProvider\Token::create([
'key_id' => 'YOUR_KEY_ID', // 从 Apple 开发者账号获取
'team_id' => 'YOUR_TEAM_ID', // 团队 ID
'app_bundle_id' => 'YOUR_BUNDLE_ID', // 应用 Bundle ID
'private_key_path' => '/path/to/AuthKey_KEYID.p8', // p8 文件路径
'private_key_secret' => null // p8 文件密码(如果有)
]);
$client = new Client($authProvider, $production = true);
$payload = Payload::create()
->setAlertTitle('通知标题')
->setAlertBody('通知内容')
->setSound('default')
->setBadge(1);
$notification = new Notification($payload, 'DEVICE_TOKEN_HERE');
$client->addNotification($notification);
$client->push();
?>
测试与调试
确保设备 Token 正确,并在开发和生产环境之间切换时更新 $apnsHost。可以通过 Apple 的反馈服务检查无效的 Device Token。
注意事项
- 使用 HTTPS 和正确的 APNs 地址(开发或生产环境)。
- 确保证书未过期,且与应用的 Bundle ID 匹配。
- 推送负载大小不超过 4KB。
- 处理可能的错误响应,如无效的 Device Token 或证书问题。






