如何调用jpush推送java后台?
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设置为别名,既方便又安全。不需要想办法生成唯一的字符串进行标识,甚至不需要在后台数据库的用户表中添加字段。