JAVA SDK 极光推送后台DEMO

pom导依赖

 <properties>
        <comLog.version>1.1.1</comLog.version>
    </properties>

   <dependencies>
       <dependency>
            <groupId>cn.jpush.api</groupId>
            <artifactId>jpush-client</artifactId>
            <version>3.2.7</version>
       </dependency>
       <dependency>
            <groupId>cn.jpush.api</groupId>
            <artifactId>jiguang-common</artifactId>
            <version>1.0.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>

        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>${comLog.version}</version>
        </dependency>       
    </dependencies>

编写工具类,比较健全的,一般要用的都写了

package com.lyt.jpush.api;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import cn.jpush.api.JPushClient;
import cn.jpush.api.common.resp.APIConnectionException;
import cn.jpush.api.common.resp.APIRequestException;
import cn.jpush.api.push.PushResult;
import cn.jpush.api.push.model.Message;
import cn.jpush.api.push.model.Options;
import cn.jpush.api.push.model.Platform;
import cn.jpush.api.push.model.PushPayload;
import cn.jpush.api.push.model.PushPayload.Builder;
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;


    /**
     * 
     * @ClassName: MessagePushUtil
     * @Description: (消息推送工具类)
     * @date 2015年12月22日 下午2:36:45
     *
     */
    public class MsgPushUtils{
    protected static Logger LOG = LoggerFactory.getLogger(MsgPushUtils.class);
//  private static final String MASTER_SECRET = "XXXXXX";
//  private static final String APP_KEY = "XXXXX";
    private static final String MASTER_SECRET = "XXXXXX";
    private static final String APP_KEY = "XXXXXXX";
    private static PushPayload pushPayload ;
//  private static Builder builder; 
//  static {
//  Builder builder = PushPayload.newBuilder();
//  pushPayload = builder
//  .setNotification(Notification.alert(""))
//  .setAudience(Audience.all())
//  .setPlatform(Platform.all())
//  .setOptions(Options.newBuilder().setTimeToLive(0L).build())
//  .build();
//  }
    public static final String BEEN_CONCERNED_ALERT = "";

    public static final String SOUND = "";

    public static final int BADGE = 1;
    /**
     * @throws APIRequestException 
     * @throws APIConnectionException 
    * 
    * @Title: pushMessage 
    * @Description: (推送消息) 
    * @param @param json
    * @param @return    设定文件 
    * @return HttpResponse    返回类型 
    * @throws
    */
    public static PushResult sendPush(PushPayload payload) throws APIConnectionException, APIRequestException{
    JPushClient jPushClient = new JPushClient(MASTER_SECRET, APP_KEY);
    return jPushClient.sendPush(payload);
    }

    /**
    * @Title: sendPushTryCatch 
    * @Description: try catch 推送
    * @param @param payload
    * @param @param logger
    * @param @return    设定文件 
    * @return String    返回类型 
    * @throws 
    */
    public static void sendPushTryCatch(PushPayload payload, Logger logger){
    JPushClient jPushClient = new JPushClient(MASTER_SECRET, APP_KEY);
    try {
    PushResult pushResult = jPushClient.sendPush(payload);
    logger.info("返回结果" + pushResult);
    } catch (APIConnectionException e) {
    logger.error("连接错误,稍后尝试" + e);
    } catch (APIRequestException e) {
    logger.error("极光推送内部错误", e);
    logger.info("网络请求状态" + e.getStatus());
    logger.info("错误状态码" + e.getErrorCode());
    logger.info("错误信息" + e.getErrorMessage());
    logger.info("信息ID" + e.getMsgId());
    logger.info("极光推送错误信息:" + e.getErrorMessage());
    }
    }

    /**
    * 
    * @Title: buildPushObjectAllAllAlert 
    * @Description: (快捷地构建推送对象:所有平台,所有设备,内容为 alert 的通知) 
    * @param @param alert
    * @param @return    设定文件 
    * @return PushPayload    返回类型 
    * @throws
    */
    @SuppressWarnings("static-access")
    public static PushPayload buildPushObjectAllAllAlert(String alert) {
       return pushPayload.alertAll(alert);
    }

    /** 
    * @Title: buildPushObjectAliasAlert 
    * @Description: (所有平台,推送目标是别名为 alias,通知内容为 alert) 
    * @param @param alert
    * @param @param alias
    * @param @return    设定文件 
    * @return PushPayload    返回类型 
    * @throws 
    */
    public static PushPayload buildPushObjectAliasAlert(String days,String alert, String... alias) {
    Builder builder = PushPayload.newBuilder();
    return builder
    .setPlatform(Platform.android_ios())
    .setAudience(Audience.alias(alias))
    .setNotification(Notification.newBuilder()
    .setAlert(alert)
    .addPlatformNotification(
    AndroidNotification.newBuilder()
    .addExtra("sign", "5")
    .build())
    .addPlatformNotification(IosNotification.newBuilder()
    .addExtra("sign", "5")
    .build())
    .build())
    .setOptions(Options.newBuilder()
            .setApnsProduction(false)
            .setTimeToLive(Long.valueOf(Integer.valueOf(days)*86400))
            .build())
    .build();
    }
    /**
    * 
    * @Title: buildPushObjectIos 
    * @Description: (iOS推送 badge  sound) 
    * @param @param alias
    * @param @param alert
    * @param @param badge
    * @param @return    设定文件 
    * @return PushPayload    返回类型 
    * @throws
    */
    public static PushPayload buildPushObjectIosAndroid(String days,Map<String, String> params,
        String[] alias, String alert, int badge, String sound, String msgContent) {
           Builder builder = PushPayload.newBuilder();
           return builder
                   .setPlatform(Platform.android_ios())
                   .setAudience(Audience.alias(alias))
                   .setNotification(Notification.newBuilder()
                   .addPlatformNotification(IosNotification.newBuilder()
                   .setAlert(alert)
                   .setBadge(badge)
                   .addExtras(params)
                   .setSound(sound)
                   .build())
                   .addPlatformNotification(AndroidNotification.newBuilder()
                   .setAlert(alert)
                   .addExtras(params)
                   .build())
                   .build())
                   .setMessage(Message.newBuilder()
                   .setMsgContent(msgContent)
                   .build())
                   .setOptions(Options.newBuilder()
                            .setApnsProduction(false)
                            .setTimeToLive(Long.valueOf(Integer.valueOf(days)*86400))
                            .build())
                   .build();
       }

        /** 
        * @Title: buildPushObjectAllAliasAlert 
        * @Description: (所有平台,推送目标是别名为 alias,通知标题为 title,通知内容为 alert) 
        * @param @param params
        * @param @param alias
        * @param @return    设定文件 
        * @return PushPayload    返回类型 
        * @throws 
        */
    public static PushPayload buildPushObjectAllAliasAlert(String days,Map<String, String> params, String alert, String title,String... alias) {
        Builder builder = PushPayload.newBuilder();
        return builder
                    .setPlatform(Platform.android_ios()) 
                    .setAudience(Audience.alias(alias))  
                    .setNotification(Notification.newBuilder()  
                            .setAlert(alert)
                            .addPlatformNotification(AndroidNotification.newBuilder()  
                                    .setTitle(title)
                                    .addExtras(params)
                                    .build())  
                            .addPlatformNotification(IosNotification.newBuilder()
                            .addExtras(params)
                                    .build())  
                            .build())  
                    .setOptions(Options.newBuilder()
                            .setApnsProduction(false)
                            .setTimeToLive(Long.valueOf(Integer.valueOf(days)*86400))
                            .build())
                    .build();  
        }


        /** 
        * @Title: buildPushObjectAndroidTagAlertWithTitle 
        * @Description: (平台是 Android,目标是 tag 为 tag 的设备,内容是 Android 通知 alert,并且标题为 title) 
        * @param @param tag
        * @param @param alert
        * @param @param title
        * @param @return    设定文件 
        * @return PushPayload    返回类型 
        * @throws 
        */
    public static PushPayload buildPushObjectAndroidTagAlertWithTitle(String days,String tag, String alert, String title) {
            Builder builder = PushPayload.newBuilder();
            return builder
                    .setPlatform(Platform.android())
                    .setAudience(Audience.tag(tag))
                    .setNotification(Notification.android(alert, title, null))
                    .setOptions(Options.newBuilder()
                            .setApnsProduction(false)
                            .setTimeToLive(Long.valueOf(Integer.valueOf(days)*86400))
                            .build())
                    .build();
        }

        /** 
        * @Title: buildPushObjectIosTagAndAlertWithExtrasAndMessage 
        * @Description: (
        * 构建推送对象:平台是 iOS,推送目标是 tag, tagAll 的交集,
        * 推送内容同时包括通知与消息 - 通知信息是 alert,角标数字为 number,
        * 消息内容是 msgContent。
        * 通知是 APNs 推送通道的,消息是 JPush 应用内消息通道的。
        * APNs 的推送环境是“开发”(如果不显式设置的话,Library 会默认指定为开发)
        * true 表示推送生产环境,true 表示要推送开发环境 
        *  )
        * @param @param tag
        * @param @param tagAll
        * @param @param number
        * @param @param alert
        * @param @param msgContent
        * @param @return    设定文件 
        * @return PushPayload    返回类型 
        * @throws 
        */
        public static PushPayload buildPushObjectIosTagAndAlertWithExtrasAndMessage(String days,
        String tag, String tagAll, int number, String alert, String msgContent) {
            Builder builder = PushPayload.newBuilder();
            return builder
            .setPlatform(Platform.ios())
                    .setAudience(Audience.tag_and(tag, tagAll))
                    .setNotification(Notification.newBuilder()
                            .addPlatformNotification(IosNotification.newBuilder()
                                    .setAlert(alert)
                                    .setBadge(number)
                                    .build())
                            .build())
                     .setMessage(Message.content(msgContent))
                     .setOptions(Options.newBuilder()
                             .setApnsProduction(false)
                             .setTimeToLive(Long.valueOf(Integer.valueOf(days)*86400))
                             .build())
                     .build();
        }

        /** 
         * 构建推送对象:平台是 Andorid 与 iOS,
        * 推送目标是 (tag1 与 tag2 的并集),
        * 推送内容是 - 内容为 msgContent 的消息
        * @Title: buildPushObjectIosAudienceMoreMessageWithExtras 
        * @param @param tag1
        * @param @param tag2
        * @param @param msgContent
        * @param @return    设定文件 
        * @return PushPayload    返回类型 
        * @throws 
        */
        public static PushPayload buildPushObjectIosAudienceMoreMessageWithExtras(String days,
        String tag1, String tag2, String msgContent) {
            Builder builder = PushPayload.newBuilder();
            return builder
                    .setPlatform(Platform.android_ios())
                    .setAudience(Audience.newBuilder()
                            .addAudienceTarget(AudienceTarget.tag(tag1, tag2))
                            .build())
                    .setMessage(Message.newBuilder()
                            .setMsgContent(msgContent)
                            .build())
                    .setOptions(Options.newBuilder()
                            .setApnsProduction(false)
                            .setTimeToLive(Long.valueOf(Integer.valueOf(days)*86400))
                            .build())
                    .build();
        }
        /** 
        * @Title: sendAndroidMessageWithAliasAndExtras 
        * @Description: 用户自定义消息类型,以及传递附属信息,发送给安卓和IOS特定用户 
        * @param @param extras
        * @param @param title
        * @param @param msgContent
        * @param @param alias
        * @param @return
        * @param @throws APIConnectionException
        * @param @throws APIRequestException    设定文件 
        * @return PushPayload    返回类型 
        * @throws 
        */
        public static PushPayload sendAndroidAndIosMessageWithAliasAndExtras(String days,Map<String, String>extras,String title, String msgContent, String... alias) 
                throws APIConnectionException, APIRequestException {
                  Builder builder = PushPayload.newBuilder();
                    return builder
                            .setPlatform(Platform.android_ios())
                            .setAudience(Audience.alias(alias))
                            .setMessage(Message.newBuilder()
                                    .setTitle(title)
                                    .setMsgContent(msgContent)
                                    .addExtras(extras)
                                    .build())
                            .setOptions(Options.newBuilder()
                                    .setApnsProduction(false)
                                    .setTimeToLive(Long.valueOf(Integer.valueOf(days)*86400))
                                    .build())
                            .build();
        }

        /** 
        * @Title: sendAndroidMessageWithAlias 
        * @Description: 用户自定义消息类型,无附加属性信息,发送给安卓和IOS特定用户 
        * @param @param title
        * @param @param msgContent
        * @param @param alias
        * @param @return
        * @param @throws APIConnectionException
        * @param @throws APIRequestException    设定文件 
        * @return PushPayload    返回类型 
        * @throws 
        */
        public static PushPayload sendAndroidAndIosMessageWithAlias(String days,Map<String,String> extras,String title, String msgContent, String... alias) 
                throws APIConnectionException, APIRequestException {
                 Builder builder = PushPayload.newBuilder();
                    return builder
                            .setPlatform(Platform.android_ios())
                            .setAudience(Audience.alias(alias))
                            .setMessage(Message.newBuilder()
                                    .setTitle(title)
                                    .setMsgContent(msgContent)
                                    .addExtras(extras)
                                    .build())
                            .setOptions(Options.newBuilder()
                                    .setApnsProduction(false)
                                    .setTimeToLive(Long.valueOf(Integer.valueOf(days)*86400))
                                    .build())
                            .build();
        }

        /** 
        * @Title: sendAndroidAndIosMessageAndNotification 
        * @Description: 推送消息和通知,发送给所有安卓和IOS用户 
        * @param @param title
        * @param @param alert
        * @param @return    设定文件 
        * @return PushPayload    返回类型 
        * @throws 
        */
        public static PushPayload sendAndroidAndIosMessageAndNotification(String days,String content,String alert){
            Builder builder = PushPayload.newBuilder();
            return builder
                    .setPlatform(Platform.android_ios())
                    .setNotification(Notification.newBuilder()  
                                    .setAlert(alert)
                                    .build()) 
                    .setMessage(Message.newBuilder()
                                    .setTitle("")
                                    .setMsgContent(content)
                                    .build())
                    .setOptions(Options.newBuilder()
                            .setApnsProduction(false)
                            .setTimeToLive(Long.valueOf(Integer.valueOf(days)*86400))
                            .build())
                    .build();
        }

//      public static void main(String[] args) {
//          try {
//              sendPush(sendAndroidAndIosMessageWithAlias("1", null,"超神了哦", "123456"));
//          } catch (APIConnectionException e) {
//              LOG.error("Connection error. Should retry later. ", e);
//          } catch (APIRequestException e) {
//              LOG.error("Error response from JPush server. Should review and fix it. ", e);
//              LOG.info("HTTP Status: " + e.getStatus());
//              LOG.info("Error Code: " + e.getErrorCode());
//              LOG.info("Error Message: " + e.getErrorMessage());
//          }
//          
//      }
}

与项目整合及运用,本人习惯把它整成一个工具类然后打成JAR包放入需要他的项目中

<dependency>
             <groupId>com.lyt</groupId>
             <artifactId>lytJPush</artifactId>
             <version>0.0.1</version>
        </dependency>
//极光推送自定义消息
        String title = postInfoService.getPostById(postReview.getPostId()).getTitle();
        if(postReview.getParentId()!=null){
            String pUserId = postReviewDao.select(postReview.getParentId()).getUserId().toString();
            String userName = Base64Util.getFromBase64(userService.getUserInfo(postReview.getUserId()).getNickName());
            String[] alias = {pUserId};
            Map<String,String> parms = new HashMap<>(); 
            parms.put("userId", postReview.getUserId()+"");
            parms.put("postId", postReview.getPostId()+"");
            parms.put("userName", userName);
            parms.put("title", title+"");
            parms.put("type","5");
            try { 
                PushPayload data = MsgPushUtils.sendAndroidAndIosMessageWithAliasAndExtras("10",parms,PushConstant.getModelReviewReply(title), "回复了您的评论", alias);
                MsgPushUtils.sendPush(data);
            } catch (APIConnectionException e) {
                log.error("Connection error. Should retry later. ", e);
            } catch (APIRequestException e) {
                log.error("Error response from JPush server. Should review and fix it. ", e);
                log.info("HTTP Status: " + e.getStatus());
                log.info("Error Code: " + e.getErrorCode());
                log.info("Error Message: " + e.getErrorMessage());
            }
        }

注意:setApnsProduction(false)

IOS开发者模式的话这个不关闭是搜不到消息的,IOS对应的值 该为YES
至于安卓则没有这方面的限制

还有很多设置提示背景音乐啊什么的这个没深入研究也就没弄。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值