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.mzph.cn/pingmian/67670.shtml

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

相关文章

JS宏进阶: 工厂函数与构造函数

一、构造函数 在JavaScript中&#xff0c;构造函数是一种用于创建和初始化对象的特殊函数。构造函数的名字通常以大写字母开头&#xff0c;以区分于普通函数。通过new关键字调用构造函数&#xff0c;可以创建一个新的实例对象&#xff0c;并自动执行构造函数内部的代码来初始化…

03_UI自适应

因为Canvas大小是始终和屏幕一致的 所以设置Canvas的屏幕大小 通常设置为1920 * 1080 又因为屏幕的图像及按钮如果想适配各种显示屏需要锁定长或者宽&#xff0c; 之后利用钉子将其他图像利用创建空节点定在左右或者上下两侧 比如unity编辑器通常是锁定宽的&#xff0c;那我…

网络安全——常用语及linux系统

一、网络安全概念及法规 网络安全&#xff1a;网络空间安全 cyber security 信息系统&#xff1a;由计算机硬件、网络和通信设备、计算机软件、信息资源、信息用户和规章制度组成的已处理信息流为目的的人机一体化系统 信息系统安全三要素&#xff08;CIA&#xff09; 保密…

算法日记6.StarryCoding P52:我们都需要0(异或)

一、题目 二、题解&#xff1a; 1、对于这道题&#xff0c;题意为让我们寻找一个数x使得 b[i]a[i]^x&#xff0c; 并且b[1]^b[2]^b[3]^ b[4]^b[5]....0 2、我们把b[i]给拆开&#xff0c;可以得到 3、又因为^满足结合律&#xff0c;因此&#xff0c;可以把括号给拆开 4、接着…

提问:玩游戏输入法总弹出来咋回事哎

玩游戏时输入法总弹出来的问题&#xff0c;通常与电脑的输入法设置、操作系统配置以及游戏程序的兼容性有关。以下是一些常见的解决方法&#xff1a; 一、修改输入法快捷键 禁用不必要的输入法&#xff1a; 在系统的语言设置中&#xff0c;暂时禁用非活动的输入法&#xff0c;…

通过内核模块按fd强制tcp的quickack方法

一、背景 tcp的quickack功能是为了让ack迅速回发&#xff0c;快速响应&#xff0c;减少网络通讯时延&#xff0c;属于一个优化项&#xff0c;但是tcp的quickack是有配额限制的&#xff0c;配置是16个quick&#xff0c;也就是短时间内quickack了16次以后&#xff0c;这个配额为…

csp22前2题

一幅长宽分别为 nn 个像素和 mm 个像素的灰度图像可以表示为一个 nmnm 大小的矩阵 AA。 其中每个元素 AijAij&#xff08;0≤i<n0≤i<n、0≤j<m0≤j<m&#xff09;是一个 [0,L)[0,L) 范围内的整数&#xff0c;表示对应位置像素的灰度值。 具体来说&#xff0c;一…

《汽车与驾驶维修》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答&#xff1a; 问&#xff1a;《汽车与驾驶维修》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的第二批认定学术期刊。 问&#xff1a;《汽车与驾驶维修》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;中国机械工业联合会…

web前端1--基础

&#xff08;时隔数月我又来写笔记啦~&#xff09; 1、下载vscode 1、官网下载&#xff1a;Visual Studio Code - Code Editing. Redefined 2、步骤&#xff1a; 1、点击同意 一直下一步 勾一个创建桌面快捷方式 在一直下一步 2、在桌面新建文件夹 拖到vscode图标上 打开v…

vue 学习笔记 - 创建第一个项目 idea

1、安装Vue CLI 查看npm版本号 &#xff08;可跳过&#xff09; % npm -v 11.0.0安装Vue CLI % npm install -g vue/cli2、创建项目 进入工程文件目录 % cd /Users/ruizhifeng/work/aina-client查看vue 版本号 &#xff08;可跳过&#xff09; % vue --version vue/cli 5…

网络安全---CMS指纹信息实战

CMS简介 CMS&#xff08;Content Management System&#xff09;指的是内容管理系统&#xff0c;如WordPress、Joomla等。CMS系统非常常见&#xff0c;几乎所有大型网站都使用CMS来管理其网站的内容。由于常见CMS的漏洞较多&#xff0c;因此黑客将不断尝试利用这些漏洞攻击CMS…

基于SSM的自助购药小程序设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

anaconda安装和环境配置

文章目录 一、Anaconda下载1.从官网直接下载&#xff1a;2.从镜像站中下载&#xff1a; 二、Anaconda安装三、检测是否有Anaconda配置anaconda环境 四、 Anaconda创建多个python环境&#xff08;方便管理项目环境&#xff09;1.查看conda有哪些环境2.创建python3.6的环境3.激活…

DDD - 如何设计支持快速交付的DDD技术中台

文章目录 Pre概述打造快速交付团队烟囱式的开发团队(BAD)大前端技术中台(GOOD) 技术中台的特征简单易用的技术中台建设总结 Pre DDD - 软件退化原因及案例分析 DDD - 如何运用 DDD 进行软件设计 DDD - 如何运用 DDD 进行数据库设计 DDD - 服务、实体与值对象的两种设计思路…

【C++】结构体(下)

4、结构体指针 作用&#xff1a;通过指针访问结构体中的成员 利用操作符“----->”可以通过结构体指针访问结构体成员。 示例&#xff1a; #include<iostream> #include<string> using namespace std; struct student {//姓名string name;//年龄int age;//分数…

道格拉斯-普克算法(DP)轮廓点精简(Python)

1、介绍 道格拉斯-普克算法由David H. Douglas和Thomas K. Peucker于1973年提出&#xff0c;主要用于简化曲线或折线。而实际中&#xff0c;激光点云的边缘点非常粗糙&#xff0c;如果直接将点进行连接&#xff0c;锯齿问题严重。经过DP算法处理后&#xff0c;数据显示会比较光…

【机器学习实战入门项目】使用深度学习创建您自己的表情符号

深度学习项目入门——让你更接近数据科学的梦想 表情符号或头像是表示非语言暗示的方式。这些暗示已成为在线聊天、产品评论、品牌情感等的重要组成部分。这也促使数据科学领域越来越多的研究致力于表情驱动的故事讲述。 随着计算机视觉和深度学习的进步&#xff0c;现在可以…

【unity进阶篇】不同Unity版本对应的C# 版本和API 兼容级别(Api Compatibility Level)选择

考虑到每个人基础可能不一样&#xff0c;且并不是所有人都有同时做2D、3D开发的需求&#xff0c;所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】&#xff1a;主要讲解C#的基础语法&#xff0c;包括变量、数据类型、运算符、…

线段树优化dp,abc389F - Rated Range

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 F - Rated Range 二、解题报告 1、思路分析 考虑定义 f(i, j) 为 初始分…

MySQL 主从复制原理及其工作过程的配置

一、MySQL主从复制原理 MySQL 主从同步是一种数据库复制技术&#xff0c;它通过将主服务器上的数据更改复制到一个或多个从服务器&#xff0c;实现数据的自动同步。 主从同步的核心原理是将主服务器上的二进制日志复制到从服务器&#xff0c;并在从服务器上执行这些日志中的操作…