浏览器及app消息推送

什么是消息推送

消息推送可以存在于浏览器端,也存在APP端。浏览器的推送,会在电脑通知中显示,app中显示在通知栏

PC端的实现

方法1:Notification

window.Notification是浏览器最小化后在桌面显示消息的一种方法,结合web-push就生成类似360等流氓软件在桌面右下角的弹窗广告,跟浏览器是脱离的,消息是置顶的

messagePush(){
	//监测浏览器是否支持
	 if (window.Notification) {
        console.log("支持弹出框")
      } else {
        // 不支持
        console.log("不支持")
        alert("当前浏览器不支持弹出消息通知哦!")
      }
      if(window.Notification && Notification.permission !== "denied") {
        Notification.requestPermission(function(status) {
          if (status === "granted") {
            new Notification('标题啦啦啦', {
              body: '我才是给你看的内容!',
            });
          } else {
            alert("当前的浏览器不支持消息通知!!!");
          }
        });
      }
    }
}

效果如下
在这里插入图片描述

方法2:pushjs

pushjs

npm install push.js --save

这是一个封装好的通知库,具体可点击官网查看

import Push from 'push.js'
 
 pushMessage(){
	 Push.Permission.request();
	 Push.create("标题", {
	   body: "我才是内容!!!",
	   requireInteraction: true,//是否需要用户交互才会消失
	   //icon: '/icon.png',//通知的图标
	    timeout: 600000,//通知显示的时间
	 });
 }

APP端

对于vue开发webAPP,对于消息推送到通知栏使用的技术为h5+Api的push模块

不过下面的示例代码为uniapp创建的。。为了省事

实现

//APP.vue中进行初始化事件监听定义
onLaunch: function () {
	//获取客户端推送标识信息,通常需要客户端在第一次运行时获取并提交到业务服务器绑定
	let info = plus.push.getClientInfo();
	//监听从通知栏点击消息的事件
	plus.push.addEventListener('click', function (msg) {
		console.log(JSON.stringify(msg))
		console.log(msg.payload)
		//处理点击消息事件
		//TODO
	}, false)
	//监听从在线服务器获取消息数据的事件
	plus.push.addEventListener('receive', function (msg) {
		console.log("receive:" + JSON.stringify(msg))
		//处理透传消息事件
	}, false)
},
//方法具体使用如下
pushMessage(){
	plus.push.createMessage("增加", "", {
        title: "你有一条提示",
    })
}

效果如下
在这里插入图片描述

打包设置

在进行打包的时候,需要对push模块进行设置
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot提供了多种方式来实现后台消息推送,其中比较常用的有以下几种: 1. WebSocket:WebSocket是一种基于TCP协议的双向通信协议,在Spring Boot中可以使用Spring WebSocket模块来实现,它可以实现实时双向通信,非常适合消息推送场景。 2. SockJS:SockJS是一种WebSocket的备选方案,在不支持WebSocket的浏览器中可以使用SockJS来模拟WebSocket的行为。 3. Server-Sent Events(SSE):SSE是一种基于HTTP协议的服务器推送技术,在Spring Boot中可以使用Spring WebFlux模块来实现,它可以实现单向实时通信,适合简单的消息推送场景。 下面将分别介绍如何在Spring Boot中使用这些技术实现消息推送。 1. WebSocket 首先需要在pom.xml文件中添加Spring WebSocket和STOMP相关依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> <dependency> <groupId>org.webjars</groupId> <artifactId>sockjs-client</artifactId> <version>1.0.2</version> </dependency> <dependency> <groupId>org.webjars</groupId> <artifactId>stomp-websocket</artifactId> <version>2.3.3</version> </dependency> ``` 然后创建一个WebSocket配置类: ```java @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry config) { config.enableSimpleBroker("/topic"); config.setApplicationDestinationPrefixes("/app"); } @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/websocket").withSockJS(); } } ``` 在configureMessageBroker()方法中,我们配置了消息代理,使用了一个简单的消息代理,在客户端订阅“/topic”时,服务器会广播消息。 在registerStompEndpoints()方法中,我们注册了一个WebSocket端点,客户端连接到“/websocket”时,会使用SockJS协议进行连接。 然后在控制器中处理WebSocket连接请求: ```java @Controller public class WebSocketController { @MessageMapping("/hello") @SendTo("/topic/greetings") public Greeting greeting(HelloMessage message) throws Exception { Thread.sleep(1000); // simulated delay return new Greeting("Hello, " + message.getName() + "!"); } } ``` 在greeting()方法中,我们使用了@MessageMapping注解来处理“/hello”路径的消息,并使用@SendTo注解将处理结果发送到“/topic/greetings”路径。 最后在客户端中使用JavaScript代码连接WebSocket并进行订阅: ```javascript var stompClient = null; function connect() { var socket = new SockJS('/websocket'); stompClient = Stomp.over(socket); stompClient.connect({}, function (frame) { stompClient.subscribe('/topic/greetings', function (greeting) { showGreeting(JSON.parse(greeting.body).content); }); }); } function sendName() { var name = document.getElementById('name').value; stompClient.send("/app/hello", {}, JSON.stringify({ 'name': name })); } function showGreeting(message) { var p = document.createElement('p'); p.appendChild(document.createTextNode(message)); document.getElementById('greetings').appendChild(p); } ``` 2. SockJS SockJS的使用方式与WebSocket类似,只需要将WebSocket协议改为SockJS协议即可。 首先需要在pom.xml文件中添加SockJS相关依赖: ```xml <dependency> <groupId>org.webjars</groupId> <artifactId>sockjs-client</artifactId> <version>1.0.2</version> </dependency> <dependency> <groupId>org.webjars</groupId> <artifactId>stomp-websocket</artifactId> <version>2.3.3</version> </dependency> ``` 然后在WebSocket配置类中将registerStompEndpoints()方法改为: ```java @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/sockjs").withSockJS(); } ``` 在客户端中连接SockJS并进行订阅的方式与WebSocket类似,只需要将连接路径改为SockJS协议即可。 3. Server-Sent Events(SSE) 使用SSE实现消息推送比WebSocket和SockJS更为简单,只需要在控制器中返回一个SseEmitter对象即可。 首先需要在pom.xml文件中添加Spring WebFlux相关依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> ``` 然后创建一个控制器: ```java @RestController public class SSEController { private final Sinks.Many<String> sink; public SSEController() { this.sink = Sinks.many().multicast().onBackpressureBuffer(); } @GetMapping("/sse") public Flux<String> handleSSE() { return sink.asFlux(); } @PostMapping("/message") public Mono<Void> handleMessage(@RequestBody String message) { sink.tryEmitNext(message); return Mono.empty(); } } ``` 在handleSSE()方法中,我们返回一个Flux对象,它会发送SSE事件,客户端通过订阅该路径来接收SSE事件。 在handleMessage()方法中,我们使用Sinks.Many对象来保存消息,当有新消息时,使用tryEmitNext()方法推送消息。 最后在客户端中使用JavaScript代码订阅SSE事件: ```javascript var source = new EventSource('/sse'); source.onmessage = function (event) { showEvent(event.data); }; function showEvent(message) { var p = document.createElement('p'); p.appendChild(document.createTextNode(message)); document.getElementById('events').appendChild(p); } ``` 以上是三种常用的Spring Boot后台消息推送方式,开发者可以根据实际需求选择合适的方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值