当前位置:首页 > 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)发送请求。以下是一个基本实现示例:

php实现ios推送

$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";
}

使用第三方库

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

php实现ios推送

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

错误处理

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

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

测试推送

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

注意事项

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

标签: phpios
分享给朋友:

相关文章

php 实现验证码

php 实现验证码

使用 PHP 生成验证码 验证码(CAPTCHA)用于防止自动化脚本提交表单,以下是几种常见的 PHP 实现方法。 使用 GD 库生成图片验证码 GD 库是 PHP 的图像处理扩展,可用于生成验证码…

php实现接口

php实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不实现具体功能。类可以实现一个或多个接口,并必须实现接口中定义的所有方法。 定义接口 接口使用 inter…

php怎么实现登录功能

php怎么实现登录功能

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

php 实现mvc

php 实现mvc

PHP 实现 MVC 架构的方法 MVC(Model-View-Controller)是一种常见的软件设计模式,用于分离业务逻辑、用户界面和用户输入。以下是 PHP 实现 MVC 架构的关键步骤:…

php实现进度条

php实现进度条

PHP 实现进度条的方法 使用 HTML 和 CSS 结合 PHP 实现进度条 在 PHP 中,进度条通常通过 HTML 和 CSS 实现,PHP 负责计算进度并更新前端显示。 <di…

php实现验证码的识别

php实现验证码的识别

验证码识别的基本方法 验证码识别通常分为手动实现和第三方工具两种方式。手动实现需要图像处理和机器学习知识,而第三方工具则更快捷。 使用Tesseract OCR识别验证码 Tesseract是一个开…