美文网首页
极光推送工具类

极光推送工具类

作者: Y_LY | 来源:发表于2018-11-26 10:02 被阅读63次

    所选依赖:

    <dependency>
        <groupId>cn.jpush.api</groupId>
        <artifactId>jpush-client</artifactId>
        <version>3.3.2</version>
    </dependency>
    
    <dependency>
        <groupId>cn.jpush.api</groupId>
        <artifactId>jiguang-common</artifactId>
        <version>1.0.8</version>
    </dependency>
    

    工具类:
    一、

    package com.xxx.core.util.push.enums;

    /**

    • 配置枚举
    • -- 部署配置
    • @ClassName: DeployEnum
    • @DetaTime 2018-06-12 13:19:32
    • @author
      */
      public interface DeployEnum {}

    二、
    package com.xxx.core.util.push.enums.DeployEnum;

    import com.xxx.util.push.enums.DeployEnum;

    /**

    • 配置枚举 极光账号下应用的appkey和secret

    • -- 部署配置( 应用 )

    • @ClassName: JPushDeployEnum

    • @DetaTime 2018-06-12 13:19:32

    • @author
      */
      public enum JPushDeployEnum implements DeployEnum {

      /#################################配置的枚举(Start)#####################################/

      ANDROID1("xxxxxxxxxxxx", "xxxxxxxxxxxx"),
      IPHONE1("xxxxxxxxxxxx","xxxxxxxxxxxx"),
      ANDROID2("xxxxxxxxxxxx","xxxxxxxxxxxx"),
      IPHONE2("xxxxxxxxxxxx","xxxxxxxxxxxx");

      /#################################配置的枚举(end)#######################################/

      /**

      • 应用 Key
        */
        private String appKey;

      /**

      • 秘钥
      • -- 访问 AccessSecret
        */
        private String secret;

      public String getAppKey() {
      return appKey;
      }

      public void setAppKey(String appKey) {
      this.appKey = appKey;
      }

      public String getSecret() {
      return secret;
      }

      public void setSecret(String secret) {
      this.secret = secret;
      }

      JPushDeployEnum(String appKey, String secret) {
      this.appKey = appKey;
      this.secret = secret;
      }
      }

    三、
    package com.xxx.core.util.push.enums.jpush;

    /**

    • 环境枚举

    • -- APNs 环境

    • @ClassName: JPushEnvEnum

    • @DetaTime 2018-06-12 13:19:32

    • @author
      */
      public enum JPushEnvEnum {

      /#################################环境的枚举(Start)#####################################/

      Dev("开发环境", false),
      Product("生产环境", true);

      /#################################环境的枚举(end)#######################################/

      /**

      • 名称
        */
        private String name;

      /**

      • Env值
        */
        private Boolean value;

      public String getName() {
      return name;
      }

      public void setName(String name) {
      this.name = name;
      }

      public Boolean getValue() {
      return value;
      }

      public void setValue(Boolean value) {
      this.value = value;
      }

      JPushEnvEnum(String name, Boolean value) {
      this.name = name;
      this.value = value;
      }

      public static JPushEnvEnum obtainByEnv(String name) {
      for(JPushEnvEnum itemEnum : JPushEnvEnum.values()) {
      if(itemEnum.getName().equals(name)) {
      return itemEnum;
      }
      }
      return JPushEnvEnum.Product;
      }

    }
    四、
    package com.xxx.core.util.push.enums.jpush;

    /**

    • 类型枚举

    • -- 推送类型

    • @ClassName: JPushGenreEnum

    • @DetaTime 2018-06-12 13:19:32

    • @author
      */
      public enum JPushGenreEnum {

      /#################################类型的枚举(Start)#####################################/

      All("All", "通知和消息"),
      Message("MESSAGE", "消息"),
      Notice("NOTICE", "通知");

      /#################################类型的枚举(end)#######################################/

      /**

      • 标记
        */
        private String mark;

      /**

      • 描述
        */
        private String description;

      public String getMark() {
      return mark;
      }

      public void setMark(String mark) {
      this.mark = mark;
      }

      public String getDescription() {
      return description;
      }

      public void setDescription(String description) {
      this.description = description;
      }

      JPushGenreEnum(String mark, String description) {
      this.mark = mark;
      this.description = description;
      }

    }
    五、
    package com.xxx.core.util.push.enums.jpush;

    import cn.jpush.api.push.model.Platform;

    /**

    • 平台枚举

    • @ClassName: JPushPlatformEnum

    • @DetaTime 2018-06-12 13:19:32

    • @author
      */
      public enum JPushPlatformEnum {

      /#################################平台的枚举(Start)#####################################/

      All("All", Platform.all(), "全部平台"),
      IPhone("IPhone", Platform.ios(), "IPhone平台"),
      Android("Android", Platform.android(), "Android平台"),
      WindowsPhone("WindowsPhone", Platform.winphone(), "WindowsPhone平台"),
      AndroidAndIPhone("AndroidAndIPhone", Platform.android_ios(), "IPhone和Android平台"),
      IPhoneAndWindowsPhone("IPhoneAndWindowsPhone", Platform.ios_winphone(), "IPhone和WindowsPhone平台"),
      AndroidAndWindowsPhone("AndroidAndWindowsPhone", Platform.android_winphone(), "Android和WindowsPhone平台");

      /#################################平台的枚举(end)#######################################/

      /**

      • 标记
        */
        private String mark;

      /**

      • 名称
        */
        private Platform value;

      /**

      • 描述
        */
        private String description;

      public String getMark() {
      return mark;
      }

      public void setMark(String mark) {
      this.mark = mark;
      }

      public Platform getValue() {
      return value;
      }

      public void setValue(Platform value) {
      this.value = value;
      }

      public String getDescription() {
      return description;
      }

      public void setDescription(String description) {
      this.description = description;
      }

      JPushPlatformEnum(String mark, Platform value, String description) {
      this.mark = mark;
      this.value = value;
      this.description = description;
      }

    }

    六、
    package com.xxx.core.util.push.jpush;

    import cn.jiguang.common.ClientConfig;
    import cn.jpush.api.JPushClient;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    /**

    • BasePush

    • -- 极光推送

    • @ClassName: BasePush

    • @DetaTime 2018-06-12 13:19:32

    • @author
      */
      public class BasePush {

      /**

      • 日志工具
        */
        private static Logger logger = LoggerFactory.getLogger(BasePush.class);

      /**

      • 应用 Key
      • -- APP_KEY
        */
        protected static String APP_KEY;

      /**

      • 秘钥 Secret
      • -- MASTER_SECRET
        */
        protected static String MASTER_SECRET;

      /**

      • 默认 Acs 客户端
        */
        protected static JPushClient AcsClient;

      /**

      • 初始化 Client
      • @param key 应用 Key
      • @param secret 推送 Secret
        */
        public static void beforeClass(String key, String secret) {
        APP_KEY = key; MASTER_SECRET = secret;
        try {
        AcsClient = new JPushClient(MASTER_SECRET, APP_KEY, null, ClientConfig.getInstance());
        } catch (Exception error) {
        // 已使用 logger 打印 error , 关闭控制台打印堆栈信息
        error.printStackTrace();
        logger.error(error.getMessage(),error.getStackTrace());
        }
        }
        }
        七、
        package com.xxx.core.util.push.jpush;

    import cn.jiguang.common.resp.APIConnectionException;
    import cn.jiguang.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.PushPayload;
    import cn.jpush.api.push.model.audience.Audience;
    import cn.jpush.api.push.model.notification.*;
    import com.zsy.core.util.push.enums.jpush.JPushEnvEnum;
    import com.zsy.core.util.push.enums.jpush.JPushGenreEnum;
    import com.zsy.core.util.push.enums.jpush.JPushPlatformEnum;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    /**

    • PushTool

    • -- 极光推送

    • @ClassName: PushTool

    • @DetaTime 2018-06-12 13:19:32

    • @author
      */
      public class PushTool extends BasePush {

      /**

      • 日志工具
        */
        private static Logger logger = LoggerFactory.getLogger(PushTool.class);

      /**

      • 参数 key
      • -- Extra 可选参数 key
        */
        private static final String ExtraKey = "extras";

      /**

      • 高级 Push
      • -- 高级推送
      • @param title 标题
      • @param content 内容
      • @param extras 可选参数
      • -- 可选参数以 JSON 格式传入
      • @param envEnum 环境枚举
      • @param platformEnum 平台枚举
      • @param genreEnum 类型枚举
      • @param audience 推送目标
      • -- 推送目标参数类型是 JPush 官方 API Library(SDK) 提供的 Audience 类
      • @return 处理结果
        */
        public static PushResult AdvancedPush(String title, String content, String extras, JPushEnvEnum envEnum, JPushPlatformEnum platformEnum, JPushGenreEnum genreEnum, Audience audience) {
        PushResult result = null;
        try {
        if (AcsClient != null) {
        result = AcsClient.sendPush(BuildPushPayload(title, content, extras, envEnum, platformEnum, genreEnum, audience));
        } else {
        throw new NullPointerException("Initialize AcsClient :: Acs 客户端空指针错误 , 请检查并修复 :: 检查是否初始化");
        }
        } catch (APIConnectionException error) {
        // 已使用 logger 打印 error , 关闭控制台打印堆栈信息
        error.printStackTrace();
        logger.error("高级 Push :: 连接错误 , 请稍后重试", error, PushTool.class);
        } catch (APIRequestException error) {
        // 已使用 logger 打印 error , 关闭控制台打印堆栈信息
        error.printStackTrace();
        //logger.error(ExceptionTools.FormatException("高级 Push :: 请求错误 , 请检查错误并修复请求", error, PushTool.class), error);
        logger.info("高级 Push :: HTTP Error Code : {} , Error Message : {}", PushTool.class);
        } catch (IllegalArgumentException error) {
        // 已使用 logger 打印 error , 关闭控制台打印堆栈信息
        error.printStackTrace();
        logger.error("高级 Push :: Payload 错误 , 请检查错误并修复 Push", error, PushTool.class);
        } catch (Exception error) {
        // 已使用 logger 打印 error , 关闭控制台打印堆栈信息
        error.printStackTrace();
        logger.error("高级 Push :: Push 错误 , 请检查错误并修复 Push", error, PushTool.class);
        }
        return result;
        }

      /**

      • 构建 Payload

      • -- 推送 : Push

      • @param title 标题

      • @param content 内容

      • @param extras 可选参数

      • -- 可选参数以 JSON 格式传入

      • @param envEnum 环境枚举

      • @param platformEnum 平台枚举

      • @param genreEnum 类型枚举

      • @param audience 推送目标

      • -- 推送目标参数类型是 JPush 官方 API Library(SDK) 提供的 Audience 类

      • @return 处理结果
        */
        private static PushPayload BuildPushPayload(String title, String content, String extras, JPushEnvEnum envEnum, JPushPlatformEnum platformEnum, JPushGenreEnum genreEnum, Audience audience) {

        /**
        *( 创建 )推送 Payload

        • -- 变量
          */
          PushPayload.Builder payload = PushPayload.newBuilder();

        /**

        • 设置平台
        • -- Platform : 推送平台
          */
          payload.setPlatform(platformEnum.getValue());

        /**

        • 设置目标
        • -- Audience : 推送目标
          */
          payload.setAudience(audience);

        /**

        • 设置通知
        • -- Notification : 通知
          */
          payload.setNotification(((JPushGenreEnum.All.equals(genreEnum) || JPushGenreEnum.Notice.equals(genreEnum)) ? BuildNotificationPayload(title, content, extras, platformEnum) : null));

        /**

        • 设置消息
        • -- Message : 消息
          */
          payload.setMessage(((JPushGenreEnum.All.equals(genreEnum) || JPushGenreEnum.Message.equals(genreEnum)) ? BuildMessagePayload(title, content, extras) : null));

        /**

        • 设置补充
        • -- SMS : 短信补充
          */
          // payload.setSMS(null);

        /**

        • 设置参数
        • -- Options : 可选参数
          */
          payload.setOptions(BuildOptionsPayload(envEnum));

        /**

        • 设置识符
        • -- Cid : 推送唯一标识符
          */
          // payload.setCid(null);

        /**

        • 构建返回
          */
          return payload.build();
          }

      /**

      • 构建 Payload

      • -- 通知 : Notification

      • @param title 标题

      • @param content 内容

      • @param extras 可选参数

      • -- 可选参数以 JSON 格式传入

      • @param platformEnum 平台枚举

      • @return 处理结果
        */
        private static Notification BuildNotificationPayload(String title, String content, String extras, JPushPlatformEnum platformEnum) {

        /**
        *( 创建 )通知 Payload

        • -- 变量
          */
          Notification.Builder notification = Notification.newBuilder();

        /** 设置 IPhone 平台 Notification : 通知 Payload /
        if(JPushPlatformEnum.IPhone.equals(platformEnum)) {
        notification.addPlatformNotification(BuildIPhoneNotificationPayload(content, extras));
        }
        /
        设置 Android 平台 Notification : 通知 Payload /
        else if (JPushPlatformEnum.Android.equals(platformEnum)) {
        notification.addPlatformNotification(BuildAndroidNotificationPayload(title, content, extras));
        }
        /
        设置 WindowsPhone 平台 Notification : 通知 Payload /
        else if (JPushPlatformEnum.WindowsPhone.equals(platformEnum)) {
        notification.addPlatformNotification(BuildWindowsPhoneNotificationPayload(title, content, extras));
        }
        /
        设置 IPhone 和 Android 平台 Notification : 通知 Payload /
        else if (JPushPlatformEnum.AndroidAndIPhone.equals(platformEnum)) {
        notification.addPlatformNotification(BuildIPhoneNotificationPayload(content, extras)).addPlatformNotification(BuildAndroidNotificationPayload(title, content, extras));
        }
        /
        设置 IPhone 和 WindowsPhone 平台 Notification : 通知 Payload /
        else if (JPushPlatformEnum.IPhoneAndWindowsPhone.equals(platformEnum)) {
        notification.addPlatformNotification(BuildIPhoneNotificationPayload(content, extras)).addPlatformNotification(BuildWindowsPhoneNotificationPayload(title, content, extras));
        }
        /
        设置 Android 和 WindowsPhone 平台 Notification : 通知 Payload /
        else if (JPushPlatformEnum.AndroidAndWindowsPhone.equals(platformEnum)) {
        notification.addPlatformNotification(BuildAndroidNotificationPayload(title, content, extras)).addPlatformNotification(BuildWindowsPhoneNotificationPayload(title, content, extras));
        }
        /
        设置 全部 平台 Notification : 通知 Payload **/
        else if (JPushPlatformEnum.All.equals(platformEnum)) {
        notification.addPlatformNotification(BuildIPhoneNotificationPayload(content, extras)).addPlatformNotification(BuildAndroidNotificationPayload(title, content, extras)).addPlatformNotification(BuildWindowsPhoneNotificationPayload(title, content, extras));
        } else {
        throw new IllegalArgumentException("Payload Notification :: 平台匹配错误 ,请检查错误并修复");
        }

        /**

        • 构建返回
          */
          return notification.build();
          }

      /**

      • 构建 Payload

      • -- 通知 : Notification : Android

      • @param title 标题

      • @param content 内容

      • @param extras 可选参数

      • -- 可选参数以 JSON 字符串格式传入

      • @return 处理结果
        */
        private static PlatformNotification BuildAndroidNotificationPayload(String title, String content, String extras) {

        /**
        *( 创建 )通知 Payload

        • -- 变量
          */
          AndroidNotification.Builder notification = AndroidNotification.newBuilder();

        /**

        • 设置内容 : 必填
        • -- 通知内容
        • --- 这里指定内容将会覆盖上级统一指定的 alert 信息 ,内容为空则不展示到通知栏.
        • --- 支持字符串形式也支持官方定义的 alert payload 结构.
          */
          notification.setAlert(content);

        /**

        • 设置标题 : 可选
        • -- 通知标题
        • --- 如果指定了 ,则通知里原来展示 App 名称的地方 ,将展示成这个字段.
          */
          notification.setTitle(title);

        /**

        • 设置样式Id : 可选
        • -- 通知栏样式Id
        • --- Android SDK 可设置通知栏样式 ,这里根据样式 Id 来指定该使用哪套样式.
          */
          // notification.setBuilderId(0);

        /**

        • 设置优先级 : 可选
        • -- 通知栏展示优先级
        • --- 默认为 0 ,范围为 -2 ~ 2 ,其他值将会被忽略而采用默认.
          */
          notification.setPriority(0);

        /**

        • 设置过滤或排序 : 可选
        • -- 通知栏条目过滤或排序
        • --- 完全依赖 rom 厂商对 category 的处理策略.
          */
          // notification.setCategory(null);

        /**

        • 设置样式类型 : 可选
        • -- 通知栏样式类型
        • --- 默认为 0 ,还有 1 ,2 ,3可选 ,用来指定选择哪种通知栏样式 ,其他值无效.
        • --- 有三种可选分别为 bigText = 1 ,Inbox = 2 ,bigPicture = 3.
          */
          notification.setStyle(0);

        /**

        • 设置提醒方式 : 可选
        • -- 通知提醒方式
        • --- 默认按照 -1 处理.
        • --- 可选范围为 -1 ~ 7.
        • --- 对应 Notification.DEFAULT_ALL = -1 或者 Notification.DEFAULT_SOUND = 1 ,Notification.DEFAULT_VIBRATE = 2 ,Notification.DEFAULT_LIGHTS = 4 的任意 "or" 组合.
          */
          notification.setAlertType(-1);

        /**

        • 设置通知栏样式 : 可选
        • -- 大文本通知栏样式
        • --- 当 style = 1 时可用 ,内容会被通知栏以大文本的形式展示出来.
        • --- 支持 api 16 以上的 rom.
          */
          // notification.setBigText(null);

        /**

        • 设置通知栏样式 : 可选
        • -- 文本条目通知栏样式
        • --- 当 style = 2 时可用 ,json 的每个 key 对应的 value 会被当作文本条目逐条展示.
        • --- 支持 api 16 以上的 rom.
          */
          // notification.setInbox(null);

        /**

        • 设置通知栏样式 : 可选
        • -- 大图片通知栏样式
        • --- 当 style = 3 时可用 ,可以是网络图片 url ,或本地图片的 path ,目前支持 *.jpg 和 *.png 后缀的图片 ,图片内容会被通知栏以大图片的形式展示出来.
        • --- 如果是 http/https 的 url 会自动下载 ,如果要指定开发者准备的本地图片就填 sdcard 的相对路径.
        • --- 支持 api 16 以上的 rom.
          */
          // notification.setBigPicPath(null);

        /**

        • 设置字段 : 可选
        • -- 附加字段
        • --- 当前要以 JSON 字符串格式传入
        • --- 这里自定义 Key / value 信息 ,以供业务使用.
          */
          notification.addExtra(ExtraKey, extras);

        /**

        • 构建返回
          */
          return notification.build();
          }

      /**

      • 构建 Payload

      • -- 通知 : Notification : IPhone

      • @param content 内容

      • @param extras 可选参数

      • -- 可选参数以 JSON 字符串格式传入

      • @return 处理结果
        */
        private static PlatformNotification BuildIPhoneNotificationPayload(String content, String extras) {

        /**
        *( 创建 )通知 Payload

        • -- 变量
          */
          IosNotification.Builder notification = IosNotification.newBuilder();

        /**

        • 设置内容 : 必填
        • -- 通知内容
        • --- 这里指定内容将会覆盖上级统一指定的 alert 信息 ,内容为空则不展示到通知栏.
        • --- 支持字符串形式也支持官方定义的 alert payload 结构.
          */
          notification.setAlert(content);

        /**

        • 设置声音 : 可选
        • -- 通知提示声音
        • --- 如果无此字段 ,则此消息无声音提示 ,有此字段 ,如果找到了指定的声音就播放该声音 ,否则播放默认声音.
        • --- 如果此字段为空字符串 ,iOS 7 为默认声音 ,iOS 8 及以上系统为无声音.( 消息 )
        • --- 说明:JPush 官方 API Library (SDK) 会默认填充声音字段 ,提供另外的方法关闭声音.
          */
          // notification.setSound(null);

        /**

        • 设置角标 : 可选
        • -- 应用角标
        • --- 如果不填 ,表示不改变角标数字 ,否则把角标数字改为指定的数字 ,为 0 表示清除.
        • --- JPush 官方 API Library(SDK) 会默认填充badge值为 "+1" ,详情参考:badge + 1.
          */
          // notification.setBadge(0);

        /**

        /**

        /**

        • 设置类别 : 可选
        • -- 设置 APNs payload 中的 "category" 字段值
        • --- IOS8 才支持.
          */
          // notification.setCategory(null);

        /**

        • 设置字段 : 可选
        • -- 附加字段
        • --- 当前要以 JSON 字符串格式传入
        • --- 这里自定义 Key / value 信息 ,以供业务使用.
          */
          notification.addExtra(ExtraKey, extras);

        /**

        • 构建返回
          */
          return notification.build();
          }

      /**

      • 构建 Payload

      • -- 通知 : Notification : Windows Phone

      • @param title 标题

      • @param content 内容

      • @param extras 可选参数

      • -- 可选参数以 JSON 字符串格式传入

      • @return 处理结果
        */
        private static PlatformNotification BuildWindowsPhoneNotificationPayload(String title, String content, String extras) {

        /**
        *( 创建 )通知 Payload

        • -- 变量
          */
          WinphoneNotification.Builder notification = WinphoneNotification.newBuilder();

        /**

        • 设置内容 : 必填
        • -- 通知内容
        • --- 会填充到 toast 类型 text2 字段上.
        • --- 这里指定内容将会覆盖上级统一指定的 alert 信息 ,内容为空则不展示到通知栏.
          */
          notification.setAlert(content);

        /**

        • 设置标题 : 可选
        • -- 通知标题
        • --- 会填充到 toast 类型 text1 字段上.
          */
          notification.setTitle(title);

        /**

        • 设置页面名称 : 可选
        • -- 点击打开的页面名称
        • --- 点击打开的页面 ,会填充到推送信息的 param 字段上 ,表示由哪个 App 页面打开该通知.
        • --- 可不填 ,则由默认的首页打开
          */
          // notification.setOpenPage(null);

        /**

        • 设置字段 : 可选
        • -- 扩展字段
        • --- 当前要以 JSON 字符串格式传入
        • --- 这里自定义 Key / value 信息 ,以供业务使用.
        • --- 作为参数附加到上述打开页面的后边.
          */
          notification.addExtra(ExtraKey, extras);

        /**

        • 构建返回
          */
          return notification.build();
          }

      /**

      • 构建 Payload

      • -- 消息 : Message

      • @param title 标题

      • @param content 内容

      • @param extras 可选参数

      • -- 可选参数以 JSON 字符串格式传入

      • @return 处理结果
        */
        private static Message BuildMessagePayload(String title, String content, String extras) {

        /**
        *( 创建 )消息 Payload

        • -- 变量
          */
          Message.Builder message = Message.newBuilder();

        /**

        • 设置标题 : 可选
        • -- 消息标题
          */
          message.setTitle(title);

        /**

        • 设置内容 : 必填
        • -- 消息内容
          */
          message.setMsgContent(content);

        /**

        • 设置类型 : 可选
        • -- 消息内容类型
          */
          // message.setContentType(null);

        /**

        • 设置参数 : 可选
        • -- JSON 字符串格式的可选参数
          */
          if (extras != null) {
          message.addExtra(ExtraKey, extras);
          }

        /**

        • 构建返回
          */
          return message.build();
          }

      /**

      • 构建 Payload

      • -- 可选参数 : Options

      • @param envEnum 环境枚举

      • @return 处理结果
        */
        private static Options BuildOptionsPayload(JPushEnvEnum envEnum) {

        /**
        *( 创建 )可选参数 Payload

        • -- 变量
          */
          Options.Builder options = Options.newBuilder();

        /**

        • 设置序号 : 可选
        • -- 推送序号
        • --- 纯粹用来作为 API 调用标识 ,API 返回时被原样返回 ,以方便 API 调用方匹配请求与返回.
        • --- 值为 0 表示该 messageid : 消息Id 无 sendno : 序号 ,所以字段取值范围为非 0 的 int.
          */
          // options.setSendno(0);

        /**

        • 设置时长( 秒 ): 可选
        • -- 离线消息保留时长( 秒 )
        • --- 当前 259200( 3天 ),最长 10 天.
        • --- 默认 86400( 1天 ),最长 10 天.
        • --- 推送当前用户不在线时 ,为该用户保留多长时间的离线消息 ,以便其上线时再次推送.
        • --- 设置为 0 表示不保留离线消息 ,只有推送当前在线的用户可以收到.
          */
          options.setTimeToLive(259200);

        /**

        • 设置消息Id : 可选
        • -- 要覆盖的消息Id
        • --- 如果当前的推送要覆盖之前的一条推送 ,这里填写前一条推送的 msg_id 就会产生覆盖效果.
        • --- 即:
        • --- 1 )该 msg_id 离线收到的消息是覆盖后的内容.
        • --- 2 )即使该 msg_id Android 端用户已经收到 ,如果通知栏还未清除 ,则新的消息内容会覆盖之前这条通知.
        • --- 覆盖功能起作用的时限是 :1 天 ,如果在覆盖指定时限内该 msg_id 不存在 ,则返回 1003 错误 ,提示不是一次有效的消息覆盖操作 ,当前的消息不会被推送.
          */
          // options.setOverrideMsgId(0);

        /**

        • 设置环境 : 可选
        • -- APNs 是否是生产环境
        • --- True 表示推送生产环境 ,False 表示要推送开发环境.
        • --- 如果不指定则为推送生产环境 ,JPush 服务端 SDK 默认设置为推送 "开发环境".
          */
          if (envEnum != null) {
          options.setApnsProduction(envEnum.getValue());
          }

        /**

        • 设置标识符 : 可选
        • -- 更新 iOS 通知的标识符
        • --- APNs 新通知如果匹配到当前通知中心有相同 apns-collapse-id 字段的通知 ,则会用新通知内容来更新它 ,并使其置于通知中心首位.
        • --- collapse id 长度不可超过 64 bytes.
          */
          // options.setApnsCollapseId(null);

        /**

        • 设置时长( 分钟 ): 可选
        • -- 定速推送时长( 分钟 )
        • --- 又名缓慢推送 ,把原本尽可能快的推送速度 ,降低下来,给定的 n 分钟内 ,均匀地向这次推送的目标用户推送.
        • --- 最大值为 1400. 未设置则不是定速推送.
          */
          // options.setBigPushDuration(0);

        /**

        • 构建返回
          */
          return options.build();
          }

    }
    八、
    package com.xxx.core.util.push;

    import cn.jpush.api.push.PushResult;
    import cn.jpush.api.push.model.audience.Audience;
    import com.zsy.core.util.push.enums.jpush.JPushDeployEnum;
    import com.zsy.core.util.push.enums.jpush.JPushEnvEnum;
    import com.zsy.core.util.push.enums.jpush.JPushGenreEnum;
    import com.zsy.core.util.push.enums.jpush.JPushPlatformEnum;
    import com.zsy.core.util.push.jpush.PushTool;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    /**

    • 推送工具

    • -- 极光推送

    • @ClassName: JPushTools

    • @DetaTime 2018-06-12 13:19:32

    • @author
      */
      public class JPushTools {

      /**

      • 日志工具
        */
        private static Logger logger = LoggerFactory.getLogger(JPushTools.class);

      /**

      • 推送 Android
      • -- 根据类型 : 类型枚举
      • @param title 标题
      • @param content 内容
      • @param extras 可选参数
      • -- 可选参数以 JSON 格式传入
      • @param envEnum 环境枚举
      • @param genreEnum 类型枚举
      • @param audience 推送目标
      • -- 推送目标参数类型是 JPush 官方 API Library(SDK) 提供的 Audience 类
        */
        public static String PushGiveAndroid(String title, String content, String extras, JPushEnvEnum envEnum, JPushGenreEnum genreEnum, Audience audience) {
        String result = null;
        PushResult results = PushTool.AdvancedPush(title, content, extras, envEnum, JPushPlatformEnum.Android, genreEnum, audience);
        if (results != null) {
        result = String.valueOf(results.msg_id);
        } else {
        //logger.error(ExceptionTools.FormatException("推送 Android 错误 :: 根据类型 : 类型枚举 , 请检查错误并修复请求", JPushTools.class));
        }
        return result;
        }

      /**

      • 推送 Android
      • -- 消息 And 通知
      • @param title 标题
      • @param content 内容
      • @param extras 可选参数
      • -- 可选参数以 JSON 格式传入
      • @param envEnum 环境枚举
      • @param audience 推送目标
      • -- 推送目标参数类型是 JPush 官方 API Library(SDK) 提供的 Audience 类
        */
        public static String PushGiveAndroid(String title, String content, String extras, JPushEnvEnum envEnum, Audience audience) {
        String result = null;
        PushResult results = PushTool.AdvancedPush(title, content, extras, envEnum, JPushPlatformEnum.Android, JPushGenreEnum.All, audience);
        if (results != null) {
        result = String.valueOf(results.msg_id);
        } else {
        //logger.error(ExceptionTools.FormatException("推送 Android 错误 :: 消息 And 通知 , 请检查错误并修复请求", JPushTools.class));
        }
        return result;
        }

      /**

      • 推送 Android
      • -- 消息
      • @param title 标题
      • @param content 内容
      • @param extras 可选参数
      • -- 可选参数以 JSON 格式传入
      • @param envEnum 环境枚举
      • @param audience 推送目标
      • -- 推送目标参数类型是 JPush 官方 API Library(SDK) 提供的 Audience 类
        */
        public static String PushMessageGiveAndroid(String title, String content, String extras, JPushEnvEnum envEnum, Audience audience) {
        String result = null;
        PushResult results = PushTool.AdvancedPush(title, content, extras, envEnum, JPushPlatformEnum.Android, JPushGenreEnum.Message, audience);
        if (results != null) {
        result = String.valueOf(results.msg_id);
        } else {
        logger.error("推送 Android 错误 :: 消息 , 请检查错误并修复请求", JPushTools.class);
        }
        return result;
        }

      /**

      • 推送 Android
      • -- 通知
      • @param title 标题
      • @param content 内容
      • @param extras 可选参数
      • -- 可选参数以 JSON 格式传入
      • @param envEnum 环境枚举
      • @param audience 推送目标
      • -- 推送目标参数类型是 JPush 官方 API Library(SDK) 提供的 Audience 类
        */
        public static String PushNotificationGiveAndroid(String title, String content, String extras, JPushEnvEnum envEnum, Audience audience) {
        String result = null;
        PushResult results = PushTool.AdvancedPush(title, content, extras, envEnum, JPushPlatformEnum.Android, JPushGenreEnum.Notice, audience);
        if (results != null) {
        result = String.valueOf(results.msg_id);
        } else {
        logger.error("推送 Android 错误 :: 通知 , 请检查错误并修复请求", JPushTools.class);
        }
        return result;
        }

      /**

      • 推送 IPhone
      • -- 根据类型 : 类型枚举
      • @param title 标题
      • @param content 内容
      • @param extras 可选参数
      • -- 可选参数以 JSON 格式传入
      • @param envEnum 环境枚举
      • @param genreEnum 类型枚举
      • @param audience 推送目标
      • -- 推送目标参数类型是 JPush 官方 API Library(SDK) 提供的 Audience 类
        */
        public static String PushGiveIPhone(String title, String content, String extras, JPushEnvEnum envEnum, JPushGenreEnum genreEnum, Audience audience) {
        String result = null;
        PushResult results = PushTool.AdvancedPush(title, content, extras, envEnum, JPushPlatformEnum.IPhone, genreEnum, audience);
        if (results != null) {
        result = String.valueOf(results.msg_id);
        } else {
        logger.error("推送 IPhone 错误 :: 根据类型 : 类型枚举 , 请检查错误并修复请求", JPushTools.class);
        }
        return result;
        }

      /**

      • 推送 IPhone
      • -- 消息 And 通知
      • @param title 标题
      • @param content 内容
      • @param extras 可选参数
      • -- 可选参数以 JSON 格式传入
      • @param envEnum 环境枚举
      • @param audience 推送目标
      • -- 推送目标参数类型是 JPush 官方 API Library(SDK) 提供的 Audience 类
        */
        public static String PushGiveIPhone(String title, String content, String extras, JPushEnvEnum envEnum, Audience audience) {
        String result = null;
        PushResult results = PushTool.AdvancedPush(title, content, extras, envEnum, JPushPlatformEnum.IPhone, JPushGenreEnum.All, audience);
        if (results != null) {
        result = String.valueOf(results.msg_id);
        } else {
        logger.error("推送 IPhone 错误 :: 消息 And 通知 , 请检查错误并修复请求", JPushTools.class);
        }
        return result;
        }

      /**

      • 推送 IPhone
      • -- 消息
      • @param title 标题
      • @param content 内容
      • @param extras 可选参数
      • -- 可选参数以 JSON 格式传入
      • @param envEnum 环境枚举
      • @param audience 推送目标
      • -- 推送目标参数类型是 JPush 官方 API Library(SDK) 提供的 Audience 类
        */
        public static String PushMessageGiveIPhone(String title, String content, String extras, JPushEnvEnum envEnum, Audience audience) {
        String result = null;
        PushResult results = PushTool.AdvancedPush(title, content, extras, envEnum, JPushPlatformEnum.IPhone, JPushGenreEnum.Message, audience);
        if (results != null) {
        result = String.valueOf(results.msg_id);
        } else {
        logger.error("推送 IPhone 错误 :: 消息 , 请检查错误并修复请求", JPushTools.class);
        }
        return result;
        }

      /**

      • 推送 IPhone
      • -- 通知
      • @param title 标题
      • @param content 内容
      • @param extras 可选参数
      • -- 可选参数以 JSON 格式传入
      • @param envEnum 环境枚举
      • @param audience 推送目标
      • -- 推送目标参数类型是 JPush 官方 API Library(SDK) 提供的 Audience 类
        */
        public static String PushNotificationGiveIPhone(String title, String content, String extras, JPushEnvEnum envEnum, Audience audience) {
        String result = null;
        PushResult results = PushTool.AdvancedPush(title, content, extras, envEnum, JPushPlatformEnum.IPhone, JPushGenreEnum.Notice, audience);
        if (results != null) {
        result = String.valueOf(results.msg_id);
        } else {
        logger.error("推送 IPhone 错误 :: 通知 , 请检查错误并修复请求", JPushTools.class);
        }
        return result;
        }

      /**

      • 推送 Android And IPhone
      • -- 根据类型 : 类型枚举
      • @param title 标题
      • @param content 内容
      • @param extras 可选参数
      • -- 可选参数以 JSON 格式传入
      • @param envEnum 环境枚举
      • @param genreEnum 类型枚举
      • @param audience 推送目标
      • -- 推送目标参数类型是 JPush 官方 API Library(SDK) 提供的 Audience 类
        */
        public static String PushGiveAndroidAndIPhone(String title, String content, String extras, JPushEnvEnum envEnum, JPushGenreEnum genreEnum, Audience audience) {
        String result = null;
        PushResult results = PushTool.AdvancedPush(title, content, extras, envEnum, JPushPlatformEnum.AndroidAndIPhone, genreEnum, audience);
        if (results != null) {
        result = String.valueOf(results.msg_id);
        } else {
        logger.error("推送 Android And IPhone 错误 :: 根据类型 : 类型枚举 , 请检查错误并修复请求", JPushTools.class);
        }
        return result;
        }

      /**

      • 推送 Android And IPhone
      • -- 消息 And 通知
      • @param title 标题
      • @param content 内容
      • @param extras 可选参数
      • -- 可选参数以 JSON 格式传入
      • @param envEnum 环境枚举
      • @param audience 推送目标
      • -- 推送目标参数类型是 JPush 官方 API Library(SDK) 提供的 Audience 类
        */
        public static String PushGiveAndroidAndIPhone(String title, String content, String extras, JPushEnvEnum envEnum, Audience audience) {
        String result = null;
        PushResult results = PushTool.AdvancedPush(title, content, extras, envEnum, JPushPlatformEnum.AndroidAndIPhone, JPushGenreEnum.All, audience);
        if (results != null) {
        result = String.valueOf(results.msg_id);
        } else {
        logger.error("推送 Android And IPhone 错误 :: 消息 And 通知 , 请检查错误并修复请求", JPushTools.class);
        }
        return result;
        }

      /**

      • 推送 Android And IPhone
      • -- 消息
      • @param title 标题
      • @param content 内容
      • @param extras 可选参数
      • -- 可选参数以 JSON 格式传入
      • @param envEnum 环境枚举
      • @param audience 推送目标
      • -- 推送目标参数类型是 JPush 官方 API Library(SDK) 提供的 Audience 类
        */
        public static String PushMessageGiveAndroidAndIPhone(String title, String content, String extras, JPushEnvEnum envEnum, Audience audience) {
        String result = null;
        PushResult results = PushTool.AdvancedPush(title, content, extras, envEnum, JPushPlatformEnum.AndroidAndIPhone, JPushGenreEnum.Message, audience);
        if (results != null) {
        result = String.valueOf(results.msg_id);
        } else {
        logger.error("推送 Android And IPhone 错误 :: 消息 , 请检查错误并修复请求", JPushTools.class);
        }
        return result;
        }

      /**

      • 推送 Android And IPhone
      • -- 通知
      • @param title 标题
      • @param content 内容
      • @param extras 可选参数
      • -- 可选参数以 JSON 格式传入
      • @param envEnum 环境枚举
      • @param audience 推送目标
      • -- 推送目标参数类型是 JPush 官方 API Library(SDK) 提供的 Audience 类
        */
        public static String PushNotificationGiveAndroidAndIPhone(String title, String content, String extras, JPushEnvEnum envEnum, Audience audience) {
        String result = null;
        PushResult results = PushTool.AdvancedPush(title, content, extras, envEnum, JPushPlatformEnum.AndroidAndIPhone, JPushGenreEnum.Notice, audience);
        if (results != null) {
        result = String.valueOf(results.msg_id);
        } else {
        logger.error("推送 Android And IPhone 错误 :: 通知 , 请检查错误并修复请求", JPushTools.class);
        }
        return result;
        }

      /**

      • 高级 Push
      • -- 高级推送 : 根据类型 : 类型枚举
      • @param title 标题
      • @param content 内容
      • @param extras 可选参数
      • -- 可选参数以 JSON 格式传入
      • @param envEnum 环境枚举
      • @param platformEnum 平台枚举
      • @param genreEnum 类型枚举
      • @param audience 推送目标
      • -- 推送目标参数类型是 JPush 官方 API Library(SDK) 提供的 Audience 类
        */
        public static String AdvancedPush(String title, String content, String extras, JPushEnvEnum envEnum, JPushPlatformEnum platformEnum, JPushGenreEnum genreEnum, Audience audience) {
        String result = null;
        PushResult results = PushTool.AdvancedPush(title, content, extras, envEnum, platformEnum, genreEnum, audience);
        if (results != null) {
        result = String.valueOf(results.msg_id);
        } else {
        logger.error("高级 Push 错误 :: 根据类型 : 类型枚举 , 请检查错误并修复请求", JPushTools.class);
        }
        return result;
        }

      /**

      • 高级 Push
      • -- 高级推送 : 消息 And 通知
      • @param title 标题
      • @param content 内容
      • @param extras 可选参数
      • -- 可选参数以 JSON 格式传入
      • @param envEnum 环境枚举
      • @param platformEnum 平台枚举
      • @param audience 推送目标
      • -- 推送目标参数类型是 JPush 官方 API Library(SDK) 提供的 Audience 类
        */
        public static String AdvancedPush(String title, String content, String extras, JPushEnvEnum envEnum, JPushPlatformEnum platformEnum, Audience audience) {
        String result = null;
        PushResult results = PushTool.AdvancedPush(title, content, extras, envEnum, platformEnum, JPushGenreEnum.All, audience);
        if (results != null) {
        result = String.valueOf(results.msg_id);
        } else {
        logger.error("高级 Push 错误 :: 消息 And 通知 , 请检查错误并修复请求", JPushTools.class);
        }
        return result;
        }
    /**
     * 高级 Push
     * -- 高级推送 : 消息
     * @param title 标题
     * @param content 内容
     * @param extras 可选参数
     * -- 可选参数以 JSON 格式传入
     * @param envEnum 环境枚举
     * @param platformEnum 平台枚举
     * @param audience 推送目标
     * -- 推送目标参数类型是 JPush 官方 API Library(SDK) 提供的 Audience 类
     */
    public static String AdvancedPushMessage(String title, String content, String extras, JPushEnvEnum envEnum, JPushPlatformEnum platformEnum, Audience audience) {
        String result = null;
        PushResult results = PushTool.AdvancedPush(title, content, extras, envEnum, platformEnum, JPushGenreEnum.Message, audience);
        if (results != null) {
            result = String.valueOf(results.msg_id);
        } else {
            logger.error("高级 Push 错误 :: 消息 , 请检查错误并修复请求", JPushTools.class);
        }
        return result;
    }
    
    /**
     * 高级 Push
     * -- 高级推送 : 通知
     * @param title 标题
     * @param content 内容
     * @param extras 可选参数
     * -- 可选参数以 JSON 格式传入
     * @param envEnum 环境枚举
     * @param platformEnum 平台枚举
     * @param audience 推送目标
     * -- 推送目标参数类型是 JPush 官方 API Library(SDK) 提供的 Audience 类
     */
    public static String AdvancedPushNotification(String title, String content, String extras, JPushEnvEnum envEnum, JPushPlatformEnum platformEnum, Audience audience) {
        String result = null;
        PushResult results = PushTool.AdvancedPush(title, content, extras, envEnum, platformEnum, JPushGenreEnum.Notice, audience);
        if (results != null) {
            result = String.valueOf(results.msg_id);
        } else {
            logger.error("高级 Push 错误 :: 通知 , 请检查错误并修复请求", JPushTools.class);
        }
        return result;
    }
    
    /**
     * 初始化 Client
     * @param key 应用 Key
     * @param secret 秘钥 : 访问 AccessSecret
     */
    public static void beforeClass(String key, String secret) {
        PushTool.beforeClass(key, secret);
    } 
    

    }

    相关文章

      网友评论

          本文标题:极光推送工具类

          本文链接:https://www.haomeiwen.com/subject/knuvqqtx.html