package cn.gistack.alerts.push.utils;
|
|
import com.alibaba.csp.sentinel.util.IdUtil;
|
import com.getui.push.v2.sdk.api.PushApi;
|
import com.getui.push.v2.sdk.common.ApiResult;
|
import com.getui.push.v2.sdk.dto.req.Audience;
|
import com.getui.push.v2.sdk.dto.req.Settings;
|
import com.getui.push.v2.sdk.dto.req.Strategy;
|
import com.getui.push.v2.sdk.dto.req.message.PushBatchDTO;
|
import com.getui.push.v2.sdk.dto.req.message.PushChannel;
|
import com.getui.push.v2.sdk.dto.req.message.PushDTO;
|
import com.getui.push.v2.sdk.dto.req.message.PushMessage;
|
import com.getui.push.v2.sdk.dto.req.message.android.AndroidDTO;
|
import com.getui.push.v2.sdk.dto.req.message.android.GTNotification;
|
import com.getui.push.v2.sdk.dto.req.message.android.ThirdNotification;
|
import com.getui.push.v2.sdk.dto.req.message.android.Ups;
|
import com.getui.push.v2.sdk.dto.req.message.ios.Alert;
|
import com.getui.push.v2.sdk.dto.req.message.ios.Aps;
|
import com.getui.push.v2.sdk.dto.req.message.ios.IosDTO;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.Resource;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.UUID;
|
|
@Slf4j
|
@Component
|
public class GeTuiUtils {
|
|
@Resource(name = "myPushApi")
|
private PushApi myPushApi;
|
|
private final String APP_PACKAGE_NAME = "com.hubei.jingchuReservoir";
|
|
/**
|
* 单点推送(离线不推送)
|
*
|
* @param cid 目标
|
* @param title 标题
|
* @param content 内容
|
*/
|
public void pushMsg(String cid, String title, String content) {
|
//根据cid进行单推
|
PushDTO<Audience> pushDTO = new PushDTO<>();
|
// 设置推送参数
|
pushDTO.setRequestId(UUID.randomUUID().toString());
|
// 个推推送消息参数
|
PushMessage pushMessage = new PushMessage();
|
pushDTO.setPushMessage(pushMessage);
|
/** 带跳转url*/
|
// GTNotification notification = new GTNotification();
|
// pushMessage.setNotification(notification);
|
// notification.setTitle(title + new Date());
|
// notification.setBody(content);
|
// notification.setClickType("url");
|
// notification.setUrl("https://www.baidu.com");// 跳转地址
|
/** 不带跳转url*/
|
pushMessage.setTransmission(" {title:\"" + title + "\",content:\"" + content + "\",payload:\"自定义数据\"}");
|
pushDTO.setPushMessage(pushMessage);
|
// 设置接收人信息
|
Audience audience = new Audience();
|
pushDTO.setAudience(audience);
|
audience.addCid(cid);
|
// 进行cid单推
|
ApiResult<Map<String, Map<String, String>>> apiResult = myPushApi.pushToSingleByCid(pushDTO);
|
if (apiResult.isSuccess()) {
|
// success
|
System.out.println(apiResult.getData());
|
} else {
|
// failed
|
System.out.println("code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());
|
}
|
}
|
|
/**
|
* 推送给多个
|
*
|
* @param cids 目标集
|
* @param title 标题
|
* @param content 内容
|
*/
|
public Boolean pushMsg(List<String> cids, String title, String content) {
|
List<PushDTO<Audience>> list = new ArrayList<>(cids.size());
|
cids.forEach(cid -> {
|
PushDTO<Audience> pushDTO = new PushDTO<>();
|
// 唯一标识
|
pushDTO.setRequestId(UUID.randomUUID().toString());
|
// 消息内容
|
PushMessage pushMessage = new PushMessage();
|
pushMessage.setNetworkType(0);
|
// 透传消息内容
|
// pushMessage.setTransmission(" {title:\"" + title + "\",content:\"" + content + "\",payload:\"自定义数据\"}");
|
|
GTNotification gtNotification = new GTNotification();
|
pushMessage.setNotification(gtNotification);
|
gtNotification.setTitle(title);
|
gtNotification.setBody(content);
|
gtNotification.setClickType("none");
|
|
|
pushDTO.setPushMessage(pushMessage);
|
// 消息接受人
|
Audience audience = new Audience();
|
audience.addCid(cid);
|
pushDTO.setAudience(audience);
|
list.add(pushDTO);
|
});
|
PushBatchDTO pushBatchDTO = new PushBatchDTO();
|
pushBatchDTO.setAsync(true);
|
pushBatchDTO.setMsgList(list);
|
ApiResult<Map<String, Map<String, String>>> mapApiResult = myPushApi.pushBatchByCid(pushBatchDTO);
|
if (mapApiResult.isSuccess()) {
|
// success
|
System.out.println(mapApiResult.getData());
|
} else {
|
// failed
|
System.out.println("code:" + mapApiResult.getCode() + ", msg: " + mapApiResult.getMsg());
|
}
|
|
return mapApiResult.isSuccess();
|
|
}
|
|
/**
|
* 消息推送(离线推送)
|
*
|
* @param cid 目标
|
* @param title 标题
|
* @param content 内容
|
*/
|
public void offlinePushMsg(String cid, String title, String content) {
|
//根据cid进行单推
|
PushDTO<Audience> pushDTO = new PushDTO<>();
|
// 设置推送参数
|
pushDTO.setRequestId(System.currentTimeMillis() + "");//requestid需要每次变化唯一
|
//配置推送条件
|
// 1: 表示该消息在用户在线时推送个推通道,用户离线时推送厂商通道;
|
// 2: 表示该消息只通过厂商通道策略下发,不考虑用户是否在线;
|
// 3: 表示该消息只通过个推通道下发,不考虑用户是否在线;
|
// 4: 表示该消息优先从厂商通道下发,若消息内容在厂商通道代发失败后会从个推通道下发。
|
Strategy strategy = new Strategy();
|
strategy.setDef(1);
|
Settings settings = new Settings();
|
settings.setStrategy(strategy);
|
pushDTO.setSettings(settings);
|
settings.setTtl(3600000);//消息有效期,走厂商消息需要设置该值
|
//推送苹果离线通知标题内容
|
Alert alert = new Alert();
|
alert.setTitle(title);//苹果离线通知栏标题
|
alert.setBody(content);//苹果离线通知栏内容
|
Aps aps = new Aps();
|
//1表示静默推送(无通知栏消息),静默推送时不需要填写其他参数。
|
//苹果建议1小时最多推送3条静默消息
|
aps.setContentAvailable(0);
|
aps.setSound("default");
|
aps.setAlert(alert);
|
IosDTO iosDTO = new IosDTO();
|
iosDTO.setAps(aps);
|
iosDTO.setType("notify");
|
|
|
PushChannel pushChannel = new PushChannel();
|
pushChannel.setIos(iosDTO);
|
//安卓离线厂商通道推送消息体
|
PushChannel pushChannel1 = new PushChannel();
|
AndroidDTO androidDTO = new AndroidDTO();
|
Ups ups = new Ups();
|
ThirdNotification notification1 = new ThirdNotification();
|
ups.setNotification(notification1);
|
notification1.setTitle(title);//安卓离线展示的标题
|
notification1.setBody(content);//安卓离线展示的内容
|
notification1.setClickType("intent");
|
notification1.setIntent("intent:#Intent;launchFlags=0x04000000;action=android.intent.action.oppopush;component=io.dcloud.HBuilder/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end");
|
//各厂商自有功能单项设置
|
//ups.addOption("HW", "/message/android/notification/badge/class", "io.dcloud.PandoraEntry ");
|
//ups.addOption("HW", "/message/android/notification/badge/add_num", 1);
|
//ups.addOption("HW", "/message/android/notification/importance", "HIGH");
|
//ups.addOption("VV","classification",1);
|
androidDTO.setUps(ups);
|
pushChannel1.setAndroid(androidDTO);
|
pushDTO.setPushChannel(pushChannel1);
|
|
// PushMessage在线走个推通道才会起作用的消息体
|
PushMessage pushMessage = new PushMessage();
|
pushDTO.setPushMessage(pushMessage);
|
pushMessage.setTransmission(" {title:\"" + title + "\",content:\"" + content + "\",payload:\"自定义数据\"}");
|
// 设置接收人信息
|
Audience audience = new Audience();
|
pushDTO.setAudience(audience);
|
audience.addCid(cid);// cid
|
// 进行cid单推
|
ApiResult<Map<String, Map<String, String>>> apiResult = myPushApi.pushToSingleByCid(pushDTO);
|
if (apiResult.isSuccess()) {
|
// success
|
System.out.println(apiResult.getData());
|
} else {
|
// failed
|
System.out.println("code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());
|
}
|
}
|
|
/**
|
* 官方api案例
|
*/
|
public void offlinePushMsg1() {
|
//根据cid进行单推
|
PushDTO<Audience> pushDTO = new PushDTO<Audience>();
|
// 设置推送参数
|
pushDTO.setRequestId(System.currentTimeMillis() + "");
|
/**** 设置个推通道参数 *****/
|
PushMessage pushMessage = new PushMessage();
|
pushDTO.setPushMessage(pushMessage);
|
GTNotification notification = new GTNotification();
|
pushMessage.setNotification(notification);
|
notification.setTitle("个title");
|
notification.setBody("个body");
|
notification.setClickType("url");
|
notification.setUrl("https://www.getui.com");
|
/**** 设置个推通道参数,更多参数请查看文档或对象源码 *****/
|
|
/**** 设置厂商相关参数 ****/
|
PushChannel pushChannel = new PushChannel();
|
pushDTO.setPushChannel(pushChannel);
|
/*配置安卓厂商参数*/
|
AndroidDTO androidDTO = new AndroidDTO();
|
pushChannel.setAndroid(androidDTO);
|
Ups ups = new Ups();
|
androidDTO.setUps(ups);
|
ThirdNotification thirdNotification = new ThirdNotification();
|
ups.setNotification(thirdNotification);
|
thirdNotification.setTitle("厂商title");
|
thirdNotification.setBody("厂商body");
|
thirdNotification.setClickType("url");
|
thirdNotification.setUrl("https://www.getui.com");
|
// 两条消息的notify_id相同,新的消息会覆盖老的消息,取值范围:0-2147483647
|
// thirdNotification.setNotifyId("11177");
|
/*配置安卓厂商参数结束,更多参数请查看文档或对象源码*/
|
|
/*设置ios厂商参数*/
|
IosDTO iosDTO = new IosDTO();
|
pushChannel.setIos(iosDTO);
|
// 相同的collapseId会覆盖之前的消息
|
iosDTO.setApnsCollapseId("xxx");
|
Aps aps = new Aps();
|
iosDTO.setAps(aps);
|
Alert alert = new Alert();
|
aps.setAlert(alert);
|
alert.setTitle("通知消息标题");
|
alert.setBody("通知消息内容");
|
/*设置ios厂商参数结束,更多参数请查看文档或对象源码*/
|
|
/*设置接收人信息*/
|
Audience audience = new Audience();
|
pushDTO.setAudience(audience);
|
audience.addCid("xxx");
|
/*设置接收人信息结束*/
|
/**** 设置厂商相关参数,更多参数请查看文档或对象源码 ****/
|
|
// 进行cid单推
|
ApiResult<Map<String, Map<String, String>>> apiResult = myPushApi.pushToSingleByCid(pushDTO);
|
if (apiResult.isSuccess()) {
|
// success
|
System.out.println(apiResult.getData());
|
} else {
|
// failed
|
System.out.println("code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());
|
}
|
}
|
|
/**
|
* 自定义消息批量推送,支持离线和在线推送
|
* @param cids
|
* @param title
|
* @param content
|
*/
|
public Boolean myPushMessage(List<String> cids,String title,String content){
|
List<PushDTO<Audience>> list = new ArrayList<>(cids.size());
|
cids.forEach(cid -> {
|
PushDTO<Audience> pushDTO = new PushDTO<>();
|
/**设置个推通道**/
|
// 唯一标识
|
pushDTO.setRequestId(UUID.randomUUID().toString());
|
// 消息内容
|
PushMessage pushMessage = new PushMessage();
|
//0无限制、1仅wifi
|
pushMessage.setNetworkType(0);
|
|
GTNotification gtNotification = new GTNotification();
|
pushMessage.setNotification(gtNotification);
|
gtNotification.setTitle(title);
|
gtNotification.setBody(content);
|
gtNotification.setClickType("none");
|
pushDTO.setPushMessage(pushMessage);
|
|
// 消息接受人
|
Audience audience = new Audience();
|
audience.addCid(cid);
|
pushDTO.setAudience(audience);
|
/**设置个推通道结束**/
|
|
//配置推送条件
|
// 1: 表示该消息在用户在线时推送个推通道,用户离线时推送厂商通道;
|
// 2: 表示该消息只通过厂商通道策略下发,不考虑用户是否在线;
|
// 3: 表示该消息只通过个推通道下发,不考虑用户是否在线;
|
// 4: 表示该消息优先从厂商通道下发,若消息内容在厂商通道代发失败后会从个推通道下发。
|
Strategy strategy = new Strategy();
|
strategy.setDef(1);
|
Settings settings = new Settings();
|
settings.setStrategy(strategy);
|
pushDTO.setSettings(settings);
|
settings.setTtl(3600000);//消息有效期,走厂商消息需要设置该值
|
/**设置厂商通道**/
|
PushChannel pushChannel = new PushChannel();
|
/**设置Android配置**/
|
AndroidDTO androidDTO = new AndroidDTO();
|
Ups ups = new Ups();
|
ThirdNotification notification1 = new ThirdNotification();
|
ups.setNotification(notification1);
|
notification1.setTitle(title);//安卓离线展示的标题
|
notification1.setBody(content);//安卓离线展示的内容
|
notification1.setClickType("intent");
|
notification1.setIntent("intent:#Intent;launchFlags=0x04000000;action=android.intent.action.oppopush;component=com.hubei.jingchuReservoir/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title="+title +";S.content="+content+";S.payload=test;end");
|
|
//对不同厂商进行配置
|
// ups.addOption("HW", "/message/android/notification/badge/class", "io.dcloud.PandoraEntry ");
|
ups.addOption("VV","/networkType",-1);
|
|
androidDTO.setUps(ups);
|
pushChannel.setAndroid(androidDTO);
|
/**设置Android配置结束**/
|
|
/**设置IOS配置**/
|
//推送苹果离线通知标题内容
|
Alert alert = new Alert();
|
alert.setTitle(title);//苹果离线通知栏标题
|
alert.setBody(content);//苹果离线通知栏内容
|
Aps aps = new Aps();
|
//1表示静默推送(无通知栏消息),静默推送时不需要填写其他参数。
|
//苹果建议1小时最多推送3条静默消息
|
aps.setContentAvailable(0);
|
aps.setSound("default");
|
aps.setAlert(alert);
|
IosDTO iosDTO = new IosDTO();
|
iosDTO.setAps(aps);
|
iosDTO.setType("notify");
|
pushChannel.setIos(iosDTO);
|
/**设置IOS配置结束**/
|
pushDTO.setPushChannel(pushChannel);
|
/**设置厂商通道结束**/
|
|
|
list.add(pushDTO);
|
});
|
|
PushBatchDTO pushBatchDTO = new PushBatchDTO();
|
pushBatchDTO.setAsync(true);
|
pushBatchDTO.setMsgList(list);
|
|
|
//推送消息
|
ApiResult<Map<String, Map<String, String>>> mapApiResult = myPushApi.pushBatchByCid(pushBatchDTO);
|
|
return mapApiResult.isSuccess();
|
}
|
}
|