如何调用jpush推送java后台?

原创作品可以转载,但请注明blogs.com/V1haoge/p/6439313.html.源地址

Java后台实现极光推送有两种方式。一种方式是使用极光推送官方提供的推送请求API:/v3/Push,另一种方式是使用官方提供的第三方Java SDK。这里,首先实现第一种方式的实现代码:

进口?org . Apache ./v3/push ";

私人?布尔?apns _生产?=?真实;

私人?int?生存时间?=?86400;

私人?静电?决赛?字符串?警惕?=?”推送信息”;

/**

*?jpush

*/

公共?作废?齐光推(){

字符串?别名?=?"123456";//声明别名

尝试{

字符串?结果?=?push(pushUrl、别名、ALERT、appKey、masterSecret、apns_production、time _ to _ live);

JSONObject?resData?=?JSONObject.fromObject(结果);

if(resdata . contains key(" error "){

Log.info ("for alias "?+?别名?+?"的信息推送失败!");

JSONObject?错误?=?JSON object . from object(resdata . get(" error "));

Log.info("错误信息是:"?+?error.get("message ")。toString());

}

Log.info ("for alias "?+?别名?+?"的信息已经推送成功!");

}catch(异常?e){

Log.error ("for alias "?+?别名?+?"的信息推送失败!",e);

}

}

/**

*?为aurora push组装json字符串

*?@param?别名

*?@param?警报

*?@回归?json

*/

公共?静电?JSONObject?generateJson(字符串?别名,字符串?警报,布尔型?apns_production,int?生存时间){

JSONObject?json?=?新的?JSON object();

JSONArray?站台?=?新的?JSON array();//平台

platform . add(" Android ");

platform . add(" IOs ");

JSONObject?观众?=?新的?JSON object();//推送目标

JSONArray?alias1?=?新的?JSON array();

alias1.add(别名);

audience.put("alias ",alias 1);

JSONObject?通知?=?新的?JSON object();//通知内容

JSONObject?安卓?=?新的?JSON object();//android通知内容

android.put("alert ",警戒);

android.put("builder_id ",1);

JSONObject?android_extras?=?新的?JSON object();//android额外参数

android_extras.put("type ",“信息”);

android.put("extras ",Android _ extras);

JSONObject?ios?=?新的?JSON object();//ios通知内容

ios.put("alert ",警戒);

ios.put("声音",“默认”);

ios.put("badge ","+1");

JSONObject?ios_extras?=?新的?JSON object();//ios额外参数

ios_extras.put("type ",“信息”);

ios.put("extras ",IOs _ extras);

notification.put("android ",安卓);

notification.put("ios ",IOs);

JSONObject?选项?=?新的?JSON object();//设置参数

options.put("生存时间",?Integer.valueOf(生存时间));

options.put("apns_production ",apns _生产);

json.put("platform ",平台);

json.put("audience ",观众);

json.put("notification ",通知);

json.put("options ",选项);

回归?json

}

/**

*?推送方法-调用aurora API

*?@param?请求Url

*?@param?别名

*?@param?警报

*?@回归?结果

*/

公共?静电?字符串?推(弦?reqUrl,字符串?别名,字符串?警报,字符串?appKey,字符串?主秘密,布尔?apns_production,int?生存时间){

字符串?base64_auth_string?=?encryptBASE64(appKey?+?":"?+?master secret);

字符串?授权?=?“基础?”?+?base64 _ auth _ string

回归?sendPostRequest(reqUrl,generateJson(别名,警报,apns_production,生存时间)。toString(),“UTF-8”,授权);

}

/**

*?发送Post请求(json格式)

*?@param?请求URL

*?@param?数据

*?@param?编码字符集

*?@param?批准

*?@回归?结果

*/

@SuppressWarnings({?“资源”?})

公共?静电?字符串?sendPostRequest(字符串?reqURL,?字符串?数据,?字符串?encodeCharset,String?授权){

HttpPost?. jiguang . common . client config;

进口?cn . jiguang . common . resp . apiconnectionexception;

进口?cn . jiguang . common . resp . apirequestexception;

进口?cn . jpush . API . jpush client;

进口?cn . jpush . API . push . push result;

进口?cn . jpush . API . push . model . options;

进口?cn . jpush . API . push . model . platform;

进口?cn . jpush . API . push . model . push payload;

进口?cn . jpush . API . push . model . audience . audience;

进口?cn . j push . API . push . model . notification . androidnotification;

进口?cn . jpush . API . push . model . notification . IOs notification;

进口?cn . jpush . API . push . model . notification . notification;

/**

*?Java后台极光推送模式二:使用Java?软件开发工具包(Software Development Kit)

*/

@SuppressWarnings({?“弃用”,?“限制”?})

公共?班级?吉广推?{

私人?静电?决赛?Logger?日志?=?logger factory . get logger(jiguangpush . class);

私人?静电?字符串?大秘密?=?”xxxxxxxxxxxxxxxxx”;

私人?静电?字符串?appKey?=?”xxxxxxxxxxxxxxxx”;

私人?静电?决赛?字符串?警惕?=?”推送信息”;

/**

*?jpush

*/

公共?作废?齐光推(){

字符串?别名?=?"123456";//声明别名

Log.info("别名"?+?别名?+?"用户推送信息的");

PushResult?结果?=?push(String.valueOf(别名),ALERT);

如果(结果?!=?null?& amp& amp?result.isResultOK()){

Log.info("对于别名"?+?别名?+?"的信息已经推送成功!");

}否则{

Log.info("对于别名"?+?别名?+?"的信息推送失败!");

}

}

/**

*?生成极光推送对象PushPayload(使用java?SDK)

*?@param?别名

*?@param?警报

*?@回归?推送有效负载

*/

公共?静电?PushPayload?buildPushObject _ Android _ IOs _ alias _ alert(String?别名,字符串?警报){

回归?PushPayload.newBuilder()

。set platform(platform . Android _ IOs())

。set audience(audience . alias(alias))

。set notification(notification . new builder()

。addPlatformNotification(androidnotification . new builder()

。addExtra("type ",“信息”)

。设置警报(警报)

。build())

。addPlatformNotification(IOs notification . new builder()

。addExtra("type ",“信息”)

。设置警报(警报)

。build())

。build())

。setOptions(Options.newBuilder()

。setapnsproduction(false)//true-push生产环境?错误-推动开发环境(测试使用参数)

。setTimeToLive(90)//消息在JPush服务器中的过期时间(测试使用参数)

。build())

。build();

}

/**

*?极光推送法(用java?SDK)

*?@param?别名

*?@param?警报

*?@回归?推送结果

*/

公共?静电?PushResult?推(弦?别名,字符串?警报){

ClientConfig?clientConfig?=?client config . getinstance();

JPushClient?jpushClient?=?新的?JPushClient(masterSecret,appKey,?null,?client config);

PushPayload?有效载荷?=?buildPushObject _ Android _ IOs _ alias _ alert(别名,alert);

试试?{

回归?jpushClient.sendPush(有效载荷);

}?接住?(APIConnectionException?e)?{

log.error("连接?错误。?应该?重试?以后再说。?",?e);

回归?null

}?接住?(APIRequestException?e)?{

log.error("错误?回应?从哪里?JPush?服务器。?应该?复习?然后呢。修复?它。?",?e);

log.info("HTTP?状态:?”?+?e . get status());

log.info("错误?代码:?”?+?e . get error code());

log.info("错误?消息:?"?+?e . get error message());

log.info("Msg?ID:?"?+?e . getmsgid());

回归?null

}

}

}可见使用Java SDK推送的方式非常简单,代码量小,也不难理解。很多东西都是在官方SDK里实现的。我们只需要配置信息,然后启动推送。需要注意的是,使用第二种方法,需要导入Aurora官网提供的jar包。

在maven的pom文件中直接添加:

& lt依赖性& gt

& ltgroupId & gtcn . j push . API & lt;/groupId & gt;

& ltartifactId & gtjpush-client & lt;/artifact id & gt;

& lt版本& gt3 . 2 . 15 & lt;/version & gt;

& lt/dependency & gt;注意:这里极有可能发生jar包冲突:我忘了是哪个包了,好像是日志包,找到后可以删除。本来我们的项目也是用第二种方式实现的,但是最后在提交代码的时候发现了一个问题,就是虽然我们只带入了官网提供的三个jar包,但是在上次的统计中,无缘无故的增加了80+个jar包,所以提交这么多jar包太臃肿,不现实,所以我们临时改变了方案,采用了第一种方式编码。

代码中采用别名模式推送,需要在手机APP上设置别名,最好是在用户登录之后,这样只要用户登录一次,它的绑定别名就可以保存到Aurora服务器上,而我们在推送的时候,就可以指定这个别名将信息推送到相应用户的手机上。

事实上,当我们发起推送请求时,我们只是将信息发送到Aurora服务器。此信息有存储时间限制。默认有一天,只要用户登录手机APP,极光服务器就会自动将信息推送到有相应别名的手机上。这样,后天信息就不是我们直接推送到手机上,而是通过极光服务器,这是极光的正式工作。

注意:这里有一个提示。在设置这个别名的时候,其实可以将用户ID设置为别名,既方便又安全。不需要想办法生成唯一的字符串进行标识,甚至不需要在后台数据库的用户表中添加字段。