1. 添加依赖

//jpushcompile group: 'cn.jpush.api', name: 'jpush-client', version: '3.3.4'

2. 注册极光用户

//APP端注册极光Id,jpushId为每个用户在各个设备的唯一标识public void registeAuroral(String jpushId) {JPushInterface.setAlias(LaunchActivity.this, jpushId, new TagAliasCallback() {@Overridepublic void gotResult(final int code, String s, Set<String> set) {LKLogUtil.e("极光别名设置==失败errorCode = " + code);switch (code) {case 0:LKLogUtil.e("极光别名设置===成功");break;case 6002:LKLogUtil.e("极光别名设置===超时");mHandler.postDelayed(new Runnable() {@Overridepublic void run() {JPushInterface.resumePush(LaunchActivity.this);setAlias(jpushId);}}, 1000 * 60);break;case 6012:LKLogUtil.e("极光别名设置==失败errorCode = " + code);mHandler.postDelayed(new Runnable() {@Overridepublic void run() {JPushInterface.resumePush(LaunchActivity.this);setAlias(jpushId);LKLogUtil.e("极光别名设置==失败errorCode = " + code);}}, 1000 * 60);break;default:LKLogUtil.e("极光别名设置==失败errorCode = " + code);break;}}});}

3. 后台代码推送极光
//******************************************************JPushUtil.class


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.audience.AudienceTarget;
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 com.alibaba.fastjson.JSON;
import net.sf.jsqlparser.statement.alter.Alter;import java.util.Map;/*** @author syg* Created by lenovo on 2017/02/24.*/
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).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).addExtras(map).build())//指定当前推送的iOS通知.addPlatformNotification(IosNotification.newBuilder()//传一个IosAlert对象,指定apns title、title、subtitle等.setAlert(notificationTitle).addExtras(map)//.incrBadge(1).setSound("default").build()).build()).setOptions(Options.newBuilder()//此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义.setApnsProduction(isApnsProduction)//此字段是给开发者自己给推送编号,方便推送者分辨推送记录.setSendno(1)//此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天;.setTimeToLive(600).build()).build();}}

//********************************************* AuroraPusher.class

@Component
public class AuroraPusher {public final static Logger logger = LogManager.getLogger(AuroraPusher.class);@Value("${jpush.masterSecret}")private String masterSecret;@Value("${jpush.appKey}")private String appKey;@Value("${jpush.isApnsProduction}")private boolean isApnsProduction;/** 第三方规定推送接收对象数量 */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){try {PushResult pushResult = this.getjPushClient().sendPush(payload) ;logger.debug("调用推送方法响应结果为:" + pushResult != null ? pushResult.toString() : "推送响应内容为空");final int code = 200;//存在有未登录用户错误码final int error_code = 1011;if(pushResult == null || code != pushResult.getResponseCode()){if(error_code == pushResult.getResponseCode()){throw new SendMessageFailureException(error_code, "选择用户中包含存未在伯通APP登录激活的用户");}throw new SendMessageFailureException("推送消息时,第三方响应错误,错误原因为:" + pushResult.error.getMessage());}} 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) {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) {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){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) {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) {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) {PushPayload payload;String[] alias = registrationId.split(",");if(alias.length < aliaSize){payload = JPushUtil.buildPushObjectAllRegistrationIdAlertWithTitle(registrationId, title, notificationTitle, map, isApnsProduction);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;}return ListUtils.getAllowList(Arrays.asList(alias), size);}}

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

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

    Maven添加依赖 <!--极光推送--><dependency><groupId>cn.jpush.api</groupId><artifact ...

  2. php集成极光推送,thinkphp 写APP接口集成极光推送的例子

    下面我们来看一篇关于thinkphp 写APP接口集成极光推送,对于app的数据都得通过接口来实现了,当然也有内置数据库的不过这种非常少了. 最近用Thinkphp写了个App接口用到第三方推送功能, ...

  3. 个推消息推送SDK之“单推报表”,帮助APP快速查询单推推送到达情况

    为帮助开发者更好地使用个推消息推送产品,我们梳理了个推消息推送产品的核心功能.典型应用场景,并提供实战案例作为参考,希望能够为大家找到提升推送效率的最佳路径! 本文为大家介绍个推消息推送的[单推报表] ...

  4. 微信内置浏览器无法下载app(Android/ios)软件 微信内下载链接打不开的解决方法

    很多朋友的APP推广链接需要在微信中进行的网页宣传.传播.下载等等,但是各位朋友一定发现了微信中是屏蔽掉了APP的下载链接的.但是微信最为一个最大的社交平台,为了自身的利益,屏蔽掉了所有APK的下载链 ...

  5. android极光推送声音,解决极光推送后台接收到推送消息,无提示音不震动

    ----以下方法前提确保你的设备,打开了此APP的通知提示. 正题------ 我遇到的情况是,安卓客户端是有提示音和振动提示的. iOS端在极光的web后台编辑消息 推送到我的手机有提示音和振动,通 ...

  6. Android极光、小米、百度、jpush等一些推送简介

    Android系统由google提供的推送的服务在国内并不能很好的运作,因此不能像 iOS能提供统一管理的推送服务.为了节约开发成本,目前主流的提供第三方推送服务的有:极光推送.个推.友盟.小米推送. ...

  7. apns 苹果服务器压力,[iOS]APNs推送机制

    目录 一.简介 二.APNs推送流程 三.什么是deviceToken 四.消息体 五.APNs推送中的问题 APNs 简介 Apple Push Notification service (APNs ...

  8. Adobe源码泄漏?3行代码搞定,Flash动画无缝导入Android/iOS/cocos2dx(一)

    [注] iOS代码已重构,效率提升90%,200层动画不卡.[2016.10.27] 项目介绍 项目名称:FlashAnimationToMobile 源码. 使用方法点这里. 这是一个把flash中 ...

  9. Flutter通过MethodChannel实现Flutter 与Android iOS 的双向通信

    更多文章请查看 flutter从入门 到精通 本文章中的完整代码在这里 题记:不到最后时刻,千万别轻言放弃,无论结局成功与否,只要你拼博过,尽力过,一切问心无愧. Flutter 与 Android ...

最新文章

  1. python实时读取日志并打印关键字怎么实现_面试宝典_Python.运维开发.0004.用Python实现tail实时输出新增日志?...
  2. 中国决定以“六大政策”推动新一代人工智能发展
  3. C++ 循环链表练习题 报数删除【非常没有条理】
  4. 概率分布:PMF与PDF
  5. Redhat Linux编译安装LAMP环境
  6. 容器编排技术 -- Kubernetes kubectl annotate 命令详解
  7. Java String to InputStream
  8. 3dmax导出fbx没有贴图_实例讲解ArcGIS 与 3DMax 结合建模
  9. YouCompleteMe自动补全的安装配置与使用
  10. C#语法基础(二)---数组stringArrayList
  11. awr报告与statspack报告
  12. 开源截图录屏软件Captura
  13. 递归算法经典实例python-Python实现经典递归算法
  14. 深度linux系统怎么安装软件
  15. 2018年六月前十超级计算机,CPU天梯图2018年6月最新版 六月台式电脑CPU性能排行 (全文)...
  16. 紫乌鸦服务器维护后多久刷,魔兽世界紫乌鸦怎么刷 刷新点在哪什么时候去蹲点...
  17. Kaggle注册及绑定手机号
  18. outlook ios日历_如何从Outlook 2013中的日历中删除假期
  19. cisp含金量怎么样?
  20. linux怎么发送邮件到qq邮箱,centos7命令行下用QQ邮箱发送邮件教程

热门文章

  1. 猫眼盯上KOL,娱乐营销得靠网红了?
  2. 解决esp-idf-5.0编译时报错:Component “tinyusb“ does not support target esp32
  3. 儿童护眼灯怎么选?2022年好用的儿童护眼台灯推荐
  4. error: invalid key: user.name
  5. Unity3d操作的一些技巧知识点和BUG解决方案
  6. 线性代数(5)—— 向量组的秩和矩阵的秩
  7. 120年奥运会数据分析
  8. IELTS学习(001) - 语法构成原理
  9. JVM篇·垃圾收集器与内存分配策略
  10. IDEA无法启动Tomcat显示[localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirector