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

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

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

相关文章

Springboot+vue的考务报名平台(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的考务报名平台&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的考务报名平台&#xff0c;采用M&#xff08;model&#xff0…

4核8G服务器选阿里云还是腾讯云?价格性能对比

4核8G云服务器多少钱一年&#xff1f;阿里云ECS服务器u1价格955.58元一年&#xff0c;腾讯云轻量4核8G12M带宽价格是646元15个月&#xff0c;阿腾云atengyun.com整理4核8G云服务器价格表&#xff0c;包括一年费用和1个月收费明细&#xff1a; 云服务器4核8G配置收费价格 阿里…

星际争霸之小霸王之小蜜蜂(一)--窗口界面设计

目录 前言 一、安装pygame库 1、pygame库简介 2、在windows系统安装pygame库 二 、搭建游戏框架 1、创建游戏窗口 2、改变窗口颜色 总结 前言 大家应该都看过或者都听说过python神书“大蟒蛇”&#xff0c;上面有一个案例是《外星人入侵》&#xff0c;游戏介绍让我想起了上…

yolov8-seg dnn调用

接上篇一直更换torch、opencv版本都无法解决这个问题&#xff08;seg调用dnn报错&#xff09;。那问题会不会出在yolov8源码本身呢。yolov8的讨论区基本都看过了&#xff0c;我决定尝试在其前身yolov5的讨论区上找找我不信没人遇到这个问题。很快找到下面的讨论第一个帖子&…

智慧应急:构建全方位、立体化的安全保障网络

一、引言 在信息化、智能化快速发展的今天&#xff0c;传统的应急管理模式已难以满足现代社会对安全保障的需求。智慧应急作为一种全新的安全管理模式&#xff0c;旨在通过集成物联网、大数据、云计算、人工智能等先进技术&#xff0c;实现对应急事件的快速响应、精准决策和高…

2018-02-14 新闻内容爬虫【上学时做论文自己爬新闻数据,原谅我自己懒发的图片】

2018-02-14新闻内容爬虫【上学时做论文自己爬新闻数据&#xff0c;原谅我自己懒发的图片】资源-CSDN文库https://download.csdn.net/download/liuzhuchen/88878591爬虫过的站点&#xff1a; 1QQ新闻 1&#xff0c;准备爬取滚动新闻页面 2 通过F12 开发工具查找发现&#xff…

51单片机晶振频率与定时中断产生pwn占空比

单片机中晶振频率为12MHZ的机器周期怎么算? 1、系统晶振频率是12M&#xff0c;则机器周期&#xff1d;12&#xff0f;12&#xff1d;1us&#xff1b; 2、定时1ms&#xff1d;1&#xff0a;1000&#xff1d;1000us&#xff1b; 3、工作在方式0下&#xff1a;最大计数值是2&a…

element el-table表格内容宽度自适应,不换行,不隐藏

2024.2.27今天我学习了如何用el-table实现表格宽度的自适应&#xff0c;当我们动态渲染表格数据的时候&#xff0c;有时候因为内容太多会出现挤压换行的效果&#xff1a; 我们需要根据内容的最大长度设置动态的宽度&#xff0c;这边我在utils里面封装了一个js&#xff1a; //…

【Android移动开发】Windows10平台安装Android Studio与人工智能算法模型部署案例

目录 一、Android Studio下载地址二、开发环境JDK三、开始安装Android Studio四、案例展示与搭建五、旧版Android Studio 3.2 最终配置参数设置六、人工智能算法模型移动端部署案例参考 一、Android Studio下载地址 https://developer.android.google.cn/studio/install.html …

ETH网络中的账户

ETH网络中的账户 Externally owned accounts (EOA) - 外部账户 由用户控制&#xff0c;我们导入助记词创建的账户就属于此类账户。 Contract accounts (smart contracts) - 合约账户 合约账户由以太坊虚拟机执行的代码控制。它也被称为智能合约。合约帐户有相关的代码和数据存…

Keil新版本安装编译器ARMCompiler 5.06

0x00 缘起 我手头的项目在使用最新版本的编译器后&#xff0c;烧录后无法正常运行&#xff0c;故安装5.06&#xff0c;测试后发现程序运行正常&#xff0c;以下为编译器的安装步骤。 0x01 解决方法 1. 下载编译器安装文件&#xff0c;可以去ARM官网下载&#xff0c;也可以使用我…

架构设计:生产消费模型

1. 引言 在现代软件系统中&#xff0c;处理大量数据和消息是一项重要的任务。生产消费模型作为一种经典的并发模式&#xff0c;在解决数据生产和消费之间的关系上发挥着关键作用。该模型通过有效地管理生产者和消费者之间的通信和数据流动&#xff0c;实现了系统组件之间的解耦…