Springboot集成
pom文件引入相关jar包
<!-- https://mvnrepository.com/artifact/com.getui.push/restful-sdk -->
<dependency>
<groupId>com.getui.push</groupId>
<artifactId>restful-sdk</artifactId>
<version>1.0.0.1</version>
</dependency>
yml配置
文件配置appId等信息
push:
appId: ****
appKey: ******
masterSecret: ******
获取在DCloud开发者中心
个推配置类
##unipush 2.0
#push.uniAppId= qvO3cgQs******jm8MTr4
#push.uniAppKey= e0njoGr***********UduxNo5
#push.uniMasterSecret= 6rxow*******YxYXnXSmgz2
#push.uniAppSecret= 6rxowVxPr8****nXSmgz2
#unipush 1.0
push.uniAppId= LqiuKqi*******dKinnUs0x61
push.uniAppKey= nAbme*********Q42NsYDjEW1
push.uniMasterSecret= 5derW********XUN4B8w6i6
push.uniAppSecret= 37HCFjyu*******0BESPabEq3
package com.thinkgem.jeesite.modules.unipush.config;
import com.getui.push.v2.sdk.ApiHelper;
import com.getui.push.v2.sdk.GtApiConfiguration;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author 14388
*/
@Configuration
public class GTPushConfig {
@Value("${push.uniAppId}")
private String appId;
@Value("${push.uniAppKey}")
private String appKey;
@Value("${push.uniMasterSecret}")
private String masterSecret;
@Value("${push.uniAppSecret}")
private String uniAppSecret;
@Bean(name = "myApiHelper")
public ApiHelper apiHelper() {
GtApiConfiguration apiConfiguration = new GtApiConfiguration();
//填写应用配置
apiConfiguration.setAppId(appId);
apiConfiguration.setAppKey(appKey);
apiConfiguration.setMasterSecret(masterSecret);
// 接口调用前缀,请查看文档: 接口调用规范 -> 接口前缀, 可不填写appId
//默认为https://restapi.getui.com/v2
apiConfiguration.setDomain("https://restapi.getui.com/v2/");
// 实例化ApiHelper对象,用于创建接口对象
ApiHelper apiHelper = ApiHelper.build(apiConfiguration);
return apiHelper;
}
}
消息发送工具类
package com.thinkgem.jeesite.modules.unipush.utils;
import com.getui.push.v2.sdk.ApiHelper;
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.AudienceDTO;
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.GTNotification;
import com.getui.push.v2.sdk.dto.res.TaskIdDTO;
import com.thinkgem.jeesite.common.app.utils.JsonResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
* @author 14388
*/
@Slf4j
@Component
public class GeTuiUtil {
@Resource(name = "myApiHelper")
private ApiHelper myApiHelper;
/**
* 消息推送(离线推送)单cid推送
*
* @param cid
* @param title
* @param content
*/
public JsonResult pushToSingleByCid(String cid, String title, String content) {
PushDTO<Audience> pushDTO = this.buildPushDTO(title, content);
// 进行cid单推
PushApi pushApi = myApiHelper.creatApi(PushApi.class);
// 设置接收人信息
Audience audience = new Audience();
audience.addCid(cid);
pushDTO.setAudience(audience);
ApiResult<Map<String, Map<String, String>>> apiResult = pushApi.pushToSingleByCid(pushDTO);
if (apiResult.isSuccess()) {
// success
log.info("Push succeeded. cid:" + cid + ",msg:" + apiResult.getMsg() + ",data:" + apiResult.getData());
return JsonResult.SUCCESS(apiResult.getMsg(), apiResult.getData());
} else {
// failed
log.info("Push failed. cid:" + cid + ",code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());
return JsonResult.FAILURE("code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());
}
}
/**
* cid批量推
*
* @param cidList
* @param title
* @param content
*/
public JsonResult pushListByCid(List<String> cidList, String title, String content) {
//批量发送
AudienceDTO audienceDTO = new AudienceDTO();
PushDTO<Audience> pushDTO = this.buildPushDTO(title, content);
PushApi pushApi = myApiHelper.creatApi(PushApi.class);
ApiResult<TaskIdDTO> createApiResult = pushApi.createMsg(pushDTO);
if (!createApiResult.isSuccess()) {
return JsonResult.FAILURE("推送:创建消息失败" + createApiResult.getMsg());
}
// 设置接收人信息
Audience audience = new Audience();
audience.setCid(cidList);
pushDTO.setAudience(audience);
audienceDTO.setAudience(audience);
audienceDTO.setTaskid(createApiResult.getData().getTaskId());
audienceDTO.setAsync(true);
ApiResult<Map<String, Map<String, String>>> apiResult = pushApi.pushListByCid(audienceDTO);
if (apiResult.isSuccess()) {
// success
log.info("Batch push succeeded. msg:" + apiResult.getMsg() + ",data:" + apiResult.getData());
return JsonResult.SUCCESS(apiResult.getMsg());
} else {
// failed
log.info("Batch push failed. code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());
return JsonResult.FAILURE("code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());
}
}
/**
* 构建推送消息体
*
* @param title
* @param content
* @return
*/
private PushDTO<Audience> buildPushDTO(String title, String content) {
PushDTO<Audience> pushDTO = new PushDTO<>();
// 设置推送参数
pushDTO.setRequestId(System.currentTimeMillis() + "");
pushDTO.setGroupName("hyqx-group");
//
// //配置推送条件
// Settings settings = new Settings();
// pushDTO.setSettings(settings);
// //消息有效期,走厂商消息需要设置该值
// settings.setTtl(3600000);
// //安卓在线通道走个推推送时的消息体(在线通道不支持ios)
PushMessage pushMessage = new PushMessage();
pushDTO.setPushMessage(pushMessage);
// //通知消息
GTNotification notification = new GTNotification();
notification.setTitle(title);
notification.setBody(content);
/**
* intent:打开应用内特定页面,
* url:打开网页地址,
* payload:自定义消息内容启动应用,
* payload_custom:自定义消息内容不启动应用,
* startapp:打开应用首页,
* none:纯通知,无后续动作
*/
//进入特定的页面
// notification.setClickType("intent");
// notification.setIntent("intent://com.getui.push/detail?#Intent;scheme=gtpushscheme;launchFlags=0x4000000;package=com.getui.demo;component=com.getui.demo/com.getui.demo.DemoActivity;S.payload=payloadStr;end");
notification.setClickType("startapp");
pushMessage.setNotification(notification);
// //透传消息 此格式的透传消息由 unipush 做了特殊处理,会自动展示通知栏。开发者也可自定义其它格式,在客户端自己处理。
pushMessage.setTransmission(" {title:\"个推通道透传消息标题\",content:\"个推通道透传消息内容\",payload:\"自定义数据\"}");
//设置离线推送时的消息体
// PushChannel pushChannel = new PushChannel();
//安卓离线厂商通道推送的消息体
// AndroidDTO androidDTO = new AndroidDTO();
// Ups ups = new Ups();
// //通知消息
// ThirdNotification thirdNotification = new ThirdNotification();
// ups.setNotification(thirdNotification);
// thirdNotification.setTitle(title + "安卓离线厂商通道通知消息标题");
// thirdNotification.setBody(content + "安卓离线厂商通道通知消息内容");
// thirdNotification.setClickType("intent");
// thirdNotification.setIntent("intent://com.getui.push/detail?#Intent;scheme=gtpushscheme;launchFlags=0x4000000;package=com.getui.demo;component=com.getui.demo/com.getui.demo.DemoActivity;S.payload=payloadStr;end");
// //透传消息
ups.setTransmission(" {title:\"安卓离线厂商通道透传消息标题\",content:\"安卓离线厂商通道透传消息内容\",payload:\"自定义数据\"}");
//
// androidDTO.setUps(ups);
// pushChannel.setAndroid(androidDTO);
// //ios离线apn通道推送的消息体
// Alert alert = new Alert();
// alert.setTitle(title+"苹果离线通知栏标题");
// alert.setBody(content+"苹果离线通知栏内容");
// Aps aps = new Aps();
// aps.setContentAvailable(0);//0表示普通通知消息(默认为0);1表示静默推送(无通知栏消息),静默推送时不需要填写其他参数。苹果建议1小时最多推送3条静默消息
// aps.setSound("default");//自定义铃声:系统铃声设置为:default; 无声设置为:com.gexin.ios.silence,或不填
// aps.setAlert(alert);
// IosDTO iosDTO = new IosDTO();
// iosDTO.setAps(aps);
// iosDTO.setType("notify");
// pushChannel.setIos(iosDTO);
// pushDTO.setPushChannel(pushChannel);
return pushDTO;
}
}
封装方法
package com.thinkgem.jeesite.modules.unipush.controller;
import com.thinkgem.jeesite.common.app.utils.JsonResult;
import com.thinkgem.jeesite.common.utils.StringUtils;
import com.thinkgem.jeesite.modules.unipush.entity.PushEntity;
import com.thinkgem.jeesite.modules.unipush.service.PushService;
import com.thinkgem.jeesite.modules.unipush.utils.GeTuiUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
/**
* @author 14388
*/
@RestController
@RequestMapping("push")
public class PushController {
@Autowired
private PushService pushService;
@RequestMapping("/pushMess/single")
public JsonResult pushMessageSingle(PushEntity pushEntity) {
if(StringUtils.isBlank(pushEntity.getCid())||StringUtils.isBlank(pushEntity.getTitle())){
return JsonResult.FAILURE("cid is null or title is null");
}
return pushService.pushToSingleByCid(pushEntity.getCid(), pushEntity.getTitle(), pushEntity.getContent());
}
@RequestMapping("/pushMess/batch")
public JsonResult pushMessageBatch(PushEntity pushEntity) {
if(pushEntity.getCids()==null||StringUtils.isBlank(pushEntity.getTitle())){
return JsonResult.FAILURE("cids is null or title is null");
}
JsonResult jsonResult = pushService.pushListByCid(pushEntity.getCids(), pushEntity.getTitle(), pushEntity.getContent());
return jsonResult;
}
}
package com.thinkgem.jeesite.modules.unipush.service;
import com.thinkgem.jeesite.common.app.utils.JsonResult;
import com.thinkgem.jeesite.modules.unipush.utils.GeTuiUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author: 14388
* @create: 2022-11-03 21:33
* @description: 消息推送服务
**/
@Service
public class PushService {
@Autowired
private GeTuiUtil geTuiUtils;
/**
* @description: 单个推送消息
* @author: xiaoHui
* @create: 2022/11/3
* @param: [cid, title, content]
* @return JsonResult
**/
public JsonResult pushToSingleByCid(String cid, String title, String content) {
JsonResult jsonResult = geTuiUtils.pushToSingleByCid(cid, title, content);
return jsonResult;
}
/**
* @description: 批量推送消息
* @author: xiaoHui
* @create: 2022/11/3
* @param: [cids, title, content]
* @return JsonResult
**/
public JsonResult pushListByCid(List<String> cids, String title, String content) {
JsonResult jsonResult = geTuiUtils.pushListByCid(cids, title, content);
return jsonResult;
}
}
/**
* Copyright © 2012-2016 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.
*/
package com.thinkgem.jeesite.modules.unipush.entity;
import com.thinkgem.jeesite.common.persistence.DataEntity;
import com.thinkgem.jeesite.common.utils.excel.annotation.ExcelField;
import com.thinkgem.jeesite.modules.sys.entity.Area;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* 推送消息Entity
* @author 14388
* @version 2022-11-03
*/
@Api("消息推送实体")
@Data
public class PushEntity extends DataEntity<PushEntity> {
@ApiModelProperty("推送cid")
@NotNull(message="推送cid唯一不能为空")
private String cid;
@ApiModelProperty("推送cid用于批量推送")
@NotNull(message="推送cid唯一不能为空")
private List<String> cids;
@ApiModelProperty("推送标题")
@NotNull(message="推送标题")
private String title;
@ApiModelProperty("推送内容")
@NotNull(message="推送内容")
private String content;
}
Unipush API 官网:https://docs.getui.com/getui/server/rest_v2/code/
UniAPP 官网: