一。先进行配置

1.具体配置可参考极光官方文档https://docs.jiguang.cn/jpush/server/sdk/java_sdk/ 或  https://github.com/jpush/jpush-api-java-client  可进行源码下载参考

2.配置maven pom.xml 文件

找到3.3.3jar包进行下载,复制jar包到你的项目(jiguang-common-1.0.8 jar  &&  jpush-client-3.3.3 jar

<dependency>
    <groupId>cn.jpush.api</groupId>
    <artifactId>jpush-client</artifactId>
    <version>3.3.3</version>
</dependency>

 

<dependency>
     <groupId>cn.jpush.api</groupId>
     <artifactId>jiguang-common</artifactId>
     <version>1.1.1</version>
</dependency>
<dependency>
     <groupId>io.netty</groupId>
     <artifactId>netty-all</artifactId>
     <version>4.1.6.Final</version>
     <scope>compile</scope>
</dependency>
<dependency>
     <groupId>com.google.code.gson</groupId>
     <artifactId>gson</artifactId>
     <version>2.3</version>
 </dependency>
 <dependency>
     <groupId>org.slf4j</groupId>
     <artifactId>slf4j-api</artifactId>
     <version>1.7.7</version>
</dependency>

    <!-- For log4j -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.7</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
找到以上包,进行配置。官方文档有详细说明

 

二。写一个公用推送demo工具类调用

//极光推送方法工具类

package com.javajy.util;
import java.util.ArrayList;
 import java.util.List;import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;import cn.jiguang.common.ClientConfig;
 import cn.jiguang.common.resp.APIConnectionException;
 import cn.jiguang.common.resp.APIRequestException;
 import cn.jpush.api.JPushClient;
 import cn.jpush.api.push.PushResult;
 import cn.jpush.api.push.model.Message;
 import cn.jpush.api.push.model.Platform;
 import cn.jpush.api.push.model.PushPayload;
 import cn.jpush.api.push.model.audience.Audience;
 import cn.jpush.api.push.model.audience.AudienceTarget;
 import cn.jpush.api.push.model.notification.AndroidNotification;
 import cn.jpush.api.push.model.notification.IosNotification;
 import cn.jpush.api.push.model.notification.Notification;
 //极光推送类
 public class JPushDevice {
     protected static final Logger LOG = LoggerFactory.getLogger(JPushDevice.class);
     
     public static final String URL = "https://device.jpush.cn";//极光访问URL
     public static final String APPKEY = "****";//极光用户名
     public static final String MASTERSECRET = "***";//极光密码
     public static long timeToLive =  60 * 60 * 24 * 10;  //10天
     
         
     
         public static void main(String[] args) {
             List<String> list = new ArrayList<String>();
             list.add("234354676");
             list.add("234564566");
 //            System.out.println(list.toString());
 //            buildPushObject_ios_audienceMore_messageWithExtras(new String[]{"23456","234565","23456"},"title","content",3);
 //            buildPushObject_all_alertWithTitle("234566","title","content",3);
             
             try {
                 JPushClient jpushClient = new JPushClient(JPushDevice.MASTERSECRET, JPushDevice.APPKEY, null,
                         ClientConfig.getInstance());
                 PushPayload payload = AllName(new String[]{"234566","23456"},"title3","content3",1);
                 PushResult pResult = jpushClient.sendPush(payload);                System.out.println("Got result  - " + pResult);
                  try {
                     Thread.sleep(5000);
                 } catch (InterruptedException e) {
                     e.printStackTrace();
                 } // 请求结束后,调用 NettyHttpClient 中的 close
                 // 方法,否则进程不会退出。
                 jpushClient.close();
             } catch (APIConnectionException e) {
                 e.printStackTrace();
             } catch (APIRequestException e) {
                 e.printStackTrace();
             }
         }
        public static PushPayload AllName(String[] username,String title,String fsmessagecontent,Integer count) {
            
             return PushPayload.newBuilder()
 //                    .setPlatform(Platform.android_ios())//安卓和ios
                     .setPlatform(Platform.all())
                     .setAudience(Audience.newBuilder()
 //                             .addAudienceTarget(AudienceTarget.tag("tag1", "tag2"))
                             .addAudienceTarget(AudienceTarget.alias(username))
                             .build())
                     .setMessage(Message.newBuilder()
                             .setMsgContent(fsmessagecontent)
                             .setTitle(count.toString())
                             .build())
                     .setNotification(Notification.newBuilder()
                             .addPlatformNotification(IosNotification.newBuilder()
                                     .setAlert(title)
                                     .setBadge(count)//角标
                                     .build())
                             .addPlatformNotification(AndroidNotification.newBuilder()
                                     .setAlert(title)
                                     .build())
                             .build())
                     .build();
         }
     
 //    private static JPushClient jpushClient =  new JPushClient(masterSecret,appKey,null,ClientConfig.getInstance());//    //对于推送,您所需要做的就是构建PushPayload对象。
 //    PushPayload payload = buildPushObject_ios_audienceMore_messageWithExtras();
 //    PushResult result = jpushClient.sendPush(payload);
     //构建推送对象:所有平台弹框
       public static PushPayload buildPushObject_all_alertWithTitle(String username,String title,String fsmessagecontent,Integer count){
              return PushPayload.newBuilder()
                     .setPlatform(Platform.all())
                     .setAudience(Audience.alias(username))
                     .setMessage(Message.newBuilder()//创建
                             .setMsgContent(fsmessagecontent)
                             .setTitle(count.toString())
                             .build())//角标
                     .setNotification(Notification.newBuilder()
                                 .addPlatformNotification(IosNotification.newBuilder()
                                         .setAlert(title)
                                         .setBadge(count)//角标
                                         .build())
                                 .addPlatformNotification(AndroidNotification.newBuilder()
                                         .setAlert(title)
                                         .build())
                                 .build())                    .build();
       }
       //构建推送对象:所有平台
       public static PushPayload buildPushObject_ios_audienceMore_messageWithExtras(String username,String fsmessagecontent){
              return PushPayload.newBuilder()
                     .setPlatform(Platform.all())//如果指定安卓Platform.android();
                     .setAudience(Audience.alias(username))//设置方式是使用别名
                     .setMessage(Message.newBuilder()//创建
                     .setMsgContent(fsmessagecontent)//消息内容
                     .addExtra("from", "JPush")//消息是 JPush 应用内消息通道的
                         .build())
                     .build();
       }
     //构建推送对象:所有平台
       public static PushPayload buildPushObject_all_alertsendByWeather(String title,String fsmessagecontent,Integer count){
              return PushPayload.newBuilder()
                     .setPlatform(Platform.all())
                     .setAudience(Audience.all())//设置方式是使用别名
                     .setMessage(Message.newBuilder()//创建
                             .setMsgContent(fsmessagecontent)
                             .setTitle(count.toString())
                             .build())//角标
                     .setNotification(Notification.newBuilder()//notification:通知
                                 .addPlatformNotification(IosNotification.newBuilder()
                                         .setAlert(title)
                                         .setBadge(count)//角标
                                         .build())
                                 .addPlatformNotification(AndroidNotification.newBuilder()
                                         .setAlert(title)
                                         .build())
                                 .build())                    .build();
       }
 }

三。//在controller或者serviceImpl中调用demo中的方法

一)我写了一个JPushDeviceController类。用来方便以后直接调用(这些都是集合了查询别名再推送的)

package com.javajy.controller;
import java.io.UnsupportedEncodingException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 import org.framework.frext.controller.common.GenericController;
 import org.framework.frext.util.Ajax;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.ResponseBody;import com.google.gson.Gson;
 import com.javajy.util.HttpClientUtils;
 import com.javajy.util.JPushDevice;
 import com.javajy.vo.JPushDeviceBean;import cn.jiguang.common.ClientConfig;
 import cn.jiguang.common.resp.APIConnectionException;
 import cn.jiguang.common.resp.APIRequestException;
 import cn.jpush.api.JPushClient;
 import cn.jpush.api.push.PushResult;
 import cn.jpush.api.push.model.PushPayload;
 import net.sf.json.JSONObject; @Controller
 @RequestMapping("/JPushDevice/")
 public class JPushDeviceController extends GenericController{
     private static Logger logger = Logger.getLogger(JPushDeviceController.class);
     private static final String URL = "https://device.jpush.cn";//极光访问URL
     private static final String APPKEY ="2b5258f16c5294424ad4b910";//极光用户名
     private static final String MASTERSECRET ="926d72e84333176ff9cd9f9b";//极光密码
     /**  将用户别名分成1000个循环发送
      * @param ulist  别名数组
      * @param title  标题
      * @param content  内容
      * @return
      */
     public static boolean sendJgMessaage(List<String> ulist,String title ,String content) {
         // 调用极光多人推送方法,一次性只能推1000个。        // --------极光------
         List<List<String>> listAll = new ArrayList<List<String>>(); // 拆分后的list数组
         int size = 1000;
         // 获取被拆分的数组个数
         int allListSize = ulist.size() % size == 0 ? ulist.size() / size : ulist.size() / size + 1;        for (int i = 0; i < allListSize; i++) {
             List<String> sub = new ArrayList<String>();
             // 把指定索引数据放入到list中
             for (int j = i * size; j <= size * (i + 1) - 1; j++) {
                 if (j <= ulist.size() - 1) {
                     // 得到拆分后的集合
                     sub.add(ulist.get(j));
                 }
             }
             // 拆分的集合可以做点什么
             // sub.dosomething();
             // 将拆分后的集合综合为一个集合
             listAll.add(sub);
         }
         for (List<String> userlist : listAll) {
             // 4.每一千个调用一次极光推送
             JPushDeviceBean JPushDeviceBean = new JPushDeviceBean();
             JPushDeviceBean.setUsername(userlist);
             JPushDeviceBean.setTitle(title);// 标题
             JPushDeviceBean.setFsmessagecontent(content);// 内容
             JPushDeviceBean.setCount(1);// 角标
             // 调用发送信息接口
             JPushDeviceController jdc = new JPushDeviceController();
             jdc.getAllJPushDevice(JPushDeviceBean);
         }
         return true;
     }
     //1.推送一个人
     @RequestMapping(value = "getOneJPushDevice", method = RequestMethod.POST)
     @ResponseBody
     public Map<String, Object> getOneJPushDevice(@RequestBody JPushDeviceBean j) {
         System.out.println("-----2");
         String aliases = getAliases(j.getAlias_value());//别名;
         if(StringUtils.isNotBlank(aliases)){
             //极光推送
             JPushClient jpushClient =  new JPushClient(MASTERSECRET,APPKEY,null,ClientConfig.getInstance());
             PushPayload payload = JPushDevice.oneName(aliases, j.getTitle(), j.getFsmessagecontent());//一个别名
             PushResult pResult;
             try {
                 pResult = jpushClient.sendPush(payload);
                 System.out.println("Got result 推送一个人  - 3" + pResult );
                 Thread.sleep(5000);
                 // 请求结束后,调用 NettyHttpClient 中的 close 方法,否则进程不会退出。
                 jpushClient.close();
             } catch (APIConnectionException e) {
                 e.printStackTrace();
             } catch (APIRequestException e) {
                 e.printStackTrace();
             } catch (InterruptedException e) {
                 e.printStackTrace();
             }
         }
         return Ajax.buildSuccessResult();
     }    //2.推送多人//先循环判断别名(常用)
     @RequestMapping(value = "getAllJPushDevice", method = RequestMethod.POST)
     @ResponseBody
     public Map<String, Object> getAllJPushDevice(@RequestBody JPushDeviceBean j) {
         List<String> ulist = j.getUsername();//判断过得别名数组
         if(null!=ulist && !ulist.isEmpty()){
             String[] username = ulist.toArray(new String[ulist.size()]);//转化为数组, 调用极光多人推送方法,一次性只能推1000个。
             //极光推送
             JPushClient jpushClient =  new JPushClient(MASTERSECRET,APPKEY,null,ClientConfig.getInstance());
             PushPayload payload = JPushDevice.AllName(username, j.getTitle(), j.getFsmessagecontent(), j.getCount());//用户别名数组1000个一次,标题,内容,角标数
             PushResult pResult;
             try {
                 pResult = jpushClient.sendPush(payload);
                 System.out.println("Got result  - " + new Gson().toJson(pResult) );
                 try {
                     Thread.sleep(5000);
                 } catch (InterruptedException e) {
                     e.printStackTrace();
                 }
                 // 请求结束后,调用 NettyHttpClient 中的 close 方法,否则进程不会退出。
                 jpushClient.close();
             } catch (APIConnectionException e) {
                 e.printStackTrace();
             } catch (APIRequestException e) {
                 e.printStackTrace();
             }
         }
         return Ajax.buildSuccessResult();
     }
    
     //3.判断查询别名是否存在
     public static String getAliases(String aliases){
         String alia ="";
         JPushDeviceBean j = new JPushDeviceBean();
         j.setAlias_value(aliases);
         Map<String, Object> map = getJPushDeviceAliases(j);//查询是否含有别名
         Map<String, Object> ma = (Map<String, Object>)map.get("data");
         if(ma.containsKey("registration_ids")){
             List<String> list = (List<String>)ma.get("registration_ids");//查询registration_ids的值不为空则含有该别名
             if(null!=list && !list.isEmpty()){
                 System.out.println("查询别名----"+new Gson().toJson(list));
                 //在此内可调用极光的推送方法
                 alia = aliases;//如果存在就给返回该别名
             }
         }
         return alia;
     }
     
     //--------------------查询别名的方法-------------------------------------------
     //查询别名(找不到统计项就是 null,否则为统计项的值。)
     @RequestMapping(value = "getJPushDeviceAliases", method = RequestMethod.POST)
     @ResponseBody
     public static Map<String, Object> getJPushDeviceAliases(@RequestBody JPushDeviceBean ht) {
         JSONObject response = null;
         try {
             StringBuilder url = new StringBuilder(URL).append("/v3/aliases/"+ht.getAlias_value());
             String authorValue = getBase64();
             Map<String, String> para = new HashMap<>();
             
             response = HttpClientUtils.doGet(url.toString(), authorValue, para);        if (StringUtils.isNotEmpty((String) response.get("error"))) {
                 logger.info("getAliases:url+params----" + url + para);
                 return Ajax.buildErrorResult((String) response.get("error"));
             }
         } catch (Exception e) {
             e.printStackTrace();
             logger.error("getAliases:url+params----" + e);
         }
         return Ajax.getSuccessReturnMapWithData(response);
     }
     
     //String转base64
     public static String getBase64(){
         Base64 base64 = new Base64();
         String base64Sign ="";
          String string  = APPKEY+":"+MASTERSECRET;
          try {
              base64Sign = base64.encodeToString(string.getBytes("UTF-8"));
 //             System.out.println(base64Sign);
          } catch (UnsupportedEncodingException e) {
              e.printStackTrace();
          }
         return " Basic "+base64Sign;
     }}
 
//自定义的类用来接收参数
package com.javajy.vo;
import java.util.List;
public class JPushDeviceBean {
     
     private String token;
     
     private String alias_value;//别名值
     
     private String registration_id;
     
     private List<String> username;//所有用户别名
     
     private String title;//标题
     
     private String fsmessagecontent;//内容
     
     private Integer count;//角标数
     
     public List<String> getUsername() {
         return username;
     }    public void setUsername(List<String> username) {
         this.username = username;
     }    public String getTitle() {
         return title;
     }    public void setTitle(String title) {
         this.title = title;
     }    public String getFsmessagecontent() {
         return fsmessagecontent;
     }    public void setFsmessagecontent(String fsmessagecontent) {
         this.fsmessagecontent = fsmessagecontent;
     }    public Integer getCount() {
         return count;
     }    public void setCount(Integer count) {
         this.count = count;
     }    public String getAlias_value() {
         return alias_value;
     }    public void setAlias_value(String alias_value) {
         this.alias_value = alias_value;
     }
     
     public String getRegistration_id() {
         return registration_id;
     }    public void setRegistration_id(String registration_id) {
         this.registration_id = registration_id;
     }
     public String getToken() {
         return token;
     }    public void setToken(String token) {
         this.token = token;
     }}
  /*(二)给一个用户推送(直接调用极光实例未进行别名判断)
Fsuser u = fsuserDao.findOne(userId);
 try {
 JPushClient jpushClient = new JPushClient(JPushDevice.masterSecret, JPushDevice.appKey, null, ClientConfig.getInstance());
 PushPayload payload = null;
 if(u!=null){
 payload = JPushDevice.buildPushObject_ios_audienceMore_messageWithExtras(u.getUsername(),fsmessagecontent);
 }
 PushResult pResult = jpushClient.sendPush(payload);
 System.out.println("Got result  - " + pResult );
 Thread.sleep(5000); // 请求结束后,调用 NettyHttpClient 中的 close 方法,否则进程不会退出。
 jpushClient.close();
 } catch (APIConnectionException e) {
 e.printStackTrace();
 System.out.println(e);
 } catch (APIRequestException e) {
 e.printStackTrace();
 System.out.println(e);
 } catch (InterruptedException e) {
 e.printStackTrace();
 System.out.println(e);
 }*//*    public static void main(String[] args) {
         JPushDeviceController JPushDeviceController = new JPushDeviceController();
         JPushDeviceBean jd = new JPushDeviceBean();
         jd.setAlias_value("物业2");
         jd.setTitle("物业标题");
         jd.setFsmessagecontent("物业内容");
         JPushDeviceController.getOneJPushDevice(jd);
     }*/

四。注意调用极光推送前要进行判断,查一下是否含有该别名,如果没有,就不推送。要不然推了,后台会报错