java springboot集成个推推送V2

前端使用的为uni-push1.0

UniPush 是 DCloud 联合个推公司推出的集成型统一推送服务,内建了苹果、华为、小米、OPPO、VIVO、魅族、谷歌 FCM 等手机厂商的系统级推送和个推等第三方推送。

本文不做前端记录

服务器端使用的为个推RestApi V2

  • 严格按照RestFul风格设计接口,包括url路径的调整,method的区别使用等
  • 入参更合理,减少了结构嵌套,分类更清晰,默认值更合理,开发者使用更聚焦
  • 出参结构更统一,方便开发者做解析
  • 接入更简便,文档结构进行了重新整理

该套配置信息的appid、appkey等都应该由前端uni-push提供,用作调试

Android和IOS 效果图

1、第一步引入pom依赖

<!--个推-->
<!-- https://mvnrepository.com/artifact/com.getui.push/restful-sdk -->
<dependency><groupId>com.getui.push</groupId><artifactId>restful-sdk</artifactId><version>1.0.0.8</version>
</dependency>

2、yml配置文件

# 个推推送
getui:
  app:
    appId: *********************                #应用ID
    appKey: *********************             #密钥key
    appSecret: *********************        #密钥secret
    masterSecret: *********************
    host: https://restapi.getui.com/v2    #推送接口地址 sdk里面默认就是这个可以选择不配

3、个推配置类

import com.getui.push.v2.sdk.ApiHelper;
import com.getui.push.v2.sdk.GtApiConfiguration;
import com.getui.push.v2.sdk.api.PushApi;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;/*** 个推应用信息** @author Ivan* @date 2022/9/20 16:50*/@Data
@Component
@ConfigurationProperties(prefix = "getui.app")
public class GeTuiConfig {private String appId;private String appKey;private String appSecret;private String masterSecret;private String host;/*** 个推接口实例化* @return*/@Bean(name = "onlyPushApi")public PushApi pushApi() {GtApiConfiguration apiConfiguration = new GtApiConfiguration();//填写应用配置,参数在“Uni Push”下的“应用配置”页面中获取apiConfiguration.setAppId(appId);apiConfiguration.setAppKey(appKey);apiConfiguration.setMasterSecret(masterSecret);//实例化ApiHelper对象,用于创建接口对象ApiHelper apiHelper = ApiHelper.build(apiConfiguration);//创建对象,建议复用。目前有PushApi、StatisticApi、UserApiPushApi pushApi = apiHelper.creatApi(PushApi.class);return pushApi;}}

4、个推推送工具类

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.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 com.getui.push.v2.sdk.dto.res.TaskIdDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.util.List;
import java.util.Map;/*** 个推工具类** @author Ivan* @date 2022/9/21 9:27*/
@Slf4j
@Component
public class GeTuiUtils {@AutowiredPushApi pushApi;/*** 单cid推送** @param cid* @param title* @param content* @return*/public boolean 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单推ApiResult<Map<String, Map<String, String>>> apiResult = pushApi.pushToSingleByCid(pushDTO);if (apiResult.isSuccess()) {log.info("Push succeeded. cid:" + cid + ",msg:" + apiResult.getMsg() + ",data:" + apiResult.getData());return true;} else {log.info("Push failed. cid:" + cid + ",code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());return false;}}/*** cid批量推送** @param cidList* @param title* @param content* @return*/public boolean pushListByCid(List<String> cidList, String title, String content) {//批量发送AudienceDTO audienceDTO = new AudienceDTO();PushDTO<Audience> pushDTO = this.buildPushDTO(title, content);//创建消息ApiResult<TaskIdDTO> createApiResult = pushApi.createMsg(pushDTO);if (!createApiResult.isSuccess()) {log.info("批量推送:创建消息失败" + createApiResult.getMsg());return false;}// 设置接收人信息Audience audience = new Audience();pushDTO.setAudience(audience);audience.setCid(cidList);audienceDTO.setAudience(audience);audienceDTO.setTaskid(createApiResult.getData().getTaskId());audienceDTO.setAsync(true);ApiResult<Map<String, Map<String, String>>> apiResult = pushApi.pushListByCid(audienceDTO);if (apiResult.isSuccess()) {log.info("Batch push succeeded. msg:" + apiResult.getMsg() + ",data:" + apiResult.getData());return true;} else {log.info("Batch push failed. code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());return false;}}/*** 构建推送消息体** @param title* @param content* @return*/private PushDTO<Audience> buildPushDTO(String title, String content) {PushDTO<Audience> pushDTO = new PushDTO<>();// 设置推送参数pushDTO.setRequestId(System.currentTimeMillis() + "");pushDTO.setGroupName("test-group");//配置推送条件Settings settings = new Settings();pushDTO.setSettings(settings);//消息有效期,走厂商消息需要设置该值settings.setTtl(3600000);//安卓在线通道走个推推送时的消息体(在线通道不支持ios)PushMessage pushMessage = new PushMessage();pushDTO.setPushMessage(pushMessage);//通知消息GTNotification notification = new GTNotification();pushMessage.setNotification(notification);notification.setTitle(title + "在线通道通知消息标题");notification.setBody(content + "在线通道通知消息内容");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");//透传消息 此格式的透传消息由 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;}
}

5、测试类

@SpringBootTest
class GetuiTests {@Autowiredprivate GeTuiUtils geTuiUtils;@Testvoid pushV2() {//单个推送geTuiUtils.pushToSingleByCid("xxx","单个cid推送","单个cid推送");//批量推送
//        List<String> list = new ArrayList<>();
//        list.add("xxx");
//        geTuiUtils.pushListByCid(list,"批量推送","批量推送");}}

总结:

几个注意的点(代码均有注释)

1、首先区分安卓和ios,两种系统封装的方式和消息体不同

2、区分在线和离线(个推的在线通道只有安卓能做,ios只能走厂商离线通道)

3、区分通知消息和透传消息(透传就是自定义消息,后端啥都不做直接把所有信息通过json格式发给前端做个性化处理)

4、cid要找前端拿,并且服务端需要做存储,用户每次登录app都更新一遍

java集成个推推送V2 uni-push1.0相关推荐

  1. Flutter集成个推推送-安卓原生篇

    前言 在众多的集成化推送中选择了个推,个推在flutter集成中还是比较简单的,只需要跟着官网一步一步走就可以了.今天这篇文章不涉及到flutter项目个推的集成,只是记录个推离线走安卓厂商时,进行获 ...

  2. java集成华为推送

    集成华为推送 这类推送一般官方文档都比较详细,如果想要更加详细的了解建议查看官方文档. 官方文档地址:https://developer.huawei.com/consumer/cn/service/ ...

  3. java mui 个推推送

    首先给大家讲一下有哪些坑 1.这个推送  必须要打包才可以发送推送(后台自定义的发送推送) 2.这个有一个弊端:就是 当我的手机关闭了app的情况下,我后台管理员发送一条推送消息,你会接受不到,除非, ...

  4. java 集成极光推送

    为什么需要推送 现在手机App中,每天都能收到大量的推送,这种推送是让用户了解app最新活动与消息,也是提醒用户参与活动并使用app的一个方法,在app中是必不可少的.公司开发app当然也需要使用一种 ...

  5. java集成极光推送实现Android的消息推送

    1.极光推送的思路就是,每一个app都有一个AppKey和Master Secret,这两个值是唯一的,也就是用来标识App的唯一信息,具体怎么获取,去看极光推送官网文档,这里就不在讲解.我们在极光开 ...

  6. java集成vivo推送sdk

    测试代码块 /*** vivo推送测试类* */ public class Vivo {public static final String ALIAS = "ALIAS";pub ...

  7. java集成oppo推送sdk

    准备工作 1.申请推送服务需要在oppo官网上架自己的app(比较蛋疼),需要一些资料,上架以后app评级为A/B的应用方可申请推送服务,获取到app_key和app_secret. 2.oppo官网 ...

  8. java集成极光推送(仅仅极光注册Id字段发送)

    添加依赖 在pom.xml文件的<dependencies></dependencies>标签中,加入下面依赖,且刷新依赖 <!-- 使用极光推送的jar包 --> ...

  9. SpringBoot项目集成UniPush推送服务

    一.DCLOUD开发者平台uni app开通uni push厂商推送配置 DCLOUD开发者平台开发者中心网址:DCLOUD开发者平台开发者中心 1.Uni Push1.0(老版本) (1)Uni P ...

最新文章

  1. vue-router 手势滑动触发返回
  2. LeetCode_每日一题今日份_343.整除拆分
  3. makefile的选项CFLAGS和LDFLAGS
  4. 推荐21个顶级的Vue UI库! – TalkingData‘s Blog
  5. Harmonic Number (II) LightOJ - 1245(找规律?大数f(n)=n/1+n/2+n/3+......+n/n)
  6. Android开发(一):android环境搭建
  7. oracle awr报告生成_分享AWR报告的生成和简单分析方法
  8. Git和Github介绍,294页『Git与Github学习使用指南』分享
  9. 使用pyspider爬取巨量淘宝MM图片 1
  10. bindZip下载地址
  11. 软件构造笔记---Java的多态性
  12. TCP offload to the resuce 让TCP减负来挽救我们
  13. 单亲家庭父子的理财通信
  14. Api --String知识点
  15. 无处不在的内存泄漏-苹果BUG?
  16. UI设计APP金刚区,卡片式设计
  17. 设计师一定要知道这5个免费样机素材网
  18. 需要知道关于struct的一些事情
  19. c++重载运算符实现分数加减乘除
  20. mel表达式_mel语言~`详解

热门文章

  1. 失眠吃什么食物节失眠?
  2. redis | 九、redis之Geospatial
  3. html设置字体在本地不生效,Css字体在IE中不起作用
  4. 微信拉黑和删除有啥区别?这是一个困扰良久的未解之谜,微信团队官微在微博科普了拉黑与删除的区别
  5. 余弦退火算法作图理解(python)
  6. android平台上线,网易新闻客户端3.0版iOS、Android平台正式上线
  7. 互联网公司对java实习生的要求有哪些
  8. JDK1.7中的ThreadPoolExecutor源代码剖析
  9. 用矩形积分近似求解定积分的动画示意图
  10. 基于另一个单元格值的条件格式