上一篇
个推服务器端php推送
- 行业动态
- 2025-04-29
- 3988
个推服务器端PHP推送需集成SDK,调用API接口,设置
个推服务器端PHP推送环境准备
服务器环境要求
项目 | 要求 |
---|---|
PHP版本 | ≥7.2(推荐7.4+) |
扩展模块 | curl 、json 、openssl (Composer依赖时自动检测) |
依赖管理 | Composer(推荐使用) |
网络要求 | 外网访问个推API(需备案域名或IP) |
获取个推PHP SDK
通过Composer安装官方SDK:
composer require getui/push
或手动下载SDK包(https://docs.getui.com/php-sdk
)后引入GtPush.php
。
PHP推送核心流程
初始化推送服务
require_once 'vendor/autoload.php'; // Composer自动加载 use GtPushPush; // 配置参数(从个推控制台获取) $appKey = "YOUR_APPKEY"; $appId = "YOUR_APPID"; $masterSecret = "YOUR_MASTERSECRET"; $pkgName = "com.example.app"; // Android包名 $push = new Push($appKey, $appId, $masterSecret, $pkgName);
构建推送消息
个推支持3种消息类型:
| 类型 | 特点 |
|————|———————————————————————-|
| 通知 | 系统级弹窗(需配置透传字段) |
| 透传 | 自定义内容(需客户端监听) |
| 链接 | 直接打开网页(H5场景) |
示例:透传消息
$message = [ 'action' => 'com.example.action', // 自定义动作标识 'content' => json_encode([ 'type' => 'promotion', 'data' => 'New coupon available!' ]), 'isOffline' => true, // 离线推送 'offlineExpireTime' => strtotime('+3 days') // 离线有效期 ];
用户分群与条件推送
用户标签分群
通过个推控制台创建标签(如VIP_USERS
),代码中指定:
$push->setTag("VIP_USERS"); // 推送给指定标签用户
Alias别名推送
为客户端分配唯一别名(如user_123
):
$push->addAlias("user_123"); // 单个用户 $push->setAliasType(1); // 1=新增覆盖, 2=增量更新, 3=删除
复合条件筛选
条件类型 | 说明 | 示例 |
---|---|---|
平台 | iOS/Android/多平台 | ['ios', 'android'] |
省份 | 地理围栏(需开通服务) | ['浙江', '江苏'] |
机型 | 设备型号过滤 | ['iPhone X', 'HUAWEI P30'] |
$push->setPlatform(['android']) ->setProvince(['广东', '北京']) ->setChannel(['xiaomi', 'huawei']); // 安卓渠道过滤
高级功能实现
定时推送
$push->setTiming(strtotime('+1 hour')) // 延迟1小时推送 ->setMessage($message);
批量推送(10万+用户)
$push->setBatch(1000) // 每批次1000条 ->setRetry(3) // 重试次数 ->send();
消息回执处理
try { $result = $push->send(); if ($result->getSuccessCount() > 0) { echo "成功推送{$result->getSuccessCount()}条 "; } } catch (GtPushException $e) { error_log("推送错误: " . $e->getMessage()); }
常见问题与解决方案
问题 | 解决方案 |
---|---|
推送延迟/丢失 | 检查网络连通性 开启离线消息并延长有效期 联系个推技术支持 |
客户端未收到消息 | 确认pkgName 与应用包名一致检查客户端SDK初始化代码 |
服务端报错401 | 核对AppKey 和MasterSecret 检查HTTPS证书有效性 |
安全与性能优化
- HTTPS加密:确保API请求使用TLS 1.2+协议
- 频率限制:单账号QPS≤50(个推后台自动限流)
- 批量压缩:对大量Alias/Tag请求启用压缩(
$push->enableCompress(true)
) - 异步处理:长耗时任务放入消息队列(如RabbitMQ/Kafka)
FAQs
Q1:如何排查推送失败原因?
A1:
- 查看服务端返回的
errorCode
(参考个推文档错误码表) - 检查客户端是否集成SDK且
onMessageReceived
回调正常 - 通过个推控制台「数据追踪」查看消息状态
- 启用服务端日志(
$push->enableLog(true)
)分析详细错误
Q2:如何实现A/B测试推送?
A2:
- 将用户分为实验组和对照组(通过Alias/Tag标记)
- 实验组推送新策略(如不同文案/跳转链接)
- 对照组保持原推送内容
- 通过个推「数据统计」对比