当前位置: 首页 > news >正文

OneSignal v2 PHP手搓请求消息推送-供参考

背景

项目框架: lumen5.8 由于比较老, 一些依赖包版本难免较低;

onesignal v2 php api的包的依赖包版本较新, 无法使用;

解决办法:

1.升级框架版本;

2.升级依赖包版本;

但是两个方案的风险均较大;

于是结合当前项目仅针对特对用户进行消息推送, 结合官方文档, 手搓一个方法, 先用起;

<?phpnamespace App\Services\Vendor\PushNotification;use App\Http\Controllers\Base\Controller;
use App\Services\Base\HttpService;
use App\Services\Base\PlatformConfigService;
use App\Services\TraitDir\SingletonTrait;
use Illuminate\Support\Facades\Log;/** V2版本推送消息(手写服务) */
class OneSignalV2Service
{use SingletonTrait; public $base_url = "https://api.onesignal.com";public $app_id = null;public $api_key = null;public function __construct(){$this->app_id = PlatformConfigService::configValueForKey('onesignal_app_id', null);$this->api_key = PlatformConfigService::configValueForKey('onesignal_app_key', null);if (empty($this->app_id) || empty($this->api_key)){Controller::throwException("OneSignalV2 Config Err");}}/*** 推送消息到指定玩家;* @param mixed $headings* @param mixed $contents* @param mixed $data* @param mixed $external_ids* @param string $delivery_time*/public function pushNotificationToUser($headings, $contents, $data, $segments, $external_ids, $delivery_time){$api_url = $this->base_url . "/notifications?c=push";//消息内容;$push_contents = is_string($contents) ? ["en" => $contents] : $contents;//请求参数$params = ["app_id" => $this->app_id,"target_channel" => "push","contents" => $push_contents,"ios_badgeType" => "Increase",//iOS角标类型(Increase/Set/None)"ios_badgeCount" => 1,//iOS角标数量"content_available" => true,];//消息标题if (!empty($headings)) {$params["headings"] = is_string($headings) ? ["en" => $headings] : $headings;;}//自定义数据(可透传到客户端)if (!empty($data)) {$params["data"] = $data;}//用户类型if (!empty($segments)) {$params["included_segments"] = $segments;}//玩家IDif (!empty($external_ids)) {$params["include_aliases"]["external_id"] = $external_ids;}//发送时间(暂时有误)if (!empty($delivery_time)){// $params["delayed_option] = "timezone;// $params["delivery_time_of_day] = $delivery_time;}$service = new HttpService();$service->request($api_url, "post")->setHeader("Authorization", "Key " . $this->api_key)//请求头;->addParams($params)->setCallback(function ($content, $code){if($code == 200){Log::info($content);return $content;}});$service->waiting();return $service->retData();}/*** 仅用于测试推送;* @param int $user_ids;*/public function testPush($user_ids){$title = "(Test)Grats! The W is incoming! 🏆";$message = "Nice! Victory in 3...2...1...! 🚀";$data = ["event_code" => 103,"hello" => "world",];if (!is_array($user_ids)){$user_ids = ["$user_ids"];}// $delivery_time = date('H:i:s', time() + 10);$ret_data = $this->pushNotificationToUser($title, $message, $data, null, $user_ids, $delivery_time ?? null);Log::info("testPush", [$ret_data]);return $ret_data;}
}

调用返回的结果

{
"id": "a8614a07-9cab-4099-a041-eb36987ddd38",
"external_id": null
}

确认APP有收到推送消息!

http://www.dtcms.com/a/403947.html

相关文章:

  • 中国建站公司wordpress主题 下单
  • Qt DPI相关逻辑
  • 约束优化问题的常用解决办法及优缺点、轨迹规划中应用
  • 电子元器件基础知识day1
  • 【C++游记】C++11特性
  • 光子、光量子、量子三者的关系
  • 网站更改目录做301承德信息网络有限公司
  • Pytorch中stack()方法的总结及理解
  • 网站建设需要那种技术开一个网站多少钱
  • 在windows系统如何使用docker将nginx容器化部署
  • 【异世界历险之数据结构世界(二叉搜索树)】
  • 宁夏建设银行网站好的兼职做调查网站
  • SQLMap数据库枚举靶机(打靶记录)
  • 镇江建设工程质量监督局网站虹口 教育 网站建设
  • stm32移植elog
  • 揭阳市网站建设徐州市建设局网站
  • 讯飞起点阅读器京东式开售,后kindle时代机会在哪里?
  • 2018/07 JLPT听力原文 问题四
  • 旅游网站开发说明书网站建设费用应按几年摊销
  • Redis数据持久化
  • wampserver搭建网站鹤山区网站建设
  • 河南省建设厅网站考试成绩查询东莞人才网求职
  • 【数据结构前置知识】泛型
  • Flink SourceOperator和WaterMark
  • 容器化 Djiango 应用程序
  • 营销网站建设企划案例网站建设业务越做越累
  • Java EE、Java SE 和 Spring Boot
  • 两学一做专题网站wordpress 用户密码的加密算法
  • 手写数据结构-- avl树
  • MySQL-事务日志