
想象一下,你正在开发一个电商平台,需要及时通知用户订单状态变化、促销活动或重要公告。OneSignal作为一个功能强大、用户友好的推送服务,自然成为你的首选。然而,当你开始着手集成时,可能会遇到以下“甜蜜的负担”:
这些问题不仅消耗了宝贵的开发时间,还增加了代码的复杂性和出错的可能性。难道就没有一种更简洁、更“PHPic”的方式来解决这个问题吗?
norkunas/onesignal-php-api
好在,PHP社区的强大生态系统总能提供解决方案。借助Composer这一PHP包管理器,我们可以轻松引入norkunas/onesignal-php-api,一个专为OneSignal API设计的PHP客户端库。它将底层的HTTP通信细节封装起来,提供一套简洁、面向对象的API,让你能够专注于业务逻辑,而不是API的实现细节。
这个库的一大亮点是它遵循了PSR-18 HTTP客户端和PSR-17 HTTP工厂标准。这意味着你可以灵活选择任何兼容这些标准的HTTP客户端库(如Symfony HttpClient、Guzzle等)来驱动它,从而更好地融入你现有的项目架构。
立即学习“PHP免费学习笔记(深入)”;
使用Composer安装非常简单。假设你选择使用Symfony HttpClient和Nyholm PSR-7作为HTTP客户端和工厂:
<code class="bash">composer require symfony/http-client nyholm/psr7 norkunas/onesignal-php-api</code>
安装完成后,你需要在代码中进行简单的配置和初始化:
<pre class="brush:php;toolbar:false;"><?php
declare(strict_types=1);
use OneSignal\Config;
use OneSignal\OneSignal;
use Symfony\Component\HttpClient\Psr18Client;
use Nyholm\Psr7\Factory\Psr17Factory;
require __DIR__ . '/vendor/autoload.php';
// 1. 配置OneSignal API凭据
// 替换为你的OneSignal应用ID、REST API Key和User Auth Key
$config = new Config('your_application_id', 'your_application_auth_key', 'your_auth_key');
// 2. 实例化一个PSR-18兼容的HTTP客户端
$httpClient = new Psr18Client();
// 3. 实例化一个PSR-17兼容的请求工厂和流工厂
$requestFactory = $streamFactory = new Psr17Factory();
// 4. 创建OneSignal客户端实例
$oneSignal = new OneSignal($config, $httpClient, $requestFactory, $streamFactory);
// 现在,你可以使用 $oneSignal 对象来调用OneSignal API了!通过这几行代码,你就拥有了一个功能完备的OneSignal客户端,可以开始发送通知了!
norkunas/onesignal-php-api库将OneSignal的API分成了几个模块,如apps()(应用管理)、devices()(设备管理)和notifications()(通知管理),每个模块都提供了直观的方法来执行相应的操作。
这是最常用的功能。发送一条通知变得异常简单:
<pre class="brush:php;toolbar:false;">// 发送一条通知给所有用户
$oneSignal->notifications()->add([
'contents' => [
'en' => 'Hello, world! Your order has been shipped.' // 通知内容
],
'included_segments' => ['All'], // 目标用户:所有用户
'data' => ['order_id' => 12345, 'type' => 'shipping_update'], // 自定义数据
'isChrome' => true, // 仅发送给Chrome浏览器用户
'send_after' => new \DateTime('+5 minutes'), // 计划5分钟后发送
'filters' => [ // 更精细的筛选条件
[
'field' => 'tag',
'key' => 'is_vip',
'relation' => '!=',
'value' => 'true',
],
['operator' => 'OR'],
[
'field' => 'tag',
'key' => 'is_admin',
'relation' => '=',
'value' => 'true',
],
],
]);
echo "通知已成功发送或计划发送!\n";你可以轻松设置通知内容、目标用户(通过included_segments、filters或直接指定include_external_user_ids、include_player_ids)、自定义数据,甚至计划发送时间。
管理用户的设备信息也同样方便:
<pre class="brush:php;toolbar:false;">use OneSignal\Devices;
// 注册一个新设备
$newDevice = $oneSignal->devices()->add([
'device_type' => Devices::ANDROID, // 设备类型
'identifier' => 'abcdefghijklmn', // 设备唯一标识符
'language' => 'zh', // 设备语言
'tags' => ['level' => 'gold', 'subscribed' => 'true'] // 自定义标签
]);
echo "新设备注册成功,ID: " . $newDevice['id'] . "\n";
// 更新现有设备的标签
$externalUserId = 'user_123'; // 你的系统中的用户ID
$response = $oneSignal->devices()->editTags($externalUserId, [
'tags' => [
'is_vip' => 'true',
'last_login' => (string) time(),
'old_tag' => '' // 删除标签
],
]);
echo "设备标签更新成功!\n";
// 获取所有设备信息
$allDevices = $oneSignal->devices()->getAll();
// var_dump($allDevices);通过这些方法,你可以轻松地注册新设备、更新设备信息、添加或删除标签,从而实现更精准的用户分群。
即使是应用层面的操作,这个库也提供了支持:
<pre class="brush:php;toolbar:false;">// 获取所有OneSignal应用的信息
$myApps = $oneSignal->apps()->getAll();
// var_dump($myApps);
// 创建一个新的Segment
$oneSignal->apps()->createSegment('your_application_id', [
'name' => '活跃用户',
'filters' => [
['field' => 'session_count', 'relation' => '>', 'value' => 10],
['operator' => 'AND'],
['field' => 'last_session', 'relation' => '>', 'value' => 7 * 24 * 60 * 60], // 过去7天内活跃
],
]);
echo "新的Segment '活跃用户' 已创建!\n";你可以方便地获取应用列表、创建或删除自定义用户分段(Segment),这对于精细化运营非常有帮助。
使用norkunas/onesignal-php-api库集成OneSignal,带来了诸多显而易见的优势:
通过Composer引入norkunas/onesignal-php-api,我们成功地将OneSignal API集成的“甜蜜负担”转化为了“高效利器”。它不仅解决了直接API交互的繁琐问题,更以其简洁、强大的特性,让PHP开发者能够以更优雅、更高效的方式实现推送通知功能。如果你还在为PHP应用中的OneSignal集成而烦恼,不妨立即尝试这个库,相信它会让你眼前一亮!
以上就是如何解决PHP应用集成OneSignal推送的繁琐问题,使用norkunas/onesignal-php-api让通知触手可及的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号