当前位置:首页 > PHP

php实现ios推送

2026-04-03 02:48:54PHP

PHP 实现 iOS 推送

准备工作

确保拥有 Apple Developer 账号并已创建 App ID 和推送证书(.p12 或 .pem 文件)。需要在项目中启用推送通知功能,并在 Apple Developer 后台配置推送证书。

生成推送证书

从 Apple Developer 后台导出推送证书(开发或生产环境),转换为 .pem 格式:

openssl pkcs12 -in cert.p12 -out cert.pem -nodes -clcerts

使用 cURL 发送推送

通过 PHP 的 cURL 库向 APNs(Apple Push Notification service)发送请求。以下是一个基本实现示例:

$deviceToken = '设备Token字符串';
$apnsUrl = 'https://api.push.apple.com/3/device/'; // 生产环境
// $apnsUrl = 'https://api.sandbox.push.apple.com/3/device/'; // 开发环境

$payload = [
    'aps' => [
        'alert' => [
            'title' => '通知标题',
            'body' => '通知内容'
        ],
        'sound' => 'default',
        'badge' => 1
    ],
    'custom_data' => ['key' => 'value'] // 自定义数据
];

$headers = [
    'apns-topic: com.example.app', // Bundle ID
    'authorization: bearer ' . $this->generateJwtToken(),
    'content-type: application/json'
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apnsUrl . $deviceToken);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSLCERT, 'path/to/cert.pem');
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, '证书密码(如果有)');
$response = curl_exec($ch);
curl_close($ch);

生成 JWT 令牌

APNs 要求使用 JWT 进行认证。以下是生成 JWT 的示例代码:

function generateJwtToken() {
    $keyId = '密钥ID(从Apple Developer获取)';
    $teamId = '团队ID';
    $privateKey = file_get_contents('path/to/AuthKey_XXXXXX.p8');
    $time = time();

    $header = ['alg' => 'ES256', 'kid' => $keyId];
    $claims = [
        'iss' => $teamId,
        'iat' => $time
    ];

    $headerEncoded = base64_encode(json_encode($header));
    $claimsEncoded = base64_encode(json_encode($claims));
    $signature = '';
    openssl_sign("$headerEncoded.$claimsEncoded", $signature, $privateKey, 'sha256');
    $signatureEncoded = base64_encode($signature);

    return "$headerEncoded.$claimsEncoded.$signatureEncoded";
}

使用第三方库

可以简化流程的第三方库包括:

  • Pushok: 专为 APNs 设计的 PHP 库
  • ApnsPHP: 老牌 iOS 推送库
  • Laravel 用户: 可以使用 laravel-notification-channels/apn

错误处理

检查 cURL 响应或库返回的错误信息。常见错误包括:

  • 无效的设备 Token
  • 证书过期或配置错误
  • 超出推送频率限制

测试推送

建议先在开发环境测试,使用沙箱 URL (api.sandbox.push.apple.com)。可以通过 Apple 的反馈服务获取失效的设备 Token。

php实现ios推送

注意事项

  • 生产环境和开发环境的证书及 URL 不同
  • 设备 Token 可能会变化,需定期更新
  • iOS 13+ 要求推送必须显示通知或增加 content-available: 1 标记

标签: phpios
分享给朋友:

相关文章

php实现递归

php实现递归

递归的基本概念 递归是一种函数调用自身的技术,适用于解决可以分解为相同子问题的问题。在PHP中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n! =…

git php实现

git php实现

Git 与 PHP 的集成实现 使用 PHP 执行 Git 命令 通过 PHP 的 exec()、shell_exec() 或 passthru() 函数可以直接调用 Git 命令,适用于服务器端操作…

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php实现推送

php实现推送

PHP 实现推送功能的方法 PHP 实现推送功能可以通过多种方式完成,包括 WebSocket、Server-Sent Events (SSE)、长轮询或第三方推送服务。以下是几种常见的方法: 使用…

php怎么实现登录功能

php怎么实现登录功能

数据库准备 创建用户表存储登录信息,通常包括用户名、密码(需加密)等字段。示例SQL: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY…

php搜索功能实现

php搜索功能实现

实现基本的PHP搜索功能 使用MySQL数据库和PHP实现简单的关键词搜索功能。需要确保数据库中有可供搜索的表和数据。 // 连接数据库 $conn = new mysqli('localhost'…