当前位置:首页 > 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实现ios推送

<?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 限制请求,需合理控制推送节奏。

标签: phpios
分享给朋友:

相关文章

php实现搜索功能

php实现搜索功能

实现基本的搜索功能 在PHP中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('loc…

php实现的进度条

php实现的进度条

PHP 实现的进度条方法 在 PHP 中实现进度条通常可以通过命令行脚本(CLI)或 Web 页面两种方式完成。以下是几种常见的实现方法: 命令行进度条 使用 PHP CLI 实现进度条,可以通过不…

无限分类实现 php

无限分类实现 php

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

php https实现

php https实现

PHP 中实现 HTTPS 的方法 在 PHP 中实现 HTTPS 主要通过配置服务器和编写代码来确保通信的安全性。以下是几种常见的方法: 配置服务器支持 HTTPS 确保服务器已安装 SSL/T…

php 实现https

php 实现https

在 PHP 中实现 HTTPS 确保 PHP 应用通过 HTTPS 协议安全传输数据,可以通过以下几种方式实现: 配置服务器强制 HTTPS 在 Web 服务器(如 Apache 或 Nginx)中…

php实现投票

php实现投票

PHP实现投票功能 数据库设计 创建数据库表存储投票数据,例如: CREATE TABLE `votes` ( `id` int(11) NOT NULL AUTO_INCREMENT,…