大家有没有用过极光推送 JPush ,现在发布新版本了 v3.5.0

刚开始叫我维护 PHP SDK 其实我是拒绝的,不仅因为我看过 Issue,还因为我看过源码。很多现代 PHP 该有的东西他都没有,命名空间啊、PSR-4 啊、正确的异常处理方式啊、Composer 虽然说有,但是我没看到它可以用的(Packagist 上的下载量还不低,他们到底是在怎么用的,反正我第一次使用 composer 安装的时候是报错的,当然第二次也是)。。维护一个旧代码意味着什么,我想不用我多说。

吐槽归吐槽,其实自认为也是个小白,不过我会努力解决这些在使用上的问题,这不,经过好几个月的辛勤工作(夸张的修辞 :smile: )终于发布了 v3.5.0,一个新的版本,着力去解决上面提到的一些问题。

下面简单写一下基本用法

安装

先在项目中的 composer.json 文件中添加 jpush 依赖:

"require": {
    "jpush/jpush": "v3.5.*"
}

然后执行 $ php composer.phar install$ composer install 进行安装。

简单推送给全部设备
use JPush\Client as JPush;
...
...
// JPush SDK 也支持链式调用
// 当然 app_key 和 master_secret 直接在这里赋值是不好的

    $app_key = 'xxxx';
    $master_secret = 'xxxx';
    $client = new JPush($app_key, $master_secret);
    $pusher = $client->push();
    $pusher->setPlatform('all');
    $pusher->addAllAudience();
    $pusher->setNotificationAlert('Hello, JPush');
    try {
        $response = $pusher->send();
    } catch (\JPush\Exceptions\JPushException $e) {
        // try something else here
        print $e;
    }
...
重要说明

旧版本的 API 请求返回的是一个对象,新版本返回的是一个数组。由于改变了 API 请求的返回格式,所以请求结果和之前是不兼容的,需要相应的做一下转换,不过,还是建议直接处理作为数组的返回结果。

$result = array();
$result['data'] = (object)$response['body'];
$result['limit'] = (object)$response['headers'];
echo 'Result=' . json_encode($result);
PS

Github 链接: https://github.com/jpush/jpush-api-php-cli...

极光社区产品更新链接:http://community.jiguang.cn/t/jpush-api-ph...

是不是相当的简单呢,当然我承认还存在一些其他问题,如果遇到相关问题欢迎在 Github 上提 issue 或者极光社区发帖,我们会第一时间回复解答跟进(伸手党除外)。

本帖已被设为精华帖!
本帖由 Summer 于 7年前 加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 31

看了一下 phphub-server 中就使用了jpush

7年前 评论

@mcxzyang 写的不好,可能还有很多问题和不对的地方,还请多多批评,

7年前 评论
Summer

牛逼死 :ox::honeybee:

7年前 评论
Summer

你是 jpush 员工么

7年前 评论

@Summer 你猜他这样吐槽不会被开除吗?

7年前 评论

@Summer 是的,写的不好,(当然也因为之前遗留代码太差)还请多多批评 :smile:

@floris 不会让领导看到的 :grimacing:

7年前 评论
Summer

@floris 怕被老程序员打 :pill:

7年前 评论

@Summer 哈哈,这个可能真会 :running: 我赶紧跑

7年前 评论

@helperhaps 我要去举报你 :sunglasses:

7年前 评论

@ricoo 赶紧用上,吐吐槽 :smirk:

7年前 评论

我昨天下的是3.4 :disappointed_relieved:

 $key = config('jpush.key');
 $secret = config('jpush.secret');
 $client = new \JPush($key, $secret);
 $client->push() ->setPlatform('android')->addAlias($alias)
           ->setNotificationAlert($msg) ->send();
7年前 评论

@shawsola v3.5.0 只是对 v3.4.x 的一个大改,升级可能会有些许不太平滑,所以如果是新集成的话,最好还是用 v3.5,还请多多批评哈

7年前 评论

@shawsola 楼主很希望有人吐嘈呢,快吐嘈一波:laughing:

7年前 评论

@maxiaoxiong 头像好评 :smile: 旧版不再维护了,如果你有使用 composer 和命名空间的话,还是建议升级一下的。

7年前 评论
$client = new Client(config('app.jpushAppKey'), config('app.jpushSecret'), storage_path('/logs/jpush.log'));
$result = $client->push()
                ->setPlatform(['ios', 'android'])
                ->addTag($this->_uuid)
                ->setMessage($this->_content, $this->_title)
                ->send();

我想请问一下,这样调用为什么会触发下面这个异常

exception 'InvalidArgumentException' with message 'you can't add tags/alias/registration_id/tag_and when audience='all''
in /var/www/weidiancan/vendor/jpush/jpush/src/JPush/core/PushPayload.php:466
第一次用jpush请指教

7年前 评论

@lybc 我自己看好像也没有什么问题,这个异常是在说什么我想你应该自己清楚,打印 payload 查看一下里面的内容看看应该就知道了 (ง •̀_•́)ง

7年前 评论

@helperhaps 多谢,是我自己的问题,在队列里做推送修改了代码忘记更新队列,尴尬

7年前 评论

最近刚好用到,写过一个介绍 https://phphub.org/topics/2697

7年前 评论

@lybc 那就好,我也纳闷,明明看起来没啥问题,莫不是我的代码的问题,:smile:

7年前 评论

@xfstart07 怎么感觉有点像抄我的 Github 上 README 上的嫌疑 :smile:

你可以写的再详细一点点,比如多夸夸我啊啥的或者吐吐槽啊啥的

7年前 评论

@helperhaps 介绍是根据文档整理的,哈哈
就想吐槽 jpush.log 不能集成到系统的 Log 中

7年前 评论

@xfstart07 这个写 log 确实有点蛋疼,之前有人就说没有写入权限,而且我不知道这个 log,到底实际意义大不大,又不能随便去掉,毕竟已经有好多人用了,这个实现难看的不要不要的。如果你有啥好的想法,也可以讨论下。

7年前 评论

@helperhaps 我觉得第三方库应该将异常抛出就好,让集成这个库的系统(Laravel)去捕获,写在系统统一的Log 日志里把。

7年前 评论

@xfstart07 也就是不写日志的意思咯,不过现在日志记录的是发送请求的参数,你说的是异常的信息,讲道理大多数写 PHP 的人基本都不处理异常,真是让人痛心啊,这也就算了,很多人甚至不使用 Composer 和命名空间。。。扯远了

因为现在是把日志的路径信息放在主入口函数的构造函数中,想想就这么轻易的去掉,也不太妥啊。

7年前 评论

这个版本有一个bug,在初始化对象的时候,如果第三个参数不指定日志的路径,也要填写一个null,不然会一直报错。我被这个问题坑了好长时间,官方给出的回答是第三个参数加个null,null,null。。。

7年前 评论

@liuwantao 是的,你这个坑我也踩过,我的极光介绍中就建议将 log 参数设置为 null。

7年前 评论

@liuwantao 额,这个嘛,我觉得主要是没有写入权限(一般来讲,会在项目中新建一个 jpush.log 文件存储那个日志),就记录发送给 API 的参数的日志到底有什么意义我也在探求中,他的那个主入口函数写的真是不敢恭维,但我又不能随便改(维护遗留项目的痛楚)。。给大家造成不便了,有时候我真的想自己写一个第三方的 SDK

7年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!