zoukankan      html  css  js  c++  java
  • 极光推送_总结_01_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后台服务器实现极光推送的两种实现方式

  • 相关阅读:
    DYCom多平台聊天室Sample
    silverlight多人在线游戏示例
    设计模式之: 命令模式
    Vector
    flashBuilder加入AsDoc注释
    转:每个Flash开发者应该知道的事情
    flashBuilder无法调试:57%就不动了
    UML类图实例
    Dictionary
    Enterprise Architect使用(一)
  • 原文地址:https://www.cnblogs.com/shirui/p/7921979.html
Copyright © 2011-2022 走看看