极光推送_总结_01_Java实现极光推送

java

一、代码实现

1.配置类—Env.java

package com.ray.jpush.config;

/**@desc : 极光推送接入配置

*

* @author: shirayner

* @date : 2017年9月27日 下午4:57:36

*/

public class Env {

/**

* 1.极光推送后台APPKEY,MASTER_SECRET

*/

public static final String APP_KEY = "354fb5c3dd4249ec11bc545d";

public static final String MASTER_SECRET = "8976605bf8a9ef9d8d97a8c2";

}

View Code

 

2.消息服务类—MessageService.java 

package com.ray.jpush.service.message;

import org.apache.logging.log4j.LogManager;

import org.apache.logging.log4j.Logger;

import com.alibaba.fastjson.JSONArray;

import com.alibaba.fastjson.JSONObject;

import com.ray.jpush.util.CommonUtil;

import com.ray.jpush.util.HttpHelper;

/**@desc : 极光推送消息服务

*

* @author: shirayner

* @date : 2017年11月29日 下午2:24:16

*/

public class MessageService {

private static final Logger log= LogManager.getLogger(MessageServiceTest.class);

//1.发送通知

private static final String SEND_NOTIFICATION_URL="https://api.jpush.cn/v3/push";

/**

* @desc : 1.调用极光API

*

* @param url 接口url

* @param registration_id 注册id

* @param alert 通知内容

* @param appKey

* @param masterSecret

* @return

* JSONObject

*/

public static JSONObject sendNotification(String registration_id,String alert,String appKey,String masterSecret) {

String base64_auth_string = CommonUtil.encryptBASE64(appKey + ":" + masterSecret);

String authorization = "Basic " + base64_auth_string;

String data=generateJson(registration_id,alert).toString();

log.debug("authorization:"+authorization);

log.debug("data:"+data);

return HttpHelper.doPost(SEND_NOTIFICATION_URL, data, authorization);

}

/**

* @desc : 2.拼装请求json

*

* @param registration_id 注册id

* @param alert 通知内容

* @return

* JSONObject

*/

private static JSONObject generateJson(String registration_id,String alert){

JSONObject json = new JSONObject();

JSONArray platform = new JSONArray(); //1.推送平台设置

platform.add("android");

platform.add("ios");

JSONObject audience = new JSONObject(); //2.推送设备指定,即推送目标

JSONArray registrationIdList = new JSONArray();

registrationIdList.add(registration_id);

audience.put("registration_id", registrationIdList);

JSONObject notification = new JSONObject(); //3.通知内容

JSONObject android = new JSONObject(); //3.1 android通知内容

android.put("alert", alert); //设置通知内容

android.put("builder_id", 1);

JSONObject android_extras = new JSONObject();//android额外参数

android_extras.put("type", "infomation");

android.put("extras", android_extras);

JSONObject ios = new JSONObject();//3.2 ios通知内容

ios.put("alert", alert);

ios.put("sound", "default");

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

JSONObject ios_extras = new JSONObject();//ios额外参数

ios_extras.put("type", "infomation");

ios.put("extras", ios_extras);

notification.put("android", android);

notification.put("ios", ios);

json.put("platform", platform);

json.put("audience", audience);

json.put("notification", notification);

return json;

}

}

View Code

 

3.HttpHelper工具类—HttpHelper.java

package com.ray.jpush.util;

import java.io.IOException;

import org.apache.http.HttpEntity;

import org.apache.http.client.config.RequestConfig;

import org.apache.http.client.methods.CloseableHttpResponse;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.entity.StringEntity;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClients;

import org.apache.http.protocol.BasicHttpContext;

import org.apache.http.util.EntityUtils;

import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.JSONObject;

/**

* HTTP请求工具类

*/

public class HttpHelper {

/**

* @desc :1.发送POST请求-极光推送

*

* @param url 接口url

* @param data 请求包体

* @param authorization 验证字段,Authorization: Basic base64_auth_string

* 其中 base64_auth_string 的生成算法为:base64(appKey:masterSecret)

* 即,对 appKey 加上冒号,加上 masterSecret 拼装起来的字符串,再做 base64 转换。

* @return

* @throws Exception

* JSONObject

*/

public static JSONObject doPost(String url, String data ,String authorization) {

//1.生成一个请求

HttpPost httpPost = new HttpPost(url);

//2.配置请求属性

//2.1 设置请求超时时间

RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(100000).setConnectTimeout(100000).build();

httpPost.setConfig(requestConfig);

//2.2 设置数据传输格式-json

httpPost.addHeader("Content-Type", "application/json");

//2.3 设置Authorization

httpPost.addHeader("Authorization", authorization.trim());

//2.3 设置请求实体,封装了请求参数

StringEntity requestEntity = new StringEntity(data, "utf-8");

httpPost.setEntity(requestEntity);

//3.发起请求,获取响应信息

//3.1 创建httpClient

CloseableHttpClient httpClient = HttpClients.createDefault();

CloseableHttpResponse response = null;

try {

//3.3 发起请求,获取响应

response = httpClient.execute(httpPost, new BasicHttpContext());

if (response.getStatusLine().getStatusCode() != 200) {

System.out.println("request url failed, http code=" + response.getStatusLine().getStatusCode()

+ ", url=" + url);

return null;

}

//获取响应内容

HttpEntity entity = response.getEntity();

if (entity != null) {

String resultStr = EntityUtils.toString(entity, "utf-8");

System.out.println("POST请求结果:"+resultStr);

//解析响应内容

JSONObject result = JSON.parseObject(resultStr);

//请求失败

if (result.getInteger("errcode")!=null && 0 != result.getInteger("errcode")) {

System.out.println("request url=" + url + ",return value=");

System.out.println(resultStr);

int errCode = result.getInteger("errcode");

String errMsg = result.getString("errmsg");

try {

throw new Exception("error code:"+errCode+", error message:"+errMsg);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//请求成功

} else {

return result;

}

}

} catch (IOException e) {

System.out.println("request url=" + url + ", exception, msg=" + e.getMessage());

e.printStackTrace();

} finally {

if (response != null) try {

response.close(); //释放资源

} catch (IOException e) {

e.printStackTrace();

}

}

return null;

}

}

View Code

 

4.通用工具类—CommonUtil.java

package com.ray.jpush.util;

import sun.misc.BASE64Encoder;

/**@desc :

*

* @author: shirayner

* @date : 2017年11月29日 下午3:11:33

*/

public class CommonUtil {

/**

* @desc :BASE64加密工具

*

* @param str 待加密字符串

* @return

* String

*/

public static String encryptBASE64(String str) {

byte[] key = str.getBytes();

BASE64Encoder base64Encoder = new BASE64Encoder();

String strs = base64Encoder.encodeBuffer(key);

return strs;

}

}

View Code

 

5.消息服务测试类—MessageServiceTest.java

package com.ray.jpush.service.message;

import org.junit.Test;

import com.ray.jpush.config.Env;

/**@desc : 极光推送测试类

*

* @author: shirayner

* @date : 2017年11月29日 下午3:54:42

*/

public class MessageServiceTest {

/**

* @desc :1.发送通知

*

* void

*/

@Test

public void testSendNotification() {

String registration_id="121c83f760211fa5944";

//String alert="hello,my honey!";

String alert="您好:\\n 于岩军在2017-11-15提出了一张金额为5的费用报销单 BX10017110076 ,需要审批! \\n\\n\\n===================================================================\\n\\n秒针费用管理系统\\n\\n本邮件由系统自动发送,请勿回复。";

String appKey=Env.APP_KEY;

String masterSecret=Env.MASTER_SECRET;

MessageService.sendNotification(registration_id, alert, appKey, masterSecret);

}

}

View Code

 

 

二、参考资料

1.极光推送经验之谈-Java后台服务器实现极光推送的两种实现方式

 

以上是 极光推送_总结_01_Java实现极光推送 的全部内容, 来源链接: utcz.com/z/395029.html

回到顶部