uniPush1.0 + springboot 实现消息推送(在线版的)

时间:2025-04-14 18:40:23
import com.alibaba.druid.support.json.JSONUtils; 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.Settings; import com.getui.push.v2.sdk.dto.req.Strategy; 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.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 jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.List; import java.util.Map; @Slf4j @Component public class PushMsgUtils { // 消息推送 public static final String MESSAGE_PUSH = "1"; // 离线推送 public static final String OFFLINE_PUSH = "2"; @Resource(name = "myApiHelper") private ApiHelper myApiHelper; /** * 消息推送(离线推送)单cid推送 * cid 必填 设备 * title 必填 标题 * content 必填 内容 * linkUrl 必填 跳转链接 * type 必填 1:消息推送 2:离线推送 */ public ApiResult<Map<String, Map<String, String>>> pushToSingleByCid(String cId , String title, String content, String type ) { PushDTO<Audience> pushDTO = this.buildPushDTO(title, content, type); // 设置接收人信息 Audience audience = new Audience(); pushDTO.setAudience(audience); audience.addCid(cId); // 进行cid单推 PushApi pushApi = myApiHelper.creatApi(PushApi.class); ApiResult<Map<String, Map<String, String>>> apiResult = pushApi.pushToSingleByCid(pushDTO); if (apiResult.isSuccess()) { // success log.info("推送成功"); System.out.println(apiResult.getData()); } else { // failed log.error("推送失败"); System.out.println("code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg()); } return apiResult; } /** * 消息推送(离线推送)单cid推送 * cid 必填 设备 * title 必填 标题 * content 必填 内容 * linkUrl 必填 跳转链接 * type 必填 1:消息推送 2:离线推送 */ public ApiResult<Map<String, Map<String, String>>> pushToSingleByCIds(List<String> cIds , String title, String content, String type ) { PushDTO<Audience> pushDTO = this.buildPushDTO(title, content, type); // 设置接收人信息 Audience audience = new Audience(); pushDTO.setAudience(audience); audience.setCid(cIds); // 进行cid单推 PushApi pushApi = myApiHelper.creatApi(PushApi.class); ApiResult<Map<String, Map<String, String>>> apiResult = pushApi.pushToSingleByCid(pushDTO); if (apiResult.isSuccess()) { // success log.info("推送成功"); System.out.println(apiResult.getData()); } else { // failed log.error("推送失败"); System.out.println("code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg()); } return apiResult; } /** * 消息参数模板 */ private PushDTO<Audience> buildPushDTO(String title, String content, String type) { PushDTO<Audience> pushDTO = new PushDTO<>(); // 设置推送参数 //requestid需要每次变化唯一 pushDTO.setRequestId(System.currentTimeMillis() + ""); pushDTO.setGroupName("wxb-group"); //配置推送条件 // 1: 表示该消息在用户在线时推送个推通道,用户离线时推送厂商通道; // 2: 表示该消息只通过厂商通道策略下发,不考虑用户是否在线; // 3: 表示该消息只通过个推通道下发,不考虑用户是否在线; // 4: 表示该消息优先从厂商通道下发,若消息内容在厂商通道代发失败后会从个推通道下发。 Strategy strategy = new Strategy(); strategy.setDef(1); strategy.setSt(1); Settings settings = new Settings(); settings.setStrategy(strategy); pushDTO.setSettings(settings); //消息有效期,走厂商消息需要设置该值 settings.setTtl(3600000); PushChannel pushChannel = new PushChannel(); Map<String, String> map = new HashMap<>(); map.put("title", title); map.put("content", content); map.put("type", type); // 转json对象 String payload = JSONUtils.toJSONString(map); // ========================= 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.setPayload(payload); iosDTO.setAps(aps); iosDTO.setType("notify"); pushChannel.setIos(iosDTO); // =================== 安卓离线厂商通道推送消息体 =========================== AndroidDTO androidDTO = new AndroidDTO(); pushDTO.setPushChannel(pushChannel); pushChannel.setAndroid(androidDTO); Ups ups = new Ups(); androidDTO.setUps(ups); ThirdNotification notification1 = new ThirdNotification(); ups.setNotification(notification1); //安卓离线展示的标题 notification1.setTitle(title); //安卓离线展示的内容 notification1.setBody(content); notification1.setClickType("intent"); notification1.setIntent("intent:#Intent;action=;" + "launchFlags=0x14000000;" + "component=包名/;-OL-SU=true;" + "=" + title + ";" + "="+ content + ";" + "=" + payload + ";end"); // (payload); //各厂商自有功能单项设置 // ("HW", "/message/android/notification/badge/class", " "); // ("HW", "/message/android/notification/badge/add_num", 1); // ("HW", "/message/android/notification/importance", "HIGH"); // ("VV","classification",1); //设置options 方式一 // ("HW","badgeAddNum",3); // ("HW","badgeClass",""); // ("OP","app_message_id",11); // ("VV","message_sort",1); // ("channel","default"); // PushMessage在线走个推通道才会起作用的消息体 PushMessage pushMessage = new PushMessage(); pushDTO.setPushMessage(pushMessage); Map<String, Object> mapTC = new HashMap<>(); mapTC.put("title", title); mapTC.put("content", content); mapTC.put("payload", map); String jsonTC = JSONUtils.toJSONString(mapTC); pushMessage.setTransmission(jsonTC); log.info("pushDTO:{}", pushDTO); return pushDTO; } /** * 离线通知消息参数模板 * */ private PushDTO<Audience> offlinePushDTO(String title, String content, String linkUrl, String type) { PushDTO<Audience> pushDTO = new PushDTO<>(); // 设置推送参数 //requestid需要每次变化唯一 pushDTO.setRequestId(System.currentTimeMillis() + ""); pushDTO.setGroupName("wxb-group"); // PushMessage在线走个推通道才会起作用的消息体 Map<String, String> map = new HashMap<>(); map.put("title", title); map.put("content", content); map.put("linkUrl", linkUrl); map.put("type", type); PushMessage pushMessage = new PushMessage(); pushDTO.setPushMessage(pushMessage); Map<String, Object> mapTC = new HashMap<>(); mapTC.put("title", title); mapTC.put("content", content); mapTC.put("payload", map); String jsonTC = JSONUtils.toJSONString(mapTC); System.err.println(jsonTC); pushMessage.setTransmission(jsonTC); log.info("pushDTO:{}", pushDTO); return pushDTO; } }