springboot 整合 unipush 个推 实现cid单推、批量推
unipush介绍
UniPush是DCloud**联合个推公司**推出的集成型统一推送服务,内建了苹果、华为、小米、OPPO、VIVO、魅族、谷歌FCM等手机厂商的系统级推送和个推等第三方推送。
国内Android的Push是一个混乱的世界,因为Google的Push服务FCM被墙,所以一些国内的安卓手机厂商各自做了自己的推送,比如华为、小米、OPPO、VIVO、魅族等,但还有很多国产手机厂商没有提供官方推送方案。三方独立公司如个推,则提供了独立的push方案。
在没有uniPush以前,如果只使用三方push,会在很多国产手机上因为节电设置而无法保活push进程,导致无法推送。而如果每个安卓手机的官方Push SDK都集成开发一遍,这么多平台,工作量会非常巨大,管理维护也很麻烦。
uniPush解决了这个难题,开发者只需要开发一次。系统会自动在不同手机上选择最可靠的推送通道发送push消息,保障送达率。
UniPush即**降低了开发成本、又提高了push送达率,并且免费**,是当前推送的最佳解决方案。
开通配置
- 参考uniPush使用指南
uniapp获取cid
getCID() {
let cid = ''
// #ifdef APP-PLUS
let pinf = plus.push.getClientInfo();
cid = pinf.clientid;
// #endif
return cid
}
可将cid作为参数传递给后台与用户进行绑定.
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开发者中心, [https://dev.dcloud.net.cn/app/index?type=0?appid=&type=0]
(https://dev.dcloud.net.cn/app/index?type=0?appid=&type=0)
也可在Hbuild的unipush 配置中直接跳转到对应应用中。
个推配置类
package com.wxb.fmms.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;
@Configuration
public class GTPushConfig {
@Value("${push.appId}")
private String appId;
@Value("${push.appKey}")
private String appKey;
@Value("${push.masterSecret}")
private String masterSecret;
@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.zkzh.fmms.common.config;
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.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 com.getui.push.v2.sdk.dto.res.TaskIdDTO;
import com.zkzh.common.domin.FebsResponse;
import com.zkzh.common.utils.FebsResponseUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@Slf4j
@Component
public class GeTuiUtils {
@Resource(name = "myApiHelper")
private ApiHelper myApiHelper;
/**
* 消息推送(离线推送)单cid推送
* @param cid
* @param title
* @param content
*/
public FebsResponse pushToSingleByCid(String cid, String title, String content) {
PushDTO<Audience> pushDTO = this.buildPushDTO(title,content);
// 设置接收人信息
Audience audience = new Audience();
pushDTO.setAudience(audience);
audience.addCid(cid);// cid
// 进行cid单推
PushApi pushApi = myApiHelper.creatApi(PushApi.class);
ApiResult<Map<String, Map<String, String>>> apiResult = pushApi.pushToSingleByCid(pushDTO);
if (apiResult.isSuccess()) {
// success
return FebsResponseUtil.success(apiResult.getMsg(),apiResult.getData());
} else {
// failed
return FebsResponseUtil.fail("code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());
}
}
/**
* cid批量推
* @param cidList
* @param title
* @param content
*/
public FebsResponse 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 FebsResponseUtil.fail("推送:创建消息失败"+createApiResult.getMsg());
}
// 设置接收人信息
Audience audience = new Audience();
pushDTO.setAudience(audience);
audience.setCid(cidList);
audienceDTO.setAudience(audience);
audienceDTO.setTaskid(createApiResult.