所选依赖:
<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;
}
} - 应用 Key
三、
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);
/**
- 设置唤醒 : 可选
- -- 推送唤醒
- --- 推送的时候携带 "content-available" : true 说明是 Background Remote Notification.
- --- 如果不携带此字段则是普通的 Remote Notification.
- --- 详情参考:
- --- Background Remote Notification : https://docs.jiguang.cn/jpush/client/iOS/ios_new_fetures/#ios-7-background-remote-notification.
*/
// notification.setContentAvailable(false);
/**
- 设置扩展 : 可选
- -- 通知扩展
- --- 推送的时候携带 "mutable-content" : true 说明是支持 iOS10 的 UNNotificationServiceExtension.
- --- 如果不携带此字段则是普通的 Remote Notification.
- --- 详情参考:
- --- UNNotificationServiceExtension : https://docs.jiguang.cn/jpush/client/iOS/ios_new_fetures/#ios-10-service-extension.
*/
// notification.setMutableContent(false);
/**
- 设置类别 : 可选
- -- 设置 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);
}
}