写点什么

手机 APP 消息推送极光推送 jpush-php 实例

作者:Owen Zhang
  • 2022 年 1 月 14 日
  • 本文字数:3927 字

    阅读完需:约 13 分钟

手机APP消息推送极光推送jpush-php实例

本文环境 ThinkPHP5.0,PHP7.1,Mysql5.7

不懂的可以评论或联系我邮箱:owen@owenzhang.com

著作权归 OwenZhang 所有。商业转载请联系 OwenZhang 获得授权,非商业转载请注明出处。

jpush/jpush 介绍

这是 JPush REST API 的 PHP 版本封装开发包,是由极光推送官方提供的,一般支持最新的 API 功能。


对应的 REST API 文档: ​​https://docs.jiguang.cn/jpush/server/push/server_overview/​


支持的 PHP 版本: 5.3.3 ~ 5.6.x, 7.x

若需要兼容 PHP 5.3.3 以下版本,可以使用 ​​v3 分支的代码​​​。 因为运行 Composer 需要 PHP 5.3.2+ 以上版本,所以其不提供 Composer 支持, 也可以​​点击链接​​下载 v3.4.x 版本源码。

jpush/jpush 下载

使用 Composer 安装

执行 $ php composer.phar install 或 $ composer install 进行安装。
复制代码

直接下载源码安装

直接下载源代码也是一种安装 SDK 的方法,不过因为有版本更新的维护问题,所以这种安装方式十分不推荐,但由于种种原因导致无法使用 Composer,所以我们也提供了这种情况下的备选方案。


  • 下载源代码包,解压到项目中

  • 在项目中引入 autoload:


require 'path_to_sdk/autoload.php';
复制代码

代码实例

推送接口父类

application/common/JPush.php

<?php/** * 极光推送 */namespace app\common;
use JPush\Client;
class JPush{ private $key = ''; private $secret = '';
use InstanceTrait;
public function _init() { $this->key = '3412f'; $this->secret = '2c23'; }
/** * 指定注册ID发送 */ public function push($registrationId, $title, $text, $url, $itemId) { $registrationId = array_filter($registrationId); \Log::info(var_export([$registrationId, $title, $text, $url, $itemId], true)); $this->_init();
$client = new Client($this->key, $this->secret); $push = $client->push();
$push->setPlatform('all'); $push->addRegistrationId($registrationId); $push->addAndroidNotification($title, $text); $push->androidNotification($text, ['title' => $title, 'alert_type' => 2, 'extras' => ['url' => $url, 'id' => $itemId]]); $push->iosNotification(['title' => $title, 'body' => $text], ['extras' => ['url' => $url, 'id' => $itemId]]); $push->options(['apns_production' => false]); $push->send(); }}
复制代码

推送服务类

application/lucky/push/service/PushService.php

<?php/** * 推送服务 */
namespace app\lucky\push\service;
use app\common\JPush;use app\lucky\follow\service\FollowService;use app\lucky\push\model\UserPushConfigModel;use app\lucky\subscribe\service\SubscribeService;use app\sports\match\service\FollowMatchService;use app\sports\match\service\SportsApiService;
class PushService{ public function push() { try { $push = JPush::getInstance()->push(['1517badf006e81e'], '我是标题', '我是内容', 'GameDetails:1909991'); var_dump($push); } catch (\Exception $e) { var_dump($e->getMessage()); }
}
/** * 推送设置 */ public function pushConfig($userId, $sys, $ext) { $userPushConfigModel = new UserPushConfigModel(); $result = $userPushConfigModel->updateConfig($userId, $sys, ['ext' => json_encode($ext), 'update_time' => time()]);
if ($result) { return ['code' => 0, 'msg' => '添加成功']; }
return ['code' => -1, 'msg' => '添加失败']; }
/** * 获取配置 */ public function getPushConfig($userId, $sys) { $userPushConfigModel = new UserPushConfigModel(); $result = $userPushConfigModel->getConfigByUserId($userId, $sys); $data = isset($result['ext']) ? $result['ext'] : ''; $data = (array)json_decode($data, true);
return ['code' => 0, 'msg' => '获取成功', 'data' => $data]; }

/** * 发布资讯推送 */ public function blogPush($authorId, $title, $text, $blogId) { //获取作者的粉丝列表ID $followService = new FollowService(); $followListId = $followService->getAuthorFollowList($authorId, 'sports');
//获取用户ID的配置 $pushModel = new UserPushConfigModel(); $pushConfig = $pushModel->getConfigByUserIdArr($followListId, 'sports');
$identifyArr = []; foreach ($pushConfig as $value) { $ext = (array)json_decode($value['ext'], true); if (in_array('information', $ext)) { $identifyArr[] = $value['identify']; } }
if (!empty($identifyArr)) { try { JPush::getInstance()->push($identifyArr, $title, $text, 'InfoDetails', $blogId); } catch (\Exception $exception) { \Log::error($exception->getMessage()); } } }

/** * 登录关联极光ID */ public function loginLinkPush($userId, $identify, $sys = '343') { $userPushConfigModel = new UserPushConfigModel(); $config = $userPushConfigModel->getConfigByUserId($userId, 'sports');
if (empty($config)) { $data = [ 'user_id' => $userId, 'identify' => $identify, 'update_time' => time(), 'sys' => $sys, 'ext' => json_encode(['start' => true, 'end' => true, 'score' => true, 'news' => true, 'information' => true]) ];
$result = $userPushConfigModel->addConfig($data); if (empty($result)) { return ['code' => -1, 'msg' => '添加极光推送失败']; }
return ['code' => 0, 'msg' => '添加极光推送成功']; }
$data = [ 'identify' => $identify, 'update_time' => time(), ]; $result = $userPushConfigModel->updateConfig($userId, $sys, $data); if (empty($result)) { return ['code' => -1, 'msg' => '更新极光推送失败']; }
return ['code' => 0, 'msg' => '更新极光推送成功']; }
/** * 退出登录关联极光ID */ public function logoutLinkPush($userId, $sys = '343') { $userPushConfigModel = new UserPushConfigModel(); $data = [ 'identify' => '', 'update_time' => time(), ]; $result = $userPushConfigModel->updateConfig($userId, $sys, $data); if (empty($result)) { return ['code' => -1, 'msg' => '退出登录,更新极光推送失败']; }
return ['code' => 0, 'msg' => '退出登录,更新极光推送成功']; }}
复制代码

推送实例

application/lucky/admin/controller/Blog.php

//调用推送APP PUSH$data['author_id']=123;$data['title']='文章标题今天三美好的一天';$title = '张三发布资讯';$pushService = new PushService();$pushService->blogPush($data['author_id'], $title, mb_substr($data['title'], 0, 10) . '...', $result);
复制代码

初始化

use JPush\Client as JPush;......
$client = new JPush($app_key, $master_secret);
...
复制代码


OR


$client = new \JPush\Client($app_key, $master_secret);
复制代码

简单推送

$client->push()    ->setPlatform('all')    ->addAllAudience()    ->setNotificationAlert('Hello, JPush')    ->send();
复制代码

异常处理

$pusher = $client->push();$pusher->setPlatform('all');$pusher->addAllAudience();$pusher->setNotificationAlert('Hello, JPush');try {    $pusher->send();} catch (\JPush\Exceptions\JPushException $e) {    // try something else here    print $e;}
复制代码

推送生产例子

注意: 这只是使用样例, 不应该直接用于实际环境中!!


在下载的中的 ​​examples​​ 文件夹有简单示例代码, 开发者可以参考其中的样例快速了解该库的使用方法。


简单使用方法


先填写对应的 appKey 和 masterSecret,可以额外设定 Registration_id。


若要运行 push_example.php 中的示例代码:


# 假定当前目录为 JPush 源码所在的根目录$ php examples/push_example.php
复制代码


同时也可编辑相关的示例文件,更改参数查看执行效果

测试

# 编辑 tests/bootstrap.php 文件,填入必须的变量值# OR 设置相应的环境变量
# 运行全部测试用例$ composer tests
# 运行某一具体测试用例$ composer tests/JPush/xxTest.php
复制代码

Buy me a cup of coffee :)

觉得对你有帮助,就给我打赏吧,谢谢!


微信赞赏码链接,点击跳转:


​ https://www.owenzhang.com/wechat_reward.png​

发布于: 刚刚阅读数: 2
用户头像

Owen Zhang

关注

还未添加个人签名 2020.05.10 加入

I actually hate programming, but I love solving problems. Phper & Gopher. https://gitee.com/owenzhang24 Email: owen@owenzhang.com

评论

发布
暂无评论
手机APP消息推送极光推送jpush-php实例