在极光推送的开发者服务中创建自己需要接入的app应用,并记录下如下AppKey和Master Secret。
app端和服务器后端在极光官方文档中分别下载对应SDK:https://docs.jiguang.cn/jpush/resources/
客户端的集成步骤及实例在文档中有详细介绍,这里不一一搬运了,唯一值得注意的是APP端和服务器端保持对应统一的AppKey和Master Secret。主要看下后端根据需求定制推送过程及返回结果(以laravel为例)。
根据官方文档中一步步执行。
在项目中的 composer.json
文件中添加 jpush 依赖:
"require": {
"jpush/jpush": "^3.5"
}
执行 $ php composer.phar install
或 $ composer install
进行安装后按理来说就可以使用了,中间出现几次安装失败小插曲,无非是环境不同、扩展没开等等冗杂问题,具体问题具体分析,这里就不一一赘述。
也尝试了官方十分不推荐的“直接下载源码安装”:
在laravel项目内的app文件夹中新建common文件夹,这个文件夹里我习惯放一些使用比较频繁的函数,利用composer设置自动加载,十分方便,所以下载好的极光推送安装包解压后我也顺手放这便于调用。
解压后的SDK名字改简短一点,如上图中的1,新建一个类似2的Jpush.php文件,用于你业务逻辑所需要的一些方法封装成类,类似于推送SDK的入口。为便于在控制器中调用该SDK入口,可以先了解利用composer配置公共函数,配置好以后的文件中的方法函数可以不用类来实现,在控制器中真正达到全局调用的效果。
下方为Jpush.php中封装的一些基本方法:
1、推送一条简单的测试消息给APP
<?php
namespace App\Common;
require_once 'jpush3_5/autoload.php';
class Jpush
{
public static function jpush_app()
{
$appKey = "c48ffbb249107facxxxxxxxx";
$masterSecret = "af1e999b9b8d8bdaxxxxxxxx";
//初始化
$client = new \JPush\Client($appKey, $masterSecret);
//返回一个推送payload构建器,构建 PushPayload
//简单推送一条消息给app,无定时任务逻辑时测试使用
$push = $client->push()
->setPlatform('all')
->addAllAudience()
->setNotificationAlert("尝试推送的一条即时消息")
->send();
var_dump($push);
//获取定时任务列表,可看到已经定制成功的推送信息状态
$get = $client->schedule()->getSchedules();
var_dump($get);
}
}
2、异常处理
<?php
namespace App\Common;
require_once 'jpush3_5/autoload.php';
class Jpush
{
public static function jpush_app()
{
$appKey = "c48ffbb249107facxxxxxxxx";
$masterSecret = "af1e999b9b8d8bdaxxxxxxxx";
//初始化
$client = new \JPush\Client($appKey, $masterSecret);
//异常处理
$push = $client->push();
$push->setPlatform('all');
$push->addAllAudience();
$push->setNotificationAlert('推送消息弹框提示信息');
try {
var_dump($push->send());
} catch (\JPush\Exceptions\JPushException $e) {
var_dump($e);
}
//获取定时任务列表,可看到已经定制成功的推送信息状态,可以不要下面两行,只用于查看已定制的任务
$get = $client->schedule()->getSchedules();
var_dump($get);
}
}
3.创建一个触发一次的定时任务
<?php
namespace App\Common;
require_once 'jpush3_5/autoload.php';
class Jpush
{
public static function jpush_app()
{
$appKey = "c48ffbb249107facxxxxxxxx";
$masterSecret = "af1e999b9b8d8bdaxxxxxxxx";
//初始化
$client = new \JPush\Client($appKey, $masterSecret);
//返回一个推送payload构建器,构建 PushPayload
//通过Push模块的build()方法获得PushPayload Push的构建对象
$push = $client->push()
->setPlatform('all')
->addAllAudience()
->setNotificationAlert("这是一条消息推送提醒")
->build();
//创建一个触发一次的定时任务
$response = $client->schedule()->createSingleSchedule("触发一次的定时任务", $push, ["time" => "2019-02-27 15:30:00"]);
var_dump("$response");
//获取定时任务列表,可看到已经定制成功的推送信息状态,可以不要下面两行,只用于查看已定制的任务
$get = $client->schedule()->getSchedules();
var_dump($get);
}
}
4、创建一个或者多个定时推送任务
<?php
namespace App\Common;
require_once 'jpush3_5/autoload.php';
class Jpush
{
public static function jpush_app()
{
$appKey = "c48ffbb249107facxxxxxxxx";
$masterSecret = "af1e999b9b8d8bdaxxxxxxxx";
//初始化
$client = new \JPush\Client($appKey, $masterSecret);
//返回一个推送payload构建器,构建 PushPayload
//通过Push模块的build()方法获得PushPayload Push的构建对象
$push = $client->push()
->setPlatform('all')
->addAllAudience()
->setNotificationAlert("这是一条消息推送提醒")
->build();
//创建一个可以每天定时触发一次的定时任务
$response1 = $client->schedule()->createPeriodicalSchedule("每天早上9点触发的定时任务", $push, [
"start" => "2019-03-20 09:00:00",
"end" => "2019-04-01 09:00:00",
"time" => "09:00:00",
"time_unit" => "DAY",
"frequency"=>1
]);
print_r($response1);
//创建第二个可以每天定时触发一次的定时任务
$response2 = $client->schedule()->createPeriodicalSchedule("每天晚上21触发的定时任务", $push, [
"start" => "2019-03-19 21:00:00",
"end" => "2019-04-01 21:00:00",
"time" => "21:00:00",
"time_unit" => "DAY",
"frequency"=>1
]);
print_r($response2);
var_dump("$response");
//获取定时任务列表,可看到已经定制成功的推送信息状态,可以不要下面两行,只用于查看已定制的任务
$get = $client->schedule()->getSchedules();
var_dump($get);
}
}
附上第四种,创建一个或者多个定时推送任务的返回结果:
Array
(
[body] => Array
(
[schedule_id] => 4944a472-49ef-11e9-8d3f-0021f6b7a802
[name] => 每天早上9点触发的定时任务
)
[http_code] => 200
[headers] => Array
(
[0] => HTTP/1.1 200 OK
[Server] => nginx
[Date] => Tue, 19 Mar 2019 02:32:48 GMT
[Content-Type] => application/json
[Transfer-Encoding] => chunked
[Connection] => keep-alive
)
)
Array
(
[body] => Array
(
[schedule_id] => 49497470-49ef-11e9-a0c4-fa163e2198ad
[name] => 每天晚上21触发的定时任务
)
[http_code] => 200
[headers] => Array
(
[0] => HTTP/1.1 200 OK
[Server] => nginx
[Date] => Tue, 19 Mar 2019 02:32:48 GMT
[Content-Type] => application/json
[Transfer-Encoding] => chunked
[Connection] => keep-alive
)
)
array(3) {
["body"]=>
array(4) {
["total_count"]=>
int(2)
["total_pages"]=>
int(1)
["page"]=>
int(1)
["schedules"]=>
array(2) {
[0]=>
array(6) {
["name"]=>
string(37) "每天早上9点触发的定时任务"
["enabled"]=>
bool(true)
["schedule_id"]=>
string(36) "4944a472-49ef-11e9-8d3f-0021f6b7a802"
["trigger"]=>
array(2) {
["single"]=>
array(1) {
["time"]=>
string(0) ""
}
["periodical"]=>
array(6) {
["end"]=>
string(19) "2019-04-01 09:00:00"
["point"]=>
NULL
["start"]=>
string(19) "2019-03-20 09:00:00"
["frequency"]=>
int(1)
["time_unit"]=>
string(3) "day"
["time"]=>
string(8) "09:00:00"
}
}
["msgtype"]=>
int(0)
["push"]=>
array(4) {
["platform"]=>
string(3) "all"
["audience"]=>
string(3) "all"
["options"]=>
array(2) {
["sendno"]=>
int(1867087675)
["apns_production"]=>
bool(false)
}
["notification"]=>
array(1) {
["alert"]=>
string(27) "这是一条消息推送提醒"
}
}
}
[1]=>
array(6) {
["name"]=>
string(35) "每天晚上21触发的定时任务"
["enabled"]=>
bool(true)
["schedule_id"]=>
string(36) "49497470-49ef-11e9-a0c4-fa163e2198ad"
["trigger"]=>
array(2) {
["single"]=>
array(1) {
["time"]=>
string(0) ""
}
["periodical"]=>
array(6) {
["end"]=>
string(19) "2019-04-01 21:00:00"
["point"]=>
NULL
["start"]=>
string(19) "2019-03-19 21:00:00"
["frequency"]=>
int(1)
["time_unit"]=>
string(3) "day"
["time"]=>
string(8) "21:00:00"
}
}
["msgtype"]=>
int(0)
["push"]=>
array(4) {
["platform"]=>
string(3) "all"
["audience"]=>
string(3) "all"
["options"]=>
array(2) {
["sendno"]=>
int(1867087675)
["apns_production"]=>
bool(false)
}
["notification"]=>
array(1) {
["alert"]=>
string(27) "这是一条消息推送提醒"
}
}
}
}
}
["http_code"]=>
int(200)
["headers"]=>
array(6) {
[0]=>
string(15) "HTTP/1.1 200 OK"
["Server"]=>
string(5) "nginx"
["Date"]=>
string(29) "Tue, 19 Mar 2019 02:32:48 GMT"
["Content-Type"]=>
string(16) "application/json"
["Transfer-Encoding"]=>
string(7) "chunked"
["Connection"]=>
string(10) "keep-alive"
}
}