当前位置: 首页 > news >正文

uniapp:使用DCloud的uni-push推送消息通知(在线模式)java实现

uniapp:使用DCloud的uni-push推送消息通知(在线模式)java实现

1.背景

今天开发app的时候遇到一个需求:
业务在出发特定条件的时候向对应的客户端推送消息通知。
为什么选择在线模式,因为我们使用的是德邦类似的手持终端,如果是在线模式需要配置厂商信息,OPPO或者小米,华为那些,额。

2.实现途径

我这里的技术栈
前端:前端uniapp
后端:java
查阅了晚上很多的文档使用的是uniapp自带的uni-push
这里我使用的是下面截图的1.0老版本的。
额!其实全程不需要登录个推的官网创建应用。
因为:其实uniapp的push调用的就是个推的接口。所以我们在代码用到的所以的appid和appKey,masterSecret还有appid在uniapp的DCloud中就可以获得。

在这里插入图片描述

3.代码实现(后端java)

这里谷咕咕写了一个junit测试类,这里的代码是可以直接复制粘贴就可以用的
当然在此之前要导入个推的相关依赖。
有些依赖会下载失败,所以要导入一个资源地址
注意的是:https不然会报错,额也有可能只是我报错了
这里所有的信息填完之后,你会发现少一个setClientId()
这个其实就是用户安装完app后的一个标识,唯一标识当前用户app(获取看下面的前端代码

<repositories><repository><id>public</id><name>aliyun nexus</name><url>https://maven.aliyun.com/repository/public</url><releases><enabled>true</enabled></releases></repository><repository><id>getui-nexus</id><url>http://mvn.gt.getui.com/nexus/content/repositories/releases/</url></repository></repositories><!--消息推送--><!-- https://mvnrepository.com/artifact/com.getui.push/restful-sdk --><dependencies><dependency><groupId>com.getui.push</groupId><artifactId>restful-sdk</artifactId><version>1.0.0.1</version></dependency><dependency><groupId>com.gexin.platform</groupId><artifactId>gexin-rp-sdk-http</artifactId><version>4.1.2.3</version></dependency></dependencies>

在这里插入图片描述

/*** 测试uniapp 发送在线消息通知*/@Testpublic void pushInfo(){// host     appKey   masterSecretIGtPush push  = new IGtPush("https://sdk.open.api.igexin.com/apiex.htm","appKey", "masterSecret");TransmissionTemplate t = new TransmissionTemplate();t.setAppId("appId");t.setAppkey("appKey");String s = UUID.randomUUID().toString();//推送格式t.setTransmissionContent("{title:\"通知标题\",content:\"您有一条新通知,点击查看\",payload:\""+s+"\"}");//1:强制应用启动 2:等待应用启动t.setTransmissionType(1);SingleMessage message = new SingleMessage();// 把透传消息设置到消息模板中message.setData(t);// 设置优先级message.setPriority(1);// 是否进行离线发送message.setOffline(true);// 离线有效时间,单位为毫秒message.setOfflineExpireTime(1000 * 600);// 可选,1为wifi,0为不限制网络环境。根据手机处于的网络情况,决定是否下发message.setPushNetWorkType(0);//按照用户的cid推送Target target = new Target();target.setAppId("appId");target.setClientId("f00a7f3a9a11b5b7ab71e32a696a7370");      // 在此填写设备cidIPushResult ret = null;try {ret = push.pushMessageToSingle(message, target);} catch (RequestException e) {e.printStackTrace();ret = push.pushMessageToSingle(message, target, e.getRequestId());}if (ret != null) {System.out.println(ret.getResponse().toString());} else {System.out.println("服务器响应异常");}}

4.代码实现(前端)

前端app.vue
这个文件就是用于在onLaunch生命周期函数中接受到到消息通知的推送。
其中一段代码就是解决获得cid的用户唯一标识的
这里谷咕咕只是为了直接拿到用了弹窗,大家开发的时候可以首次打开app的时候可以存储到数据库中

setTimeout(function(){var pinf = plus.push.getClientInfo();console.log(pinf +'============')var cid = pinf && pinf.clientid || '';console.log(cid +'============')setTimeout(() => {uni.showModal({title: '发现cid ' + cid,content: '请到App store进行升级',showCancel: false})}, 5000);
},2000)

上面这段代码为什么用延时setTimeout?因为有可能plus没有加载出来,那样拿到的cid就是null

其他的就是监听个推的addEventListener
完整代码:

<script>import {URLPaBu} from './store/mutation-types';function requestToJavaBackend() {uni.request({url: 'http://' + URLPaBu + '/app/getNewestVersion', // 替换成你的后端 Java 服务的API地址method: 'GET', // 或 'POST',根据你的需求选择请求方法success: (res) => {if (true) {var pinf = plus.push.getClientInfo();var cid = pinf && pinf.clientid || '';setTimeout(() => {uni.showModal({title: '发现cid ' + cid,content: '请到App store进行升级',showCancel: false})}, 1000);}},fail: (err) => {uni.showModal({title: '版本校验错误',content: '版本校验错误,联系管理员',showCancel: false})// 在这里处理请求失败后的逻辑},});}export default {onLaunch() {uni.onPushMessage((res) => {console.log("收到推送消息:",res) //监听推送消息})setTimeout(function(){var pinf = plus.push.getClientInfo();console.log(pinf +'============')var cid = pinf && pinf.clientid || '';console.log(cid +'============')setTimeout(() => {uni.showModal({title: '发现cid ' + cid,content: '请到App store进行升级',showCancel: false})}, 5000);},2000)// 加载系统信息this.$store.dispatch('SystemInfo');// 在应用启动时执行一次任务// 每隔一段时间执行一次任务// requestToJavaBackend()// setInterval(() => {// 	requestToJavaBackend()// }, 5000); // 30秒let timer = false;plus.push.addEventListener("click", (msg) => {console.log("+-------------------+++");clearTimeout(timer);timer = setTimeout(() => {console.log(1111, msg);if (msg.payload) {uni.navigateTo({url: msg.payload})}}, 1500)}, false)plus.push.addEventListener("receive", (msg) => {console.log("++++++++++++++++++++++++");console.log(msg);if ("LocalMSG" == msg.payload) {} else {if (msg.type == 'receive') {var options = {cover: false,title: msg.title};plus.push.createMessage(msg.content, msg.payload, options);}}}, false)},onShow() {},onHide() {},methods: {},}
</script><style lang="scss">@import "@/uni_modules/uview-ui/index.scss";@import "@/static/style.scss";
</style>

整体的代码就是这样,我们跑一下junit代码就这么实现了

在这里插入图片描述

5.HBuilder配置

需要在mainfest中打开push的配置

在这里插入图片描述
然后按照指示的步骤开通,注意app包名的对应

6.注意:需要注意的是

1.java代码中的链接需要https
2.使用的是DCloud中的app信息
3.还有就是必须打包成apk后在手机上安装后才能获取cid,在hbuilder中在基座上运行你会发现也可以获取cid,但是那个cid用了之后会特使AppError

相关文章:

uniapp:使用DCloud的uni-push推送消息通知(在线模式)java实现

uniapp:使用DCloud的uni-push推送消息通知&#xff08;在线模式&#xff09;java实现 1.背景 今天开发app的时候遇到一个需求&#xff1a; 业务在出发特定条件的时候向对应的客户端推送消息通知。 为什么选择在线模式&#xff0c;因为我们使用的是德邦类似的手持终端&#xf…...

【简说八股】面试官:你知道什么是AOP么?

回答 AOP(Aspect-Oriented Programming)&#xff0c;即面向切面编程&#xff0c;是一种编程范式&#xff0c;它的主要思想是将应用程序中的横切关注点&#xff08;如日志记录、性能统计、安全控制等&#xff09;从业务逻辑中剥离出来&#xff0c;然后通过特殊的方式将这些横切…...

ASUS华硕天选5笔记本电脑FX607JV原装出厂Win11系统下载

ASUS TUF Gaming F16 FX607JV天选五原厂Windows11系统 适用型号&#xff1a; FX607JU、FX607JI、FX607JV、 FX607JIR、FX607JVR、FX607JUR 下载链接&#xff1a;https://pan.baidu.com/s/1l963wqxT0q1Idr98ACzynQ?pwd0d46 提取码&#xff1a;0d46 原厂系统自带所有驱动、…...

Unity(第二十一部)动画的基础了解(感觉不了解其实也行)

1、动画组件老的是Animations 动画视频Play Automatically 是否自动播放Animate Physics 驱动方式&#xff0c;勾选后是物理驱动Culling Type 剔除方式 默认总是动画化就会一直执行下去&#xff0c;第二个是基于渲染播放&#xff08;离开镜头后不执行&#xff09;&#xff0c; …...

写时复制简介

写时复制技术(Copy on Write)是比较常用的一种技术&#xff0c;它的主要目的是延迟减少以及延迟内存的分配&#xff0c;增加执行效率&#xff0c;只有在真正进行写操作的过程中才会真正分配物理资源。同时&#xff0c;也可以保护数据在系统崩溃时出现的丢失。比如&#xff0c;我…...

运行Python文件时出现‘utf-8’code can‘t decode byte 如何解决?(如图)

如图 亦或者出现“SyntaxError: Non-UTF-8 code starting with \xbb ” 出现这种问题往往是编码格式导致的&#xff0c;我们可以在py文件中的第一行加入以下代码&#xff1a; # codingutf-8或者 # codinggdk优先使用gbk编码 解释一下常用的两种编码格式&#xff1a; utf-…...

行为树入门:BehaviorTree.CPP Groot2练习(叶子节点)(2)

以《行为树BehaviorTree学习记录1_基本概念》练习。 1 SequenceNode顺序控制节点 代码下载 git clone https://gitee.com/Luweizhiyuan2020/ros2_bt.git例程 1.1 sequence 顺序执行 下载版本SequenceNode1。 1.2 ReactiveSequence 异步执行 注意&#xff1a; ①only a…...

leetcode-字符串中的单词数

434. 字符串中的单词数 题解&#xff1a; 这个问题可以通过遍历字符串&#xff0c;当遇到非空格字符时&#xff0c;判断其前一个字符是否为空格&#xff0c;如果是&#xff0c;则说明这是一个新的单词的开始&#xff0c;计数器加一。最后返回计数器的值即可。 class Solutio…...

一些C语言题目

求10个整数中最大值 #include <stdio.h>//求10个整数中最大值 int main() {int arr[10]{2,5,8,6,19,1,7,3,11,3};int i 0;int max 0;/*for(i 0;i < 10;i){scanf("%d",&arr[i]);}*/for(i 0;i < 10;i){if(arr[i] > max)max arr[i];}printf(&q…...

JVM相关问题

JVM相关问题 一、Java继承时父子类的初始化顺序是怎样的&#xff1f;二、JVM类加载的双亲委派模型&#xff1f;三、JDK为什么要设计双亲委派模型&#xff0c;有什么好处&#xff1f;四、可以打破JVM双亲委派模型吗&#xff1f;如何打破JVM双亲委派模型&#xff1f;五、什么是内…...

32单片机基础:旋转编码器计次

接线图如上图所示。 我们初始化一下PB0和PB1两个GPIO口外设中断&#xff0c;当然&#xff0c;这里只初始化一个外部中断也能完成功能的对于编码器而言&#xff0c;下图所示为正转的波形。如果把一相的下降沿用作触发中断&#xff0c;在中断时刻读取另一相的电平&#xff0c;正…...

【C++】vector的使用和模拟实现(超级详解!!!!)

文章目录 前言1.vector的介绍及使用1.1 vector的介绍1.2 vector的使用1.2.1 vector的定义1.2.2 vector iterator 的使用1.2.3 vector 空间增长问题1.2.3 vector 增删查改1.2.4 vector 迭代器失效问题。&#xff08;重点!!!!!!&#xff09;1.2.5 vector 在OJ中有关的练习题 2.ve…...

GO学习记录

这里写目录标题 00 环境01 语言基础二级目录三级目录 00 环境 参考的&#xff1a;https://www.liwenzhou.com/posts/Go/install/ 编译运行&#xff1a; go mod init <项目名> // 在目录下创建项目 go mod init <项目名> // 编译go run <文件名>.go …...

迭代器模式(Iterator Pattern)

定义 迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为型设计模式&#xff0c;它提供了一种方法来顺序访问聚合对象中的各个元素&#xff0c;而不需要暴露该对象的内部表示。迭代器模式使得客户端代码能够独立于聚合对象的具体实现进行遍历操作。 在迭代器模式…...

KL divergence(KL 散度)详解

本文用一种浅显易懂的方式说明KL散度。 参考资料 KL散度本质上是比较两个分布的相似程度。 现在给出2个简单的离散分布&#xff0c;称为分布1和分布2. 分布1有3个样本&#xff0c; 其中A的概率为50%, B的概率为40%&#xff0c;C的概率为10% 分布2也有3个样本&#xff1a; 其…...

AzerothCore@FreeBSD安装记录

尝试在FreeBSD系统下安装AzerothCore 首先安装相关软件 pkg install cmake mysql80-server boost-all装完mysql之后提示&#xff1a; MySQL80 has a default /usr/local/etc/mysql/my.cnf, remember to replace it with your own or set mysql_optfile"$YOUR_CNF_FILE i…...

vue .env配置环境变量

最近使用的不同的环境有点多了&#xff0c;接口文件ip一直在替换打包&#xff0c;看了下文档&#xff0c;有个方案使用.env配置不同的环境运行打包 vue 现在已经兼容了env &#xff0c;无需下载 创建文件&#xff08;根目录&#xff09; 创建.env.development&#xff0c;.env.…...

ThreadLocal介绍

文章目录 ThreadLocal源码分析&#xff1a;set方法get方法remove方法 ThreadLocal内存泄漏问题 ThreadLocal ThreadLocal提供了线程局部变量&#xff0c;每个线程都可以通过set和get方法来对这个变量进行操作&#xff0c;但不会和其他线程的局部变量冲突&#xff0c;实现了线程…...

【Linux系统化学习】线程概念

目录 线程的概念 线程的引出 什么是线程 理解线程比进程更加的轻量化 线程的优点 现成的缺点 线程异常 线程用途 Linux进程VS线程 线程的简单现象 线程的概念 有关操作系统的书籍或者课本都会这样描述线程&#xff1a; 线程是比进程轻量化的一种执行流线程是进程内部…...

Redis集群模式

分片 面试题&#xff1a;为什么Redis的最大槽位是16384&#xff1f; 翻译一下作者的话&#xff1a; 解读一下&#xff1a;...

G-Helper完整指南:轻量级华硕笔记本控制工具,开源替代Armoury Crate的明智之选

G-Helper完整指南&#xff1a;轻量级华硕笔记本控制工具&#xff0c;开源替代Armoury Crate的明智之选 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, S…...

终极AMD Ryzen调试工具:免费开源的硬件掌控神器

终极AMD Ryzen调试工具&#xff1a;免费开源的硬件掌控神器 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcode.…...

JMeter并发与持续性压测:从瞬时吞吐到系统韧性的工程实践

1. 为什么“并发持续”不是简单叠加&#xff0c;而是压测成败的分水岭 很多人第一次做接口性能测试时&#xff0c;会下意识把JMeter当成“高级curl”——写个HTTP请求&#xff0c;加个线程组&#xff0c;跑50个用户&#xff0c;看响应时间飘不飘。结果报告一出来&#xff0c;平…...

入侵检测中可解释机器学习的局限与评估:超越特征重要性神话

1. 项目概述与核心问题在网络安全领域&#xff0c;入侵检测系统&#xff08;IDS&#xff09;正越来越多地依赖机器学习模型来识别恶意流量。这些模型&#xff0c;尤其是深度神经网络&#xff0c;虽然性能强大&#xff0c;但其内部决策过程往往像一个“黑盒”&#xff0c;难以理…...

如何快速掌握游戏MOD制作:LSLib开源工具箱的终极指南

如何快速掌握游戏MOD制作&#xff1a;LSLib开源工具箱的终极指南 【免费下载链接】lslib Tools for manipulating Divinity Original Sin and Baldurs Gate 3 files 项目地址: https://gitcode.com/gh_mirrors/ls/lslib 你是否曾经梦想过修改《神界原罪》或《博德之门3》…...

IPXWrapper完整教程:让经典游戏在现代Windows系统重获联机能力

IPXWrapper完整教程&#xff1a;让经典游戏在现代Windows系统重获联机能力 【免费下载链接】ipxwrapper 项目地址: https://gitcode.com/gh_mirrors/ip/ipxwrapper 你是否怀念《星际争霸》《帝国时代》《红色警戒2》等经典游戏的局域网对战乐趣&#xff1f;在现代Windo…...

什么是缓存穿透、缓存击穿、缓存雪崩?分别如何解决?

Redis 是一个开源的内存数据存储系统&#xff0c;广泛应用于缓存、消息队列等场景。尽管 Redis 在高并发环境下十分高效&#xff0c;但在使用过程中&#xff0c;可能会遇到缓存穿透、缓存击穿和缓存雪崩等问题。本文将详细介绍这三者的概念及其解决方案&#xff0c;并通过 Java…...

Python 开发者五分钟快速上手 Taotoken 调用 OpenAI 兼容大模型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Python 开发者五分钟快速上手 Taotoken 调用 OpenAI 兼容大模型 对于已经熟悉 Python 和 OpenAI SDK 的开发者来说&#xff0c;接入…...

明日方舟游戏资源完整指南:三步获取所有高清素材与游戏数据

明日方舟游戏资源完整指南&#xff1a;三步获取所有高清素材与游戏数据 【免费下载链接】ArknightsGameResource 明日方舟客户端素材 项目地址: https://gitcode.com/gh_mirrors/ar/ArknightsGameResource 还在为明日方舟素材搜集而烦恼&#xff1f;这个开源资源库为你提…...

利用Taotoken多模型广场为不同业务场景选择最优模型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 利用Taotoken多模型广场为不同业务场景选择最优模型 当你的产品需要集成AI能力时&#xff0c;面对市场上众多的模型提供商和复杂的…...