Maven添加依赖

<!--极光推送--><dependency><groupId>cn.jpush.api</groupId><artifactId>jpush-client</artifactId><version>3.2.3</version></dependency>

后台代码(可直接复制使用)
工具类

package com.rzhy.api.tjxm.util;import cn.jpush.api.push.model.Message;
import cn.jpush.api.push.model.Options;
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.AndroidNotification;
import cn.jpush.api.push.model.notification.IosNotification;
import cn.jpush.api.push.model.notification.Notification;import java.util.Map;public class JPushUtil {/*** 发送给所有用户* @param notificationTitle* @param1 avatar* @param1 nick* @param1 imTag  jumpType* @return*/public static PushPayload buildPushObject_android_and_ios(String notificationTitle, String title, Map<String,String> map, String[]alias, boolean isApnsProduction) {return PushPayload.newBuilder().setPlatform(Platform.android_ios()).setAudience(Audience.alias(alias)).setNotification(Notification.newBuilder().setAlert(notificationTitle).addPlatformNotification(AndroidNotification.newBuilder().setAlert(notificationTitle)//.setTitle(notification_title)//此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)//.setTitle(title).addExtras(map).build()).addPlatformNotification(IosNotification.newBuilder()//传一个IosAlert对象,指定apns title、title、subtitle等.setAlert(notificationTitle)//直接传alert//此项是指定此推送的badge自动加1//.incrBadge(1).disableBadge()//此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,// 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音.setSound("default")//此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)// .addExtra("iosNotification extras key",extrasparam).addExtras(map)//此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification// .setContentAvailable(true).build()).build()).setOptions(Options.newBuilder()//此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义.setApnsProduction(isApnsProduction)//此字段是给开发者自己给推送编号,方便推送者分辨推送记录.setSendno(1)//此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天,单位为秒.setTimeToLive(600).build()).build();}/*** 透传消息* @param msgContent 透传消息内容* @param map 透传消息附加参数* @param alias 透传消息发送人* @return*/public static PushPayload buildPushObject_ios_audienceMore_messageWithExtras(String msgContent, Map<String,String> map, String[] alias) {return PushPayload.newBuilder().setPlatform(Platform.android_ios()).setAudience(Audience.alias(alias)).setMessage(Message.newBuilder().setMsgContent(msgContent).addExtras(map).build()).build();}/*** 发送给所有指定设备* @param notificationTitle* @param* @param* @param* @return*/public static PushPayload buildPushObjectAllTarget(String notificationTitle, Map<String,String> map, String title, boolean isApnsProduction) {return PushPayload.newBuilder().setPlatform(Platform.android_ios()).setAudience(Audience.all()).setNotification(Notification.newBuilder().setAlert(notificationTitle).addPlatformNotification(AndroidNotification.newBuilder().setAlert(notificationTitle)//.setTitle(notification_title)//此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)// .addExtra("iosNotification extras key",extrasparam).setTitle(title).addExtras(map).build()).addPlatformNotification(IosNotification.newBuilder()//传一个IosAlert对象,指定apns title、title、subtitle等.setAlert(notificationTitle)//直接传alert//此项是指定此推送的badge自动加1//.incrBadge(1)//此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,// 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音.setSound("default")//此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)// .addExtra("iosNotification extras key",extrasparam).addExtras(map)//此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification// .setContentAvailable(true).build()).build())//自定义消息.setMessage(Message.newBuilder().setMsgContent(notificationTitle).setTitle(title).addExtras(map).build()).setOptions(Options.newBuilder()//此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义.setApnsProduction(isApnsProduction)//此字段是给开发者自己给推送编号,方便推送者分辨推送记录.setSendno(1)//此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天,单位为秒.setTimeToLive(600).build()).build();}/*** 根据别名推送至android* @param notificationTitle* @param alias* @return*/public static PushPayload buildPushObjectAndroidAllAlertWithTitle(String notificationTitle, String title, String[] alias, Map<String,String> map, boolean isApnsProduction) {return PushPayload.newBuilder()//指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台.setPlatform(Platform.android())//指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id.setAudience(Audience.alias(alias))//jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发.setNotification(Notification.newBuilder()//指定当前推送的android通知.addPlatformNotification(AndroidNotification.newBuilder().setAlert(notificationTitle).setTitle(title)//此字段为app名称.addExtras(map).build()).build()).setOptions(Options.newBuilder()//此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义.setApnsProduction(isApnsProduction)//此字段是给开发者自己给推送编号,方便推送者分辨推送记录.setSendno(1)//此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天,单位为秒.setTimeToLive(600).build()).build();}/*** 根据别名推送至ios* @param notificationTitle* @param alias* @return*/public static PushPayload buildPushObjectIosAllAlertWithTitle(String notificationTitle, String[] alias,Map<String,String> map, boolean isApnsProduction) {return PushPayload.newBuilder()//指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台.setPlatform(Platform.ios())//指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id.setAudience(Audience.alias(alias))//jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发.setNotification(Notification.newBuilder()//指定当前推送的android通知.addPlatformNotification(IosNotification.newBuilder()//传一个IosAlert对象,指定apns title、title、subtitle等.setAlert(notificationTitle).addExtras(map)//直接传alert//此项是指定此推送的badge自动加1//.incrBadge(1)//此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,// 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音.setSound("default")//此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification// .setContentAvailable(true).build()).build()).setOptions(Options.newBuilder()//此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义.setApnsProduction(isApnsProduction)//此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天,单位为秒.setTimeToLive(600).build()).build();}/*** 根据别名推送至指定用户* @param registrationId* @param notificationTitle* @param* @param* @param* @return*/public static PushPayload buildPushObjectAllRegistrationIdAlertWithTitle(String registrationId,String notificationTitle, String title,Map<String,String> map, boolean isApnsProduction) {//创建一个IosAlert对象,可指定APNs的alert、title等字段return PushPayload.newBuilder()//指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台.setPlatform(Platform.all())//指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id.setAudience(Audience.alias(registrationId))//jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发.setNotification(Notification.newBuilder()//指定当前推送的android通知.addPlatformNotification(AndroidNotification.newBuilder().setAlert(notificationTitle).setTitle(title)//此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)// .addExtra("iosNotification extras key",extrasparam).addExtras(map).build())//指定当前推送的iOS通知.addPlatformNotification(IosNotification.newBuilder()//传一个IosAlert对象,指定apns title、title、subtitle等.setAlert(notificationTitle)//此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)// .addExtra("iosNotification extras key",extrasparam).addExtras(map)//.incrBadge(1).setSound("default").build()).build()).setOptions(Options.newBuilder()//此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义.setApnsProduction(isApnsProduction)//此字段是给开发者自己给推送编号,方便推送者分辨推送记录.setSendno(1)//此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天;.setTimeToLive(600).build()).build();}
}

AuroraPusher类
填写极光appKey 、masterSecret ,根据实际调用android,ios推送

**package com.rzhy.api.tjxm.util;import cn.jpush.api.JPushClient;
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.PushPayload;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;public class AuroraPusher {public final static Logger logger = LogManager.getLogger(AuroraPusher.class);private String masterSecret = "";private String appKey = "";/*此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义*/private boolean isApnsProduction = false;/** 第三方规定推送接收对象数量 */private final int aliaSize = 38;/** 推送客户端 */private JPushClient jPushClient;/** 获取推送客户端 */public JPushClient getjPushClient() {if(jPushClient == null){jPushClient = new JPushClient(masterSecret, appKey);}return jPushClient;}/*** 发送推送* @param payload 推送内容* @return*/private boolean push(PushPayload payload) throws Exception{try {PushResult pushResult = this.getjPushClient().sendPush(payload) ;logger.debug("调用推送方法响应结果为:" + pushResult != null ? pushResult.toString() : "推送响应内容为空");/*final int code = 200;//存在有未登录用户错误码final int error_code = 1011;System.out.println(pushResult.sendno);if(pushResult == null || code != pushResult.sendno){if(error_code == pushResult.sendno){throw new SendMessageFailureException(error_code, "选择用户中包含存未在APP登录激活的用户");}throw new SendMessageFailureException("推送消息时,第三方响应错误,错误原因为:");}*/} catch (APIConnectionException e) {logger.error("推送消息时,连接第三方异常, 异常原因:" + e.getMessage(), e);throw new SendMessageFailureException("推送消息时,连接第三方异常");} catch (APIRequestException e) {logger.error("推送消息时,请求第三方异常, 异常原因:" + e.getMessage(), e);throw new SendMessageFailureException("推送消息时,请求第三方异常");}return true;}/*** 推送至所有设备* @param notificationTitle* @param title* @param map* @return*/public boolean pushAllTarget(String notificationTitle, String title, Map<String, String> map) throws Exception{PushPayload payload = JPushUtil.buildPushObjectAllTarget(notificationTitle, map, title, isApnsProduction);return  this.push(payload);}/*** 推送至所有设备* @param notificationTitle* @param map* @param title* @param alias* @return*/public boolean pushAllTargetByUser(String notificationTitle, String title, Map<String, String> map, String[] alias) throws Exception{PushPayload payload;List<List<String>> aliaList = splitArraySpecifySizeList(alias, aliaSize);for(List<String> itemList : aliaList){payload = JPushUtil.buildPushObject_android_and_ios(notificationTitle, title, map, itemList.toArray(new String[]{}), isApnsProduction);this.push(payload);}return true;}/*** 透传消息* @param msgContent 透传消息内容* @param map 附加信息* @param alias 接收人* @return*/public boolean buildPushObjectAudienceMoreMessageWithExtras(String msgContent, Map<String,String> map, String[] alias)throws Exception{PushPayload payload;List<List<String>> aliaList = splitArraySpecifySizeList(alias, aliaSize);for(List<String> itemList : aliaList){payload = JPushUtil.buildPushObject_ios_audienceMore_messageWithExtras(msgContent, map, itemList.toArray(new String[]{}));this.push(payload);}return true;}/*** 根据ilias推送至android* @param msg* @param title* @param alias* @param map* @return*/public boolean sendAllAndroid(String msg, String title, String[] alias, Map<String, String> map) throws Exception{PushPayload payload;List<List<String>> aliaList = splitArraySpecifySizeList(alias, aliaSize);for(List<String> itemList : aliaList){payload = JPushUtil.buildPushObjectAndroidAllAlertWithTitle(msg, title, itemList.toArray(new String[]{}), map, isApnsProduction);;this.push(payload);}return true;}/*** 根据ilias推送至ios* @param msg* @param alias* @param map* @return*/public boolean sendAllIos(String msg, String[] alias, Map<String, String> map) throws Exception {PushPayload payload;List<List<String>> aliaList = splitArraySpecifySizeList(alias, aliaSize);for(List<String> itemList : aliaList){payload = JPushUtil.buildPushObjectIosAllAlertWithTitle(msg, itemList.toArray(new String[]{}), map, isApnsProduction);this.push(payload);}return true;}/*** 根据alias推送至指定设备* @param registrationId* @param notificationTitle* @param title* @param map* @return*/public boolean sendByAlias(String registrationId, String notificationTitle, String title, Map<String, String> map) throws Exception{PushPayload payload;System.out.println(registrationId);String[] alias = registrationId.split(",");if(alias.length < aliaSize){payload = JPushUtil.buildPushObjectAllRegistrationIdAlertWithTitle(registrationId, title, notificationTitle, map, isApnsProduction);System.out.println(payload);this.push(payload);} else {List<List<String>> list = splitArraySpecifySizeList(alias, aliaSize);for(List<String> temp : list){payload = JPushUtil.buildPushObjectAllRegistrationIdAlertWithTitle(String.join(",", temp), title, notificationTitle, map, isApnsProduction);this.push(payload);}}return true;}/*** 拆分接收对象为指定数量的数组对象集合* @param alias 推送接收对象* @param size 指定数量* @return*/private List<List<String>> splitArraySpecifySizeList(String[] alias, final int size){if(ArrayUtils.isEmpty(alias)){return null;}//将数组转成集合 固定长度List<String> list = Arrays.asList(alias);return getSubList(list,size);}/*** 将一个List集合拆分成指定长度的List** @param list 母list* @param len 子list的长度* @return resultList 结果List<List>*/private static List<List<String>> getSubList(List list,int len) {if (list == null || list.size() == 0 || len < 1) {return null;}List<List<String>> resultList = new ArrayList<>();for (int i = 0; i < list.size(); i++) {if ( i % len == 0 ) {int count = i/len;List subList = (List) list.stream().limit((count + 1) * len).skip(count * len).collect(Collectors.toList());resultList.add(subList);}}return resultList;}
}
**

调用极光推送 (此处是将token当作别名推送消息)

@Component
public class WeiXinUtil {@Autowiredprivate  INoticeuserService noticeuserService;//静态的方法调用service接口private static WeiXinUtil weiXinUtil;//重点三:初始化@PostConstructpublic void init() {weiXinUtil= this;weiXinUtil.noticeuserService= this.noticeuserService;}//体检预约消息推送public static void sendNewYyjl(Yyjl t) throws Exception{// 先发送app终端用户sendNewYyjlPush(t,1);// 发送客服sendNewYyjlPush(t,2);//保存消息推送记录Noticeuser noticeuser = new Noticeuser();noticeuser.setNotice(1);noticeuser.setTitle("您好,您已经成功在国际保健预约体检。");noticeuser.setNoticevalue("预约通知");noticeuser.setName(t.getName());noticeuser.setToken(t.getToken());noticeuser.setMobile(t.getPhone());System.out.println(noticeuser);weiXinUtil.noticeuserService.updateNoticeuser(noticeuser);}//预约体检消息推送public static void sendNewYyjlPush(Yyjl t,Integer sendtype) throws  Exception {//先发送给用户String notice = "";String title = "";String alert = "";if (t.getKhtype() == 1){  //判断是个人还是公司预约if (sendtype == 1) {notice = "您好,您已经成功在国际保健预约体检,请及时登录查看。";title = "您好,您已经成功在国际保健预约体检。";alert = "预约类型:个人体检\\n联系方式:" + t.getPhone()+ "\\n预约日期" + t.getYydate()+ "\\n如有任何问题请致电83009000进行咨询";} else {title = "有一个新的个人体检预约。";alert = "请及时登录后台查看。";}} else {if (sendtype == 1) {notice = "您好,您已经成功在国际保健预约体检,请及时登录查看。";title = "您好,贵公司已经成功在国际保健预约体检。";alert ="预约类型:公司体检\\n公司名称:" + t.getCompany()+ "\\n体检人数" + t.getNumber()+ "\\n预约日期" + t.getYydate()+ "\\n如有任何问题请致电83009000进行咨询";} else {title = "有一个新的个人体检预约。";alert = "请及时登录后台查看。";}}Map<String,String> map = new HashMap<>();map.put("title",title);map.put("alert",alert);AuroraPusher auroraPusher = new AuroraPusher();auroraPusher.sendByAlias(t.getToken(),notice,title,map);}

极光推送:java后台向APP推送消息(android,ios极光推送消息)相关推荐

  1. 极光推送:后台向APP:android,ios极光推送消息

    1. 添加依赖 //jpushcompile group: 'cn.jpush.api', name: 'jpush-client', version: '3.3.4' 2. 注册极光用户 //APP ...

  2. 极光推送java后台对接

    需要先去极光申请注册极光IM,获取appkey和masterSecret https://docs.jiguang.cn/jmessage/server/rest_api_im/ http://jpu ...

  3. java后台处理APP表情-使用轻量工具emoji-java处理emoji表情字符

    目录 pom依赖 java工具类 测试 Java Url编码转换 在APP开发中,大多需要涉及表情符号丰富APP,但是因为我们的数据库一般是utf8编码,是3个字节,而表情符号基本都是四个字节的uni ...

  4. java 后台和前端的消息提醒_滴滴Java后台3面题目:网络+内存溢出+各种锁+高性能+消息队列...

    一面 自我介绍 项目介绍 JVM类加载机制 java的垃圾回收器都有哪些,说下g1的应用场景,平时你是如何搭配使用垃圾回收器的. 红黑树的设计 经常使用的设计模式?以及UML设计? hashmap实现 ...

  5. 极光推送之java后台封装REST API

    1 什么是推送? 这个看图效果最好请直接看下图: 我们手机经常会收到如上图弹框消息,我们今天说的就是上面的弹窗信息如何推送的.一般情况我们可以通过第三的服务来给自己的app发送推送消息例如:极光推送. ...

  6. JAVA后台对接苹果APNS(VOIP)实现推送

    最近公司需要用苹果APNs实现类似微信视频接电话的效果,查看了苹果官网有VOIP这个东西,于是进行了研究开发. 首先总结一下接入流程: 在开发者中心申请对应的证书(推送证书,VOIP证书) IOS 注 ...

  7. iOS远程推送原理及实现过程

    该文章是我16年在公司博客上写的,除了证书注册的过程大致没有改变,像接收通知的方法都有所改变,所以将iOS 10 之后的接收通知及注册通知的方法在文章中补全,希望对正在处理远程推送的伙伴们有所帮助 一 ...

  8. 一加7pro何时发布android10,一加7/7Pro Android 10阶段性推送正式开始

    9月22日消息 昨日晚些时候,一加官方推特发布消息称,一加7/7Pro Android 10阶段性推送现已正式开始. 据官方给出的消息来看,此次面向用户推送的是基于Android 10打造的Oxyge ...

  9. 电信物联网开放平台_NB-IoT业务对接 Java 后台、Android 前端已完成预研

    电信物联网开放平台_NB-IoT业务对接 Java 后台.Android 前端已完成预研 一.NB-IoT : 硬件设备 BC28模组 二.Java 后台: SSH集成电信物联SDK.极光推送SDK. ...

最新文章

  1. Android的Activity屏幕切换动画(一)-左右滑动切换
  2. python编写程序的一般步骤-Python:开发_基本流程
  3. 算法系列之赫夫曼编码实战一【数据压缩、数据解压】
  4. mysql类型说明_MYSQL 数据类型说明
  5. 使用SysPrep制作Windows2008系统映像
  6. fftw-3.3.8库在linux下的的编译和配置
  7. C/C++中static的用法全局变量与局部变量
  8. HashMap,LinkedHashMap和Hashtable类的深入剖析与理解
  9. jsdroid 教程_教程24富怡服装cad软件V8安装包送操作说明书自学180部视频教程制版排料放码工具操作教学打赏49.8大洋...
  10. 福州万宝产业园的远程预付费电能管理系统
  11. C# int和byte[]之间的互转
  12. excel学习-添加控件
  13. linux 笔记本摄像头,Ubuntu 7.10 下屏蔽笔记本摄像头的方法
  14. Python使用百度地图API实现地点信息转换及房价指数热力地图
  15. notepad++的JSONviewer插件
  16. 小米电视刷鸿蒙系统,小米电视怎么刷鸿蒙OS系统?一招立省上千块
  17. Java架构师-容器化(一):服务容器化技术-Docker、Cloud Foundry
  18. ACM里的生成函数初探
  19. u盘制作启动盘 安装win10操作系统
  20. jq插件处女座 图片轮播

热门文章

  1. “大促”背后的技术 | 当我们说促销的时候,我们在谈什么?
  2. PCL学习--- stl转pcd
  3. 计算机病毒可通过u盘光盘网络传播,计算机病毒只能通过U盘与网络传播,光盘中不可能存在病毒。...
  4. JAVASE总结回顾(秦疆老师)
  5. JavaScript学习:函数
  6. C语言编程,带颜色的字体
  7. oracle 01031 dblink,通过修改基表(link$)让非public dblink变为public
  8. 全国所有飞机场机场信息
  9. 投资理财-一个以投资为职业的人
  10. 上海贝岭携手亚信安全治理勒索邮件 建设主动防护体系实现零感染率