JAVA SDK 极光推送后台DEMO

来源:互联网 发布:还珠格格知画怎么怀孕 编辑:程序博客网 时间:2024/06/01 09:05

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
至于安卓则没有这方面的限制

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

0 0
原创粉丝点击