uniApp开通uniPush1.0个推,SpringBoot集成uniPush1.0个推

uniApp开通unipush1.0个推,SpringBoot程序集成

一、APP开通unipush1.0个推(商户App源码仅支持1.0个推)

1.app模块配置开通推送

在这里插入图片描述

2.应用开通推送

在这里插入图片描述

3.开通后点击消息推送菜单会看到如下页面 完成以上步骤后

在这里插入图片描述

  • 此时android 仅支持在线推送。

4.配置各厂商离线推送

  • 暂未配置

二、Java端SpringBoot集成uniPush1.0推送

1.引入依赖

		<!--	unipush 1.0个推	--><dependency><groupId>com.getui.push</groupId><artifactId>restful-sdk</artifactId><version>1.0.6.0</version></dependency>

2.spring配置yaml文件添加配置

getui:  #个推推送appId: ************ appKey: ************ masterSecret: ************domin: https://restapi.getui.com/v2 

3.参数可从uniapp开发者中心获取

在这里插入图片描述

4.注入所有API实体类

  • UniPushConfiguration.java

    package com.joolun.cloud.common.jiguang.config;import com.getui.push.v2.sdk.ApiHelper;
    import com.getui.push.v2.sdk.api.PushApi;
    import com.getui.push.v2.sdk.api.UserApi;
    import lombok.Data;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.cloud.context.config.annotation.RefreshScope;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import com.getui.push.v2.sdk.GtApiConfiguration;/*** @author yuanDing* @version 1.0* @date 2025-01-10 9:40* uniPush 1.0个推推送配置类*/
    @Data
    @RefreshScope
    @Configuration
    @ConfigurationProperties(prefix = "getui")
    public class UniPushConfiguration {private String appId;private String appKey;private String masterSecret;private String domin;@Beanpublic GtApiConfiguration apiConfiguration() {GtApiConfiguration apiConfiguration = new GtApiConfiguration();//填写应用配置,参数在“Uni Push”下的“应用配置”页面中获取apiConfiguration.setAppId(appId);apiConfiguration.setAppKey(appKey);apiConfiguration.setMasterSecret(masterSecret);apiConfiguration.setDomain(domin);return apiConfiguration;}@Beanpublic PushApi PushApi(GtApiConfiguration apiConfiguration) {return ApiHelper.build(apiConfiguration).creatApi(PushApi.class);}@Beanpublic UserApi UserApi(GtApiConfiguration apiConfiguration) {return ApiHelper.build(apiConfiguration).creatApi(UserApi.class);}// 还有其他所需API实体类自行注入...}
    

5.封装工具类

  • UniPushUtils

    package com.joolun.cloud.common.jiguang.util;import cn.hutool.core.collection.ListUtil;
    import cn.hutool.json.JSONObject;
    import com.getui.push.v2.sdk.api.PushApi;
    import com.getui.push.v2.sdk.api.UserApi;
    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.CidAliasListDTO;
    import com.getui.push.v2.sdk.dto.req.Settings;
    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.res.TaskIdDTO;
    import com.joolun.cloud.common.jiguang.dto.CIdAliasDTO;
    import com.joolun.cloud.common.jiguang.dto.UniPushDTO;
    import lombok.AllArgsConstructor;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.context.annotation.Configuration;import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;/*** @author yuanDing* @version 1.0* @date 2025-01-10 10:40* uniPush 1.0推送工具类*/
    @Slf4j
    @Configuration
    @AllArgsConstructor
    public class UniPushUtils {private final PushApi pushApi;private final UserApi userApi;/*** 单解绑* 解除绑定cid和userId(解除绑定别名)** @return*/public boolean unBoundingUserIdAndCId(CIdAliasDTO cIdAliasDTO) {return this.unBoundingUserIdAndCIdList(ListUtil.toList(cIdAliasDTO));}/*** 批量解绑* 解除绑定cid和userId(批量解除绑定别名)** @return*/public boolean unBoundingUserIdAndCIdList(List<CIdAliasDTO> cIdAliasDTOS) {return userApi.batchUnbindAlias(this.getCidAliasListDTO(cIdAliasDTOS)).isSuccess();}/*** 单绑* 绑定cid和userId(绑定别名)* 注意:1个cid只能绑定一个别名 1个别名最多只能绑定10个cid 超出以最后绑定为准** @return*/public boolean boundingUserIdAndCId(CIdAliasDTO cIdAliasDTO) {return this.boundingUserIdAndCIdList(new ArrayList<CIdAliasDTO>() {{add(cIdAliasDTO);}}).isSuccess();}/*** 多绑* 绑定cid和userId(绑定别名)* 注意:1个cid只能绑定一个别名 1个别名最多只能绑定10个cid 超出已最后绑定为准** @return*/public ApiResult<Void> boundingUserIdAndCIdList(List<CIdAliasDTO> cIdAliasDTOS) {return  userApi.bindAlias(this.getCidAliasListDTO(cIdAliasDTOS));}/*** 获取cid alias DTO* @param cIdAliasDTOS* @return*/private CidAliasListDTO getCidAliasListDTO(List<CIdAliasDTO> cIdAliasDTOS) {CidAliasListDTO cidAliasListDTO = new CidAliasListDTO();// 0 普通别名 1系统别名
    //        cidAliasListDTO.setAliasType("1");ArrayList<CidAliasListDTO.CidAlias> cidAliases = new ArrayList<>();cIdAliasDTOS.forEach(aliasDTO -> {CidAliasListDTO.CidAlias cidAlias = new CidAliasListDTO.CidAlias();cidAlias.setAlias(aliasDTO.getAlias());cidAlias.setCid(aliasDTO.getCId());cidAliases.add(cidAlias);});cidAliasListDTO.setDataList(cidAliases);return cidAliasListDTO;}/*** 根据别名单推 alias参数必填* @param uniPushDTO* @return*/public boolean pushByAlias(UniPushDTO uniPushDTO) {return pushApi.pushToSingleByAlias(this.getPushDTO(uniPushDTO , "alias")).isSuccess();}/*** 根据CId单推 cid参数必填* @param uniPushDTO* @return*/public boolean pushByCId(UniPushDTO uniPushDTO) {return pushApi.pushToSingleByCid(this.getPushDTO(uniPushDTO , "cid")).isSuccess();}/*** 根据别名多推送 alias参数必填* @param uniPushDTO* @return*/public boolean pushByAliasList(UniPushDTO uniPushDTO) {PushDTO pushDTO = new PushDTO();PushMessage pushMessage = new PushMessage();pushMessage.setTransmission(new JSONObject(uniPushDTO.getMessage()).toString());pushDTO.setPushMessage(pushMessage);ApiResult<TaskIdDTO> msg = pushApi.createMsg(pushDTO);if (msg.isSuccess()) {AudienceDTO audienceDTO = new AudienceDTO();audienceDTO.setTaskid(msg.getData().getTaskId());audienceDTO.setAsync(false);Audience audience = new Audience();for (String alias : uniPushDTO.getAliasList()) {audience.addAlias(alias);}audienceDTO.setAudience(audience);// 发送推送消息return  pushApi.pushListByAlias(audienceDTO).isSuccess();}return false;}/*** 获取推送实体类* @param uniPushDTO* @param type* @return*/public PushDTO<Audience> getPushDTO(UniPushDTO uniPushDTO , String type) {//根据cid进行单推PushDTO<Audience> pushDTO = new PushDTO<Audience>();// 设置推送参数,requestid需要每次变化唯一pushDTO.setRequestId(System.currentTimeMillis() + "");Settings settings = new Settings();pushDTO.setSettings(settings);//消息有效期,走厂商消息必须设置该值settings.setTtl(uniPushDTO.getTtl());//在线走个推通道时推送的消息体PushMessage pushMessage = new PushMessage();pushDTO.setPushMessage(pushMessage);//此格式的透传消息由 unipush 做了特殊处理,会自动展示通知栏。开发者也可自定义其它格式,在客户端自己处理。pushMessage.setTransmission(new JSONObject(uniPushDTO.getMessage()).toString());// 设置接收人信息Audience audience = new Audience();pushDTO.setAudience(audience);switch (type) {case "cid": uniPushDTO.getCIdList().forEach(audience::addCid);break;case "alias": uniPushDTO.getAliasList().forEach(audience::addAlias);break;}/*** 离线推送,暂未对接*//*        //设置离线推送时的消息体PushChannel pushChannel = new PushChannel();//安卓离线厂商通道推送的消息体AndroidDTO androidDTO = new AndroidDTO();Ups ups = new Ups();ThirdNotification thirdNotification = new ThirdNotification();ups.setNotification(thirdNotification);thirdNotification.setTitle("安卓离线展示的标题");thirdNotification.setBody("安卓离线展示的内容");thirdNotification.setClickType("intent");//注意:intent参数必须按下方文档(特殊参数说明)要求的固定格式传值,intent错误会导致客户端无法收到消息thirdNotification.setIntent("请填写固定格式的intent");androidDTO.setUps(ups);pushChannel.setAndroid(androidDTO);*//*** ios暂未对接 后续对接完放开注释*///ios离线apn通道推送的消息体
    //        Alert alert = new Alert();
    //        alert.setTitle("苹果离线通知栏标题");
    //        alert.setBody("苹果离线通知栏内容");
    //        Aps aps = new Aps();
    //        aps.setContentAvailable(0);
    //        aps.setSound("default");
    //        aps.setAlert(alert);
    //        IosDTO iosDTO = new IosDTO();
    //        iosDTO.setAps(aps);
    //        iosDTO.setType("notify");//        pushChannel.setIos(iosDTO);
    //        pushDTO.setPushChannel(pushChannel);return pushDTO;}}
    • UniPushDTO.java

      package com.joolun.cloud.common.jiguang.dto;import cn.hutool.json.JSONObject;
      import lombok.AllArgsConstructor;
      import lombok.Builder;
      import lombok.Data;
      import lombok.NoArgsConstructor;import java.util.List;/*** @author yuanDing* @version 1.0* @date 2025-01-10 9:40* uniPush 1.0个推推送领域类*/
      @Data
      @Builder
      @AllArgsConstructor
      @NoArgsConstructor
      public class UniPushDTO {/*** 单推必填* 推送消息体 JSON格式*  title:标题*  content:内容*  payload:承载数据 最好传JSON,与前端接收初一致!*/private Message message;/**/*** cid或alias二选一* 设备cid*/private List<String> cIdList;/*** cid或alias二选一* 设备别名*/private List<String> aliasList;/*** 离线推送必填,在线推送非必填* 消息离线时间设置,单位毫秒,-1表示不设离线, -1 ~ 3 * 24 * 3600 * 1000之间*/private Integer ttl;@Data@Builder@AllArgsConstructor@NoArgsConstructorpublic static class Message{/***  title* 必传*/private String title;/***  content* 必传*/private String content;// 必传private Object payload;}}
    • CIdAliasDTO.java

      package com.joolun.cloud.common.jiguang.entity;import lombok.AllArgsConstructor;
      import lombok.Builder;
      import lombok.Data;
      import lombok.NoArgsConstructor;/*** @author yuanDing* @version 1.0* @date 2025-01-10 9:40* uniPush 1.0个推推送别名设备领域类*/
      @Data
      @AllArgsConstructor
      @NoArgsConstructor
      @Builder
      public class CIdAliasDTO {/*** 设备cid*/private String cId;/*** 别名*/private String alias;}
      

6.测试推送


import cn.hutool.core.collection.ListUtil;
import cn.hutool.json.JSONObject;
import com.joolun.cloud.common.jiguang.dto.CIdAliasDTO;
import com.joolun.cloud.common.jiguang.dto.UniPushDTO;
import com.joolun.cloud.common.jiguang.util.UniPushUtils;
import com.joolun.cloud.mall.api.JooLunMallApiApplication;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.beans.factory.annotation.Autowired;import java.util.ArrayList;/*** unipush 推送测试*/
@SpringBootTest(classes = JooLunMallApiApplication.class)
public class UniPushTest {@Autowiredprivate UniPushUtils uniPushUtils;/*** 绑定别名测试*/@Testpublic void boundingTest() {boolean result = uniPushUtils.boundingUserIdAndCId(CIdAliasDTO.builder().alias("15065606797").cId("75328b5a6f777a1c853810340d9404ac").build());System.out.println("voidApiResult = " + result);}/*** 根据cid推送测试*/@Testpublic void pushByCIdTest() {UniPushDTO uniPushDTO = UniPushDTO.builder().cIdList(ListUtil.toList("3d9d4ceecd51c5b147a0e3ab6edb72e0"))
//                .ttl(-1).message(UniPushDTO.Message.builder().content( "村里发金条了,速归!").title("速归").payload("测试").build()).build();boolean result = uniPushUtils.pushByCId(uniPushDTO);System.out.println("result = " + result);}/*** 根据别名单推推送测试*/@Testpublic void pushByAliasTest() {UniPushDTO uniPushDTO = UniPushDTO.builder().aliasList(ListUtil.toList("1790974474554609665"))
//                .ttl(-1).message(UniPushDTO.Message.builder().content( "村里发金条了,速归!").title("聚城测试").payload("测试").build()).build();boolean result = uniPushUtils.pushByAlias(uniPushDTO);System.out.println("result = " + result);}/*** 根据别名多推推送测试*/@Testpublic void pushByAliasListTest() {UniPushDTO uniPushDTO = UniPushDTO.builder().aliasList(ListUtil.toList("1790974474554609665" , "15065606797" , "4565456"))
//                .ttl(-1).message(UniPushDTO.Message.builder().content( "村里发金条了,速归!").title("聚城测试").payload("测试").build()).build();boolean result = uniPushUtils.pushByAliasList(uniPushDTO);System.out.println("result = " + result);}/*** 单解绑测试*/@Testpublic void unBoundingTest() {boolean result = uniPushUtils.unBoundingUserIdAndCId( CIdAliasDTO.builder().alias("1790974474554609665").cId("3d9d4ceecd51c5b147a0e3ab6edb72e0").build());System.out.println("result = " + result);}
}

三、uniapp端订阅消息事件(未配置不影响推送,用户收到消息后的后续操作)

  • App.vue

    onLaunch: function() {service.saveLogInfo("********************** App启动 ************************")//#ifdef APP-PLUSvar info = plus.push.getClientInfo() // 获取clientIdconsole.log(`info` , info)if (info && info.clientid) {Vue.prototype.$publicStore.cid = info.clientid}// 以下为订阅监听消息事件,如有需要放开// 使用5+App的方式进行监听消息推送 点击消息回调plus.push.addEventListener("click", function(msg) {if (msg.payload) {// 订单下单通知if (msg.payload.signature === 'order') {uni.navigateTo({url: '/pages/mall/order/list?status=1'})}}}, false);// 监听在线消息事件plus.push.addEventListener("receive", function(msg) {//业务代码console.log("recevice:" + JSON.stringify(msg))}, false);//#endif},
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/4126.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[JavaScript] 深入理解流程控制结构

文章目录 1. **if-else 语句**基本语法&#xff1a;示例&#xff1a;扩展&#xff1a;else if 2. **switch-case 语句**基本语法&#xff1a;示例&#xff1a;注意事项&#xff1a; 3. **for 循环**基本语法&#xff1a;示例&#xff1a;扩展&#xff1a;for-in 和 for-of 4. *…

庄小焱——2024年博文总结与展望

摘要 大家好&#xff0c;我是庄小焱。岁末回首&#xff0c;2024 年是我在个人成长、博客创作以及生活平衡方面收获颇丰的一年。这一年的经历如同璀璨星辰&#xff0c;照亮了我前行的道路&#xff0c;也为未来的发展奠定了坚实基础。 1. 个人成长与突破 在 2024 年&#xff0c…

八大排序--冒泡排序

目录 什么是冒泡排序&#xff1f; 算法步骤 举例说明 代码实现&#xff08;java&#xff09; 什么是冒泡排序&#xff1f; 冒泡排序&#xff08;英语&#xff1a;Bubble sort&#xff09;是一种简单的排序算法。由于在算法的执行过程中&#xff0c;较小的元…

新阿里云买服务器配置需手动配置80端口

新买阿里云服务器需手动配置80&#xff0c;端口才可以访问nginx CentOS系统 安装nginx 1. 安装 Nginx yum install nginx 2. 启动 Nginx 服务 systemctl start nginx 3. 修改默认网页 cd /usr/share/nginx/ echo "666" >index.html cat index.html 访问ngin最后…

如何下载对应城市的地理json文件

这里采用的是阿里地图工具进行查找&#xff1a; DataV.GeoAtlas地理小工具系列 由阿里云DataV数据可视化团队出品,多年深耕数据可视化领域,数据大屏业务开拓者和领航者。致力用震撼而清晰的视觉语言,让更多人读懂大数据,受惠数据驱动的决策方式 第一步打开网站 &#xff1a; …

“libcudart,so.1 1.0“ loss解决方案

sudo find /usr/ -name libcudart.so.11.0 2 > /dev/null参考链接&#xff1a;1、https://stackoverflow.com/questions/70967651/could-not-load-dynamic-library-libcudart-so-11-0 2、https://blog.csdn.net/weixin_43786241/article/details/109203995

通过图形界面展现基于本地知识库构建RAG应用

1. 客户需求 快速完成概念验证(PoC)通过图形界面快速完成演示本地私有数据对比不同模型和成本&#xff0c;决定如何部署 2. 阿里云基于本地知识库构建RAG应用 参考方案&#xff1a; 百炼本地知识库方案 解决方案&#xff1a; FastAPI Gradio Llamaindex qwen-plus 主要三大…

安路FPGA开发工具TD:问题解决办法 及 Tips 总结

安路科技&#xff08;Anlogic&#xff09;是一家专注于高性能、低功耗可编程逻辑器件&#xff08;FPGA&#xff09;设计和生产的公司。其提供的开发工具TD&#xff08;TangDynasty&#xff09;是专门为安路FPGA系列产品设计的集成开发环境&#xff08;IDE&#xff09;。以下是对…

聚铭网络6款产品入选CCIA《网络安全专用产品指南》

近日&#xff0c;中国网络安全产业联盟CCIA正式发布《网络安全专用产品指南》&#xff08;第二版&#xff09;&#xff08;以下简称《指南》&#xff09;。聚铭网络凭借突出技术优势、创新能力以及市场积累&#xff0c;旗下安全产品成功入选防火墙、网络安全审计、日志分析、网…

渗透笔记1

第一天 工具&#xff1a;cs cobalt strike 4.9 / msf kali &#xff08;自带 Ubuntu&#xff09; cs cobalt strike 4.9&#xff1a;server-client server部署在云服务器上&#xff0c;client分别在各地&#xff0c;与server相连接&#xff1b;连接上后就可以共享上线主机。…

计算机网络 (51)鉴别

前言 计算机网络鉴别是信息安全领域中的一项关键技术&#xff0c;主要用于验证用户或信息的真实性&#xff0c;以及确保信息的完整性和来源的可靠性。 一、目的与重要性 鉴别的目的是验明用户或信息的正身&#xff0c;对实体声称的身份进行唯一识别&#xff0c;以便验证其访问请…

《Vue3 九》动画

Vue 提供了一些内置组件和对应的 API 来完成动画&#xff0c;利用它们可以方便地实现动画效果。 <transition> 内置组件&#xff1a; Vue 提供了 <transition> 内置组件&#xff0c;可以给任意元素或组件添加进入/离开时的动画效果。在条件渲染、动态组件、改变 …

人工智能之数学基础:线性代数中的线性相关和线性无关

本文重点 在线性代数的广阔领域中,线性相关与线性无关是两个核心概念,它们对于理解向量空间、矩阵运算、线性方程组以及人工智能等问题具有至关重要的作用。 定义与直观理解 当存在一组不全为0的数x1,x2,...,xn使得上式成立的时候,那么此时我们可以说向量组a1,a2...,an…

【王树森搜素引擎技术】相关性03:文本匹配(TF-IDF、BM25、词距)

链路上的相关性模型 召回海选 打分量&#xff1a;数万模型&#xff1a;文本匹配分数线性模型或双塔BERT模型 粗排 打分量&#xff1a;数千模型&#xff1a;双塔BERT&#xff0c;或单塔BERT模型&#xff08;交叉&#xff09; 精排 打分量&#xff1a;数百模型&#xff1a;单塔B…

owasp SQL 注入-03 (原理)

1: 先看一下注入界面: 点submit 后&#xff0c;可以看到有语法报错&#xff0c;说明已经起作用了: 报如下的错误: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near at line 1 2:…

项目实战--网页五子棋(游戏大厅)(3)

我们的游戏大厅界面主要需要包含两个功能&#xff0c;一是显示用户信息&#xff0c;二是匹配游戏按钮 1. 页面实现 hall.html <!DOCTYPE html> <html lang"ch"> <head><meta charset"UTF-8"><meta name"viewport"…

【Idea】编译Spring源码 read timeout 问题

Idea现在是大家工作中用的比较多的开发工具&#xff0c;尤其是做java开发的&#xff0c;那么做java开发&#xff0c;了解spring框架源码是提高自己技能水平的一个方式&#xff0c;所以会从spring 官网下载源码&#xff0c;导入到 Idea 工具并编译&#xff0c;但是发现build的时…

5 分钟复刻你的声音,一键实现 GPT-Sovits 模型部署

想象一下&#xff0c;只需简单几步操作&#xff0c;就能生成逼真的语音效果&#xff0c;无论是为客户服务还是为游戏角色配音&#xff0c;都能轻松实现。GPT-Sovits 模型&#xff0c;其高效的语音生成能力为实现自然、流畅的语音交互提供了强有力的技术支持。本文将详细介绍如何…

网络变压器的分类

网络变压器是局域网(LAN)中各级网络设备中必备的元件。它们的主要功能是传输数据&#xff0c;增强信号&#xff0c;并提供电气隔离&#xff0c;以防雷保护和匹配阻抗。网络变压器也被称为数据泵或网络隔离变压器。它们广泛应用于网络交换机、路由器、网卡、集线器等设备中。 网…

大数据时代的璀璨明珠:机器学习引领的智能应用革新与深度融合探索

欢迎大家阅读&#xff1a; 羑悻的小杀马特.-CSDN博客羑悻的小杀马特.擅长C/C题海汇总,AI学习,c的不归之路,等方面的知识,羑悻的小杀马特.关注算法,c,c语言,ubuntu,linux,数据结构领域.https://blog.csdn.net/2401_82648291?spm1010.2135.3001.5343 目录 技术前沿&#xff1a…