当前位置:首页 > PHP

php实现ios推送

2026-02-27 18:04:10PHP

PHP 实现 iOS 推送的方法

使用 Apple Push Notification Service (APNS) 和 PHP 实现推送

确保服务器环境支持 PHP 和 cURL 扩展,并且已准备好 Apple 开发者账号及推送证书。

生成和配置推送证书

从 Apple 开发者中心创建推送证书(.p12.pem 格式)。将证书转换为 .pem 格式,便于 PHP 使用。例如,使用 OpenSSL 转换 .p12 文件:

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

将生成的 cert.pemkey.pem 文件保存到服务器安全目录。

使用 cURL 发送推送请求

PHP 通过 cURL 与 APNS 通信。以下代码展示了如何发送推送通知:

<?php
$deviceToken = 'DEVICE_TOKEN'; // 目标设备的 token
$message = '推送消息内容';
$badge = 1;
$sound = 'default';

// 证书路径
$certFile = 'path/to/cert.pem';
$keyFile = 'path/to/key.pem';

// 推送负载
$payload = [
    'aps' => [
        'alert' => $message,
        'badge' => $badge,
        'sound' => $sound,
    ],
];

$jsonPayload = json_encode($payload);

// APNS 服务器地址(开发环境或生产环境)
$apnsUrl = 'https://api.push.apple.com/3/device/' . $deviceToken; // 生产环境
// $apnsUrl = 'https://api.sandbox.push.apple.com/3/device/' . $deviceToken; // 开发环境

// 初始化 cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apnsUrl);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonPayload);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
curl_setopt($ch, CURLOPT_SSLCERT, $certFile);
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, ''); // 如果有密码则填写
curl_setopt($ch, CURLOPT_SSLKEY, $keyFile);
curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 执行请求
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode !== 200) {
    echo "推送失败,HTTP 状态码: " . $httpCode . "\n";
    echo "响应内容: " . $response . "\n";
} else {
    echo "推送成功\n";
}

curl_close($ch);
?>

处理推送响应

APNS 会返回 HTTP 状态码和可能的错误信息。常见的状态码包括:

  • 200:推送成功。
  • 400:请求格式错误。
  • 403:证书或 token 无效。
  • 410:设备 token 不再有效。

根据响应调整推送逻辑,例如移除无效的 device token。

使用第三方库简化流程

为简化流程,可以使用第三方 PHP 库如 pushokapns-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',
    'app_bundle_id' => 'YOUR_BUNDLE_ID',
    'private_key_path' => 'path/to/AuthKey_KEYID.p8',
]);

$client = new Client($authProvider, $production = true);

$deviceToken = 'DEVICE_TOKEN';
$payload = Payload::create()
    ->setAlertTitle('推送标题')
    ->setAlertBody('推送内容')
    ->setBadge(1);

$notification = new Notification($payload, $deviceToken);
$client->addNotification($notification);
$client->push();
?>

注意事项

  • 确保设备 token 是最新的,token 可能会因用户重新安装应用或更换设备而失效。
  • 生产环境和开发环境的 APNS 地址不同,需根据实际情况切换。
  • 推送频率过高可能导致 Apple 限制请求,需合理控制推送节奏。

php实现ios推送

标签: phpios
分享给朋友:

相关文章

php实现文件的下载

php实现文件的下载

PHP 实现文件下载的方法 在 PHP 中实现文件下载功能通常需要设置正确的 HTTP 头信息,并输出文件内容。以下是几种常见的实现方式: 使用 header() 函数强制下载 通过设置 Cont…

php队列的实现

php队列的实现

PHP队列的实现方式 PHP中实现队列功能可以通过多种方式,根据需求选择适合的方案: 使用数组实现基础队列 PHP数组本身支持队列操作,利用array_push和array_shift函数:…

php 实现单链表

php 实现单链表

单链表的基本概念 单链表是一种线性数据结构,由节点组成,每个节点包含数据域和指向下一个节点的指针域。链表的头节点是访问整个链表的入口。 单链表的节点类实现 在PHP中,可以通过类来定义链表节…

php mvc 实现

php mvc 实现

PHP MVC 实现方法 MVC(Model-View-Controller)是一种设计模式,用于分离应用程序的逻辑、数据和界面。以下是实现PHP MVC框架的关键步骤。 目录结构 创建以下目录结…

php 无限分类的实现

php 无限分类的实现

无限分类的实现方法 无限分类通常用于构建树形结构数据,如商品分类、多级菜单等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 邻接列表是最简单的实现方式,通过在每个节点中…

php实现过程

php实现过程

PHP 实现过程 PHP 是一种广泛使用的服务器端脚本语言,特别适合 Web 开发。以下是 PHP 实现过程的关键步骤和注意事项。 安装与配置 下载并安装 PHP,可以从官方 PHP 网站获取最新…