大家有没有用过极光推送 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 上提 issue 或者极光社区发帖,我们会第一时间回复解答跟进(伸手党除外)。
:+1:
看了一下 phphub-server 中就使用了jpush
@floris :clap:
@mcxzyang 写的不好,可能还有很多问题和不对的地方,还请多多批评,
牛逼死 :ox::honeybee:
你是 jpush 员工么
@Summer 你猜他这样吐槽不会被开除吗?
@Summer 是的,写的不好,(当然也因为之前遗留代码太差)还请多多批评 :smile:
@floris 不会让领导看到的 :grimacing:
@floris 怕被老程序员打 :pill:
@Summer 哈哈,这个可能真会 :running: 我赶紧跑
@helperhaps 我要去举报你 :sunglasses:
@helperhaps @floris :smirk:
@ricoo 赶紧用上,吐吐槽 :smirk:
我昨天下的是3.4 :disappointed_relieved:
@shawsola v3.5.0 只是对 v3.4.x 的一个大改,升级可能会有些许不太平滑,所以如果是新集成的话,最好还是用 v3.5,还请多多批评哈
@shawsola 楼主很希望有人吐嘈呢,快吐嘈一波:laughing:
我还用的
3.3.9
@maxiaoxiong 头像好评 :smile: 旧版不再维护了,如果你有使用 composer 和命名空间的话,还是建议升级一下的。
我想请问一下,这样调用为什么会触发下面这个异常
@lybc 我自己看好像也没有什么问题,这个异常是在说什么我想你应该自己清楚,打印 payload 查看一下里面的内容看看应该就知道了 (ง •̀_•́)ง
@helperhaps 多谢,是我自己的问题,在队列里做推送修改了代码忘记更新队列,尴尬
最近刚好用到,写过一个介绍 https://phphub.org/topics/2697,
@lybc 那就好,我也纳闷,明明看起来没啥问题,莫不是我的代码的问题,:smile:
@xfstart07 怎么感觉有点像抄我的 Github 上 README 上的嫌疑 :smile:
你可以写的再详细一点点,比如多夸夸我啊啥的或者吐吐槽啊啥的
@helperhaps 介绍是根据文档整理的,哈哈
就想吐槽 jpush.log 不能集成到系统的 Log 中
@xfstart07 这个写 log 确实有点蛋疼,之前有人就说没有写入权限,而且我不知道这个 log,到底实际意义大不大,又不能随便去掉,毕竟已经有好多人用了,这个实现难看的不要不要的。如果你有啥好的想法,也可以讨论下。
@helperhaps 我觉得第三方库应该将异常抛出就好,让集成这个库的系统(Laravel)去捕获,写在系统统一的Log 日志里把。
@xfstart07 也就是不写日志的意思咯,不过现在日志记录的是发送请求的参数,你说的是异常的信息,讲道理大多数写 PHP 的人基本都不处理异常,真是让人痛心啊,这也就算了,很多人甚至不使用 Composer 和命名空间。。。扯远了
因为现在是把日志的路径信息放在主入口函数的构造函数中,想想就这么轻易的去掉,也不太妥啊。
这个版本有一个bug,在初始化对象的时候,如果第三个参数不指定日志的路径,也要填写一个null,不然会一直报错。我被这个问题坑了好长时间,官方给出的回答是第三个参数加个null,null,null。。。
@liuwantao 是的,你这个坑我也踩过,我的极光介绍中就建议将 log 参数设置为 null。
@liuwantao 额,这个嘛,我觉得主要是没有写入权限(一般来讲,会在项目中新建一个 jpush.log 文件存储那个日志),就记录发送给 API 的参数的日志到底有什么意义我也在探求中,他的那个主入口函数写的真是不敢恭维,但我又不能随便改(维护遗留项目的痛楚)。。给大家造成不便了,有时候我真的想自己写一个第三方的 SDK