SpringBoot整合极光推送
一. 极光推送代码
1. maven依赖
<!--极光推送-->
<dependency><groupId>cn.jpush.api</groupId><artifactId>jpush-client</artifactId><version>3.2.9</version>
</dependency>
2. 极光配置类
package com.jinzhi.jpush.config;
import cn.jpush.api.JPushClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
@Configuration
@ConfigurationProperties
public class JiGuangConfig {// 极光官网-个人管理中心-appkey@Value("${push.appkey}")private String appkey;// 极光官网-个人管理中心-点击查看-secret@Value("${push.secret}")private String secret;private JPushClient jPushClient;// 推送客户端@PostConstructpublic void initJPushClient() {jPushClient = new JPushClient(secret, appkey);}// 获取推送客户端public JPushClient getJPushClient() {return jPushClient;}
}
3. 推送实体类
package com.jinzhi.jpush.model;
import lombok.Data;
import java.util.Map;
@Data
public class PushBean {// 必填, 通知内容, 内容可以为空字符串,则表示不展示到通知栏。private String alert;// 可选, 附加信息, 供业务使用。private Map<String, String> extras;//android专用// 可选, 通知标题,如果指定了,则通知里原来展示 App名称的地方,将展示成这个字段。private String title;
}
4. 两个service
package com.jinzhi.jpush.service;
import cn.jpush.api.push.model.PushPayload;
import com.jinzhi.jpush.model.PushBean;
/*** 极光推送* 封装第三方api相关*/
public interface MyJiGuangPushService {boolean pushAll(PushBean pushBean);boolean pushIos(PushBean pushBean);boolean pushIos(PushBean pushBean, String... registids);boolean pushAndroid(PushBean pushBean);boolean pushAndroid(PushBean pushBean, String... registids);boolean sendPush(PushPayload pushPayload);
}
package com.jinzhi.jpush.service;
import com.jinzhi.jpush.model.PushBean;
/*** 推送服务* 封装业务功能相关*/
public interface JiGuangPushService {boolean pushAll(PushBean pushBean);boolean pushIos(PushBean pushBean);boolean pushIos(PushBean pushBean, String... registids);boolean pushAndroid(PushBean pushBean);boolean pushAndroid(PushBean pushBean, String... registids);String[] checkRegistids(String[] registids);
}
5. 两个实现类
package com.jinzhi.jpush.service.impl;
import cn.jpush.api.common.resp.APIConnectionException;
import cn.jpush.api.common.resp.APIRequestException;
import cn.jpush.api.push.PushResult;
import cn.jpush.api.push.model.Platform;
import cn.jpush.api.push.model.PushPayload;
import cn.jpush.api.push.model.audience.Audience;
import cn.jpush.api.push.model.notification.Notification;
import com.jinzhi.jpush.config.JiGuangConfig;
import com.jinzhi.jpush.model.PushBean;
import com.jinzhi.jpush.service.MyJiGuangPushService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/*** 极光推送* 封装第三方api相关*/
@Service
@Slf4j
public class MyJiGuangPushServiceImpl implements MyJiGuangPushService {@Autowiredprivate JiGuangConfig jPushConfig;/*** 广播 (所有平台,所有设备, 不支持附加信息)* @param pushBean 推送内容* @return*/@Overridepublic boolean pushAll(PushBean pushBean){return sendPush(PushPayload.newBuilder().setPlatform(Platform.all()).setAudience(Audience.all()).setNotification(Notification.alert(pushBean.getAlert())).build());}/*** ios广播* @param pushBean 推送内容* @return*/@Overridepublic boolean pushIos(PushBean pushBean){return sendPush(PushPayload.newBuilder().setPlatform(Platform.ios()).setAudience(Audience.all()).setNotification(Notification.ios(pushBean.getAlert(), pushBean.getExtras())).build());}/*** ios通过registid推送 (一次推送最多 1000 个)* @param pushBean 推送内容* @param registids 推送id* @return*/@Overridepublic boolean pushIos(PushBean pushBean, String... registids){return sendPush(PushPayload.newBuilder().setPlatform(Platform.ios()).setAudience(Audience.registrationId(registids)).setNotification(Notification.ios(pushBean.getAlert(), pushBean.getExtras())).build());}/*** android广播* @param pushBean 推送内容* @return*/@Overridepublic boolean pushAndroid(PushBean pushBean){return sendPush(PushPayload.newBuilder().setPlatform(Platform.android()).setAudience(Audience.all()).setNotification(Notification.android(pushBean.getAlert(), pushBean.getTitle(), pushBean.getExtras())).build());}/*** android通过registid推送 (一次推送最多 1000 个)* @param pushBean 推送内容* @param registids 推送id* @return*/@Overridepublic boolean pushAndroid(PushBean pushBean, String ... registids){return sendPush(PushPayload.newBuilder().setPlatform(Platform.android()).setAudience(Audience.registrationId(registids)).setNotification(Notification.android(pushBean.getAlert(), pushBean.getTitle(), pushBean.getExtras())).build());}/*** 调用api推送* @param pushPayload 推送实体* @return*/@Overridepublic boolean sendPush(PushPayload pushPayload){log.info("发送极光推送请求: {}", pushPayload);PushResult result = null;try{result = jPushConfig.getJPushClient().sendPush(pushPayload);} catch (APIConnectionException e) {log.error("极光推送连接异常: ", e);} catch (APIRequestException e) {log.error("极光推送请求异常: ", e);}if (result!=null && result.isResultOK()) {log.info("极光推送请求成功: {}", result);return true;}else {log.info("极光推送请求失败: {}", result);return false;}}
}
package com.jinzhi.jpush.service.impl;
import com.jinzhi.jpush.model.PushBean;
import com.jinzhi.jpush.service.JiGuangPushService;
import com.jinzhi.jpush.service.MyJiGuangPushService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/*** 推送服务* 封装业务功能相关*/
@Service
public class JiGuangPushServiceImpl implements JiGuangPushService {/** 一次推送最大数量 (极光限制1000) */private static final int max_size = 800;@Autowiredprivate MyJiGuangPushService jPushService;/*** 推送全部, 不支持附加信息* @return*/@Overridepublic boolean pushAll(PushBean pushBean){return jPushService.pushAll(pushBean);}/*** 推送全部ios* @return*/@Overridepublic boolean pushIos(PushBean pushBean){return jPushService.pushIos(pushBean);}/*** 推送ios 指定id* @return*/@Overridepublic boolean pushIos(PushBean pushBean, String... registids){registids = checkRegistids(registids); // 剔除无效registedwhile (registids.length > max_size) { // 每次推送max_size个jPushService.pushIos(pushBean, Arrays.copyOfRange(registids, 0, max_size));registids = Arrays.copyOfRange(registids, max_size, registids.length);}return jPushService.pushIos(pushBean, registids);}/*** 推送全部android* @return*/@Overridepublic boolean pushAndroid(PushBean pushBean){return jPushService.pushAndroid(pushBean);}/*** 推送android 指定id* @return*/@Overridepublic boolean pushAndroid(PushBean pushBean, String... registids){registids = checkRegistids(registids); // 剔除无效registedwhile (registids.length > max_size) { // 每次推送max_size个jPushService.pushAndroid(pushBean, Arrays.copyOfRange(registids, 0, max_size));registids = Arrays.copyOfRange(registids, max_size, registids.length);}return jPushService.pushAndroid(pushBean, registids);}/*** 剔除无效registed* @param registids* @return*/@Overridepublic String[] checkRegistids(String[] registids) {List<String> regList = new ArrayList<String>(registids.length);for (String registid : registids) {if (registid!=null && !"".equals(registid.trim())) {regList.add(registid);}}return regList.toArray(new String[0]);}
}
二. 测试推送
首先需要去极光推送官网去创建应用,这里不做过多说明。
首先需要我们的系统中,每个用户都对应一个regId,即唯一极光ID。
@Autowired
private JiGuangPushService service;
1. 广播推送
广播推送也就是只要是拥有该appKey
下载的安装程序的用户(即所有regId),都会受到信息
/** * 群推,广播* @param title 推送标题* @param content 推送内容* @return */
@PostMapping("/pushAll")
public Result pushAll(@RequestParam String title, @RequestParam String content){PushBean pushBean = new PushBean();pushBean.setTitle(title);pushBean.setAlert(content);boolean flag = jiGuangPushService.pushAndroid(pushBean);return ResultUtil.success(flag);
}
发送请求,所有客户端都会接到推送消息:
2. 单点推送
/*** 单独对regId进行推送* @param title 推送标题* @param regId 设备对应的唯一极光ID* @param content 推送内容* @return*/@PostMapping("/push")public Result push(@RequestParam String title,@RequestParam String regId,@RequestParam String content){PushBean pushBean = new PushBean();pushBean.setTitle(title);pushBean.setAlert(content);boolean flag = jiGuangPushService.pushAndroid(pushBean, regId);return ResultUtil.success(flag);
}
发送请求,可以看到只有指定的设备号才接收到消息:
SpringBoot整合极光推送相关推荐
- flutter整合极光推送完美版
flutter整合极光推送完美版 这篇博文讲的是flutter整合极光推送,也就是jpush,看完包你会. 一.加入极光配置 1.pubspec.yaml jpush_flutter: ^2.0.5 ...
- spring-boot整合smart-doc推送接口文档到torna报错Failure to find xxx... resolution will not be reattempted until
spring-boot整合smart-doc推送接口文档到torna报错Failure to find xxx- resolution will not be reattempted until th ...
- Springboot使用极光推送
参考来源:服务器参考来源 1.springboot服务器添加依赖 <dependency><groupId>cn.jpush.api</groupId><ar ...
- 极光推送指定用户推送_干货|SpringBoot集成极光推送完整实现代码(建议收藏)...
工作中经常会遇到服务器向App推送消息的需求,一般企业中选择用极光推送的比较多,在集成极光时发现极光的文档并不完整,网上的文章也很多不能直接使用,这里列出我在工作中集成极光的全部代码,只需要按照如下代 ...
- Springboot整合Websocket(推送消息通知)
在手机上相信都有来自服务器的推送消息,比如一些及时的新闻信息,这篇文章主要就是实现这个功能,只演示一个基本的案例.使用的是websocket技术. 一.什么是websocket WebSocket协议 ...
- app推送以及提示音java,springboot 整合 Jpush 极光推送
产品简介: JPush 是经过考验的大规模 App 推送平台,每天推送消息数超过 5 亿条. 开发者集成 SDK 后,可以通过调用 API 推送消息.同时,JPush 提供可视化的 web 端控制台发 ...
- 使用极光推送实现分组发送和服务端集成
推送功能在手机应用开发中越来越重要,几乎成为所有App必备的功能,由于Android本身没有消息推送机制,通常采用的是基于XMPP协议的推送,但这种开发很麻烦,因此在市场上应运而生了提供消息推送服务的 ...
- phonegap 使用极光推送实现消息推送
最近一直在研究各种推送,ios的由于是apns,比较容易实现,但是andriod的就比较麻烦.后来看了很多解决方案,gcm明显是不行的,其他的方案更是一头雾水,而且需要做第二次开发,太麻烦,后来就选择 ...
- 看了极光推送技术原理的几点思考
看了极光推送技术原理的几点思考 分类: android2012-11-26 20:50 16586人阅读 评论(18) 收藏 举报 目录(?)[+] 移动互联网应用现状 因为手机平台本身.电量.网络流 ...
最新文章
- svn 第一次使用注意事项
- OpenStack 实现技术分解 (5) 应用开发 — 使用 OpenStackClients 进行二次开发
- Android5.1.1 - zygote中获取系统服务时抛出异常
- maven编译不通过:软件包com.sun.org.apache.xml.internal.security.utils.Base64 不存在
- mysql date类型加一个月jdbc_JDBC操作数据库Date类型数据
- Redux从设计到源码
- 车牌号专用键盘设计和正则验证
- 25 种代码坏味道总结+优化示例
- vue基础知识点思维导图
- 热烈祝贺:关于OpenJDK8 LINUX版本输入法候选框不能跟随光标移动的BUG及解决办法,已上报Oracle
- word多个文档标签显示在一个窗口
- stm32f4串口烧录[flymcu]
- Linux-两台Linux服务器间设置共享文件夹(NFS服务器)
- windows server 2012 更改网络位置
- 日本企业遭遇严重用工短缺
- 游戏开发程序员可能会遇到的英文单词
- Gartner魔力象限图横竖轴
- Java SE 易错题
- 为了反击爬虫,前端工程师的脑洞可以有多大?
- export和import的答疑
热门文章
- Oracle system identifier already exists specify another SID
- 如何查看网络计算机ip,怎么查ip地址 如何查看(局域网/互联网)本机ip地址
- 总结 62 种在深度学习中的数据增强方式
- python逻辑回归训练预测_[Python] 机器学习笔记 基于逻辑回归的分类预测
- SRE从踩坑到牛逼(二)利用Python进行Arcgis站点分析+Nginx日志分析
- 控制input标签只能输入数字
- 测试英语词水平的软件,英语词汇量测试程序
- 中国最美的一千个汉字 : 千字文5
- html5车牌效果,html中车牌号省份简称输入键盘的示例代码
- 逆透视变换(IPM)多种方式及代码总结