JAVA集成unipush消息推送uniapp

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 &copy; 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 官网:

猜你喜欢

转载自blog.csdn.net/Temp_1998_H/article/details/127679171