极光推送工具类

所选依赖:

<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);
} 

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容