个推工具类封装

  • 说明
    • 1.封装消息实体
    • 2. 工具类

说明

个推集成比较方便,就是请求的第三方api
以下对其进行工具类的封装
我用的是dcloud第三方
https://dev.dcloud.net.cn/app/index
申请步骤,不在此说明

1.封装消息实体

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;import java.io.Serializable;
import java.util.Objects;/*** desc: 个推透传消息** @author qts* @date 2022/4/1 0001*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Accessors(chain = true)
public class Transmission implements Serializable {private static final long serialVersionUID=1L;/*** 通知标题*/private String title;/*** 通知内容*/private String content;/*** 自定义数据*/private String payload;}

2. 工具类

使用了redis进行缓存token

package com.intellsite.common.redis.utils.getui;import cn.hutool.core.lang.UUID;
import cn.hutool.http.Header;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.intellsite.common.redis.utils.RedisUtil;import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** desc: 个推消息推送工具** @author qts* @date 2022/3/31 0031*/
public class PushUtil {private PushUtil() {}// 公司的应用参数:自行在个推中申请查询private final static String AppID = "";private final static String AppKey = "";private final static String AppSecret = "";private final static String MasterSecret = "";private final static String BaseUrl = "https://restapi.getui.com/v2/"+AppID;// 获取token的urlprivate final static String AuthUrl = BaseUrl+"/auth";// cid单推urlprivate final static String PushSingleCid = BaseUrl+"/push/single/cid";// cid批量推创建消息urlprivate final static String CreateListMsg = BaseUrl+"/push/list/message";// cid批量推urlprivate final static String PushBatchCid = BaseUrl+"/push/list/cid";// token缓存keyprivate final static String GT_TOKEN_CACHE_KEY = "getui_token";// 测试用tokenprivate final static String Token = "";/*** 生成签名* @param appkey* @param mastersecret* @param timeStamp* @return*/private static String generateSign(String appkey,String mastersecret,Long timeStamp) {// 格式String s = appkey + timeStamp + mastersecret;// SHA256加密算法String encrypt = sha256Encrypt(s);return encrypt;}/*** 对字符串SHA-256加密** @param strSrc*            要加密的字符串* @return*/public static String sha256Encrypt(String strSrc) {MessageDigest md = null;String strDes = null;String encName="SHA-256";byte[] bt = strSrc.getBytes();try {md = MessageDigest.getInstance(encName);md.update(bt);strDes = bytes2Hex(md.digest()); // to HexString} catch (NoSuchAlgorithmException e) {return null;}return strDes;}public static String bytes2Hex(byte[] bts) {String des = "";String tmp = null;for (int i = 0; i < bts.length; i++) {tmp = (Integer.toHexString(bts[i] & 0xFF));if (tmp.length() == 1) {des += "0";}des += tmp;}return des;}/*** 获取个推token* @return*/private static String getToken() {// 从redis中获取tokenObject token = RedisUtil.get(GT_TOKEN_CACHE_KEY);if (token != null) {return token.toString();} else {// 请求api得到tokenlong timestamp = System.currentTimeMillis();String sign = generateSign(AppKey, MasterSecret, timestamp);Map<String, Object> params = new HashMap<String, Object>();params.put("sign", sign);params.put("timestamp", String.valueOf(timestamp));params.put("appkey", AppKey);String body = JSON.toJSONString(params);String result = HttpRequest.post(AuthUrl).header(Header.CONTENT_TYPE,"application/json;charset=utf-8").body(body).timeout(20000).execute().body();System.out.println("result: "+result);String data = JSONObject.parseObject(result).getJSONObject("data").getString("token");//有效时间半天RedisUtil.set(GT_TOKEN_CACHE_KEY, data, 60*60*12);return data;}}/*** 单cid推送* @param cid 客户端ID* @param transmission 参数*/public static void singlePush(String cid,Transmission transmission) {// 封装请求参数Map<String, Object> params = new HashMap<String, Object>();params.put("request_id", UUID.fastUUID().toString().replace("-",""));Map<String, Object> audience = new HashMap<String, Object>();// 接收人audience.put("cid", Arrays.asList(cid));//clientIDparams.put("audience", audience);// 消息内容Map<String, Object> push_message = new HashMap<String, Object>();// 透传//{title:"标题",content:"内容",payload:"自定义数据"}push_message.put("transmission",JSON.toJSONString(transmission));params.put("push_message", push_message);String body = JSON.toJSONString(params);// 获取token//String token = Token;String token = getToken();// cid单推String result = HttpRequest.post(PushSingleCid).header("token",token).body(body).timeout(20000).execute().body();System.out.println("result: "+result);}/*** cid批量推送* @param cids 客户端ID数组* @param transmission 参数*/public static void batchPush(List<String> cids,Transmission transmission) {// 1.创建消息String taskiId = createMsg(transmission);// 2.批量cid推送cidPush(cids, taskiId);}/*** cid批量推* @param cids* @param taskiId*/private static void cidPush(List<String> cids, String taskiId) {// 封装请求参数Map<String, Object> params = new HashMap<String, Object>();Map<String, Object> audience = new HashMap<String, Object>();// 接收人audience.put("cid", cids);//clientIDparams.put("audience", audience);params.put("taskid", taskiId);// 是否异步推送,true是异步,false同步。异步推送不会返回data详情params.put("is_async", true);String body = JSON.toJSONString(params);// 获取token//String token = Token;String token = getToken();// cid单推String result = HttpRequest.post(PushBatchCid).header("token",token).body(body).timeout(20000).execute().body();System.out.println("result: "+result);}/*** 创建消息* 用于批量推送* @param transmission* @return taskid 消息ID*/private static String createMsg(Transmission transmission) {// 封装请求参数Map<String, Object> params = new HashMap<String, Object>();params.put("request_id", UUID.fastUUID().toString().replace("-",""));// 消息内容Map<String, Object> push_message = new HashMap<String, Object>();// 透传//{title:"标题",content:"内容",payload:"自定义数据"}push_message.put("transmission",JSON.toJSONString(transmission));params.put("push_message", push_message);String body = JSON.toJSONString(params);// 获取token//String token = Token;String token = getToken();// cid单推String result = HttpRequest.post(CreateListMsg).header("token",token).body(body).timeout(20000).execute().body();System.out.println("result: "+result);return JSONObject.parseObject(result).getJSONObject("data").getString("taskid");}public static void main(String[] args) {// 请求api得到token//token();// 消息体Transmission transmission = new Transmission();transmission.setTitle("title22");transmission.setContent("请及时审核22");transmission.setPayload("自定义数据22");String[] cids ={"188e37e4c3df943b46186c6f93357d44","22ddc1e5705531ce8283267091d66634"};// cid单推//singlePush("22ddc1e5705531ce8283267091d66634",transmission);// cid批量推batchPush(Arrays.asList(cids),transmission);}private static void token() {long timestamp = System.currentTimeMillis();String sign = generateSign(AppKey, MasterSecret, timestamp);Map<String, Object> params = new HashMap<String, Object>();params.put("sign", sign);params.put("timestamp", String.valueOf(timestamp));params.put("appkey", AppKey);String body = JSON.toJSONString(params);String result = HttpRequest.post(AuthUrl).body(body).timeout(20000).execute().body();System.out.println("result: "+result);String data = JSONObject.parseObject(result).getJSONObject("data").getString("token");System.out.println(data);}
}

个推-消息推送工具类相关推荐

  1. 个推消息推送SDK之“富媒体样式”功能详解

    为帮助开发者更好地使用个推消息推送产品,个推梳理出个推消息推送SDK的核心功能.典型应用场景,并提供实战案例作为参考,希望能够为大家找到提升推送效率的最佳路径! 本文为大家介绍个推消息推送SDK的[富 ...

  2. 个推消息推送iOS版常见问题整理

    为了更好地服务开发者,此次我们针对个推消息推送iOS版使用中可能出现的一些常见问题做了整理,提供了一些比较方便掌握的解决方法,希望能帮助到大家. 1. iOS推送流程是什么样的? iOS下发的消息分两 ...

  3. 个推消息推送SDK之“单推报表”,帮助APP快速查询单推推送到达情况

    为帮助开发者更好地使用个推消息推送产品,我们梳理了个推消息推送产品的核心功能.典型应用场景,并提供实战案例作为参考,希望能够为大家找到提升推送效率的最佳路径! 本文为大家介绍个推消息推送的[单推报表] ...

  4. 应用启动图标未读消息数显示 工具类

    /* * 应用启动图标未读消息数显示 工具类 (效果如:QQ.微信.未读短信 等应用图标) * */ public class BadgeUtil { /** * Set badge count * ...

  5. 小程序订阅消息推送工具类

    直接上代码: 1.首先引入maven依赖: <dependency><groupId>com.github.binarywang</groupId><arti ...

  6. .net C# 苹果消息推送 工具类

    public class AppleAPNSMessage{/// <summary>/// 苹果信息推送 证书 路径(注意测试版跟正式发布版证书上不一样)/// </summary ...

  7. uniapp unipush接入个推消息推送(各种踩坑记录)安卓+IOS+在线消息+离线消息

    uniapp 消息推送功能实现 上周公司要求做一个消息推送的功能,由于现有的电商APP是用uniapp做的,所以优先考虑uniapp自带的unipush消息推送. ios证书导出踩坑 ios推送证书导 ...

  8. 手把手教你开通百度慧推消息推送服务

    百度慧推是专业的移动APP消息推送服务,大家可以通过百度搜索:百度慧推,或者在百度智能云平台-产品-开发者服务-移动APP推送服务找到. 开通消息推送服务是非常简单方便的,注册登录-创建应用-合入SD ...

  9. 个推消息推送SDK技术沉淀(1):如何使SDK包体体积变小?如何实现省电省流量?

    1 为什么追求包体体积小 好的消息推送SDK首要需考虑到包体的小巧灵活性.为什么选择更小体积的包体?对于商务人员来说,包体体积小,他们更容易接受.对于技术人员来说,他们在开发产品时,普遍追求" ...

最新文章

  1. mysql default unix_timestamp_mysql中的unix_timestamp函数
  2. 基于Confluent.Kafka实现的KafkaConsumer消费者类和KafkaProducer消息生产者类型
  3. 国产游戏《黑神话:悟空》刷爆全网,虚幻引擎4打造,网友:有生之年终于看到国产3A!...
  4. 谨慎能捕千秋蝉(二)——CSRF
  5. UVa 1607 (二分) Gates
  6. 查看LINUX当前负载
  7. vmware虚拟机迁移到hyperv_ProxmoxVE 之 V2V迁移(vmware-PVE)
  8. Java对象生命周期
  9. 三议(巧用:before和inline-block伪元素解决)跨浏览器不定长宽,中心为基点,百分比定位~...
  10. MSP430杂谈--时钟资源UCS的配置
  11. 自己封装的一个js方法用于获取显示的星期和日期时间
  12. 单片机歌曲代码大全_对于 51 单片机的四大误区!
  13. MyEclipse2014+JDK1.7+Tomcat8.0+Maven3.2 开发环境搭建
  14. Linux系统下matplotlib中文乱码解决办法
  15. 计算机组成原理(白中英) 第一章课后题部分答案(知识点汇总及扩展)
  16. uniapp做微信小程序身份证识别功能(百度云身份证识别api)
  17. 分享一下linux系统的精彩描述
  18. ElasticSearch(ik分词器)+SpringBoot站内全文搜索解决方案
  19. 把时间当作朋友 读书笔记
  20. 百度~网盘下载速度慢怎么办?完美解决,此账号被限速的完美解决,快100倍

热门文章

  1. Springboot+Vue+Echarts实现51job大数据岗位分析数据大屏
  2. 索尼展示基于MicroLED技术的16K显示屏:约780吋
  3. 狗年拜年php源码,创意拜年祝福语狗年
  4. ogre 学习笔记 - Day 7
  5. 分布式-分布式常见问题和解决方案
  6. 笔记本怎么重装系统win11
  7. 建站用阿里云还是腾讯云好?
  8. 计算机黑屏无法唤醒,联想笔记本睡眠中的黑屏无法唤醒,重启计算机或黑屏,该如何处理?...
  9. JDK下载安装以及idea环境变量的配置(详细步骤)
  10. 《Android自定义控件》RulerView,仿唯品会身高、体重等标尺,尺码控件,滑动可修改刻度值