一. 极光推送代码

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整合极光推送相关推荐

  1. flutter整合极光推送完美版

    flutter整合极光推送完美版 这篇博文讲的是flutter整合极光推送,也就是jpush,看完包你会. 一.加入极光配置 1.pubspec.yaml jpush_flutter: ^2.0.5 ...

  2. 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 ...

  3. Springboot使用极光推送

    参考来源:服务器参考来源 1.springboot服务器添加依赖 <dependency><groupId>cn.jpush.api</groupId><ar ...

  4. 极光推送指定用户推送_干货|SpringBoot集成极光推送完整实现代码(建议收藏)...

    工作中经常会遇到服务器向App推送消息的需求,一般企业中选择用极光推送的比较多,在集成极光时发现极光的文档并不完整,网上的文章也很多不能直接使用,这里列出我在工作中集成极光的全部代码,只需要按照如下代 ...

  5. Springboot整合Websocket(推送消息通知)

    在手机上相信都有来自服务器的推送消息,比如一些及时的新闻信息,这篇文章主要就是实现这个功能,只演示一个基本的案例.使用的是websocket技术. 一.什么是websocket WebSocket协议 ...

  6. app推送以及提示音java,springboot 整合 Jpush 极光推送

    产品简介: JPush 是经过考验的大规模 App 推送平台,每天推送消息数超过 5 亿条. 开发者集成 SDK 后,可以通过调用 API 推送消息.同时,JPush 提供可视化的 web 端控制台发 ...

  7. 使用极光推送实现分组发送和服务端集成

    推送功能在手机应用开发中越来越重要,几乎成为所有App必备的功能,由于Android本身没有消息推送机制,通常采用的是基于XMPP协议的推送,但这种开发很麻烦,因此在市场上应运而生了提供消息推送服务的 ...

  8. phonegap 使用极光推送实现消息推送

    最近一直在研究各种推送,ios的由于是apns,比较容易实现,但是andriod的就比较麻烦.后来看了很多解决方案,gcm明显是不行的,其他的方案更是一头雾水,而且需要做第二次开发,太麻烦,后来就选择 ...

  9. 看了极光推送技术原理的几点思考

    看了极光推送技术原理的几点思考 分类: android2012-11-26 20:50 16586人阅读 评论(18) 收藏 举报 目录(?)[+] 移动互联网应用现状 因为手机平台本身.电量.网络流 ...

最新文章

  1. svn 第一次使用注意事项
  2. OpenStack 实现技术分解 (5) 应用开发 — 使用 OpenStackClients 进行二次开发
  3. Android5.1.1 - zygote中获取系统服务时抛出异常
  4. maven编译不通过:软件包com.sun.org.apache.xml.internal.security.utils.Base64 不存在
  5. mysql date类型加一个月jdbc_JDBC操作数据库Date类型数据
  6. Redux从设计到源码
  7. 车牌号专用键盘设计和正则验证
  8. 25 种代码坏味道总结+优化示例
  9. vue基础知识点思维导图
  10. 热烈祝贺:关于OpenJDK8 LINUX版本输入法候选框不能跟随光标移动的BUG及解决办法,已上报Oracle
  11. word多个文档标签显示在一个窗口
  12. stm32f4串口烧录[flymcu]
  13. Linux-两台Linux服务器间设置共享文件夹(NFS服务器)
  14. windows server 2012 更改网络位置
  15. 日本企业遭遇严重用工短缺
  16. 游戏开发程序员可能会遇到的英文单词
  17. Gartner魔力象限图横竖轴
  18. Java SE 易错题
  19. 为了反击爬虫,前端工程师的脑洞可以有多大?
  20. export和import的答疑

热门文章

  1. Oracle system identifier already exists specify another SID
  2. 如何查看网络计算机ip,怎么查ip地址 如何查看(局域网/互联网)本机ip地址
  3. 总结 62 种在深度学习中的数据增强方式
  4. python逻辑回归训练预测_[Python] 机器学习笔记 基于逻辑回归的分类预测
  5. SRE从踩坑到牛逼(二)利用Python进行Arcgis站点分析+Nginx日志分析
  6. 控制input标签只能输入数字
  7. 测试英语词水平的软件,英语词汇量测试程序
  8. 中国最美的一千个汉字 : 千字文5
  9. html5车牌效果,html中车牌号省份简称输入键盘的示例代码
  10. 逆透视变换(IPM)多种方式及代码总结