1、极光推送的思路就是,每一个app都有一个AppKey和Master Secret,这两个值是唯一的,也就是用来标识App的唯一信息,具体怎么获取,去看极光推送官网文档,这里就不在讲解。我们在极光开发者上创建好了一个测试App后,设置好这两个值,就可以获取到如下信息。

2、此时我们已经获取到了 AppKey和Master Secret,下面就是使用java代码实现消息推送功能。我这里采用Spring Boot框架开发的。在推送消息的时候,必须得获取到当前设备的设备号deviceTagAlias,这是用来定位当前设备的App的,这样才能准确定位到App。

导入pom.xml依赖

 <!-- 极光推送 --><dependency><groupId>cn.jpush.api</groupId><artifactId>jpush-client</artifactId><version>3.2.17</version></dependency><dependency><groupId>cn.jpush.api</groupId><artifactId>jiguang-common</artifactId><version>1.0.3</version></dependency>

用于保存推送消息各自参数的Vo类

@Data
@ApiModel
public class JdPushVo implements Serializable {private static final long serialVersionUID = 5765482497625927662L;@ApiModelProperty(name = "alias", value = "别名", dataType = "String")private String alias;@ApiModelProperty(name = "title", value = "标题", dataType = "String")private String title;@ApiModelProperty(name = "alert", value = "通知内容", dataType = "String")private String alert;@ApiModelProperty(name = "timeToLive", value = "离线消息保留时长(秒)默认 86400 (1 天)", dataType = "Integer")private Integer timeToLive = 86400;@ApiModelProperty(name = "deviceTagAlias", value = "设备号", dataType = "String")private String deviceTagAlias;
}

用于保存AppKey和Master Secret的配置类

@Component
public class JdPushConfig {public static final String MASTER_SECRET = "这里换成App对应的值";public static final String APP_KEY = "这里换成App对应的值";
}

消息推送工具类

@Component
public class JdPushUtil {private final static String appKey = JdPushConfig.APP_KEY;private final static String masterSecret = JdPushConfig.MASTER_SECRET;private final static JPushClient jpushClient = new JPushClient(masterSecret, appKey);// 极光推送>>Androidpublic static void jpushAndroid(JdPushVo jdPushVo) {try {TagAliasResult deviceTagAlias = jpushClient.getDeviceTagAlias(jdPushVo.getDeviceTagAlias());jdPushVo.setAlias(deviceTagAlias.alias);System.out.println(jdPushVo.toString());} catch (APIConnectionException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (APIRequestException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}// 推送的关键,构造一个payloadMap<String, String> m = new HashMap<String, String>();m.put("title", jdPushVo.getTitle());m.put("alert", jdPushVo.getAlert());PushPayload payload = PushPayload.newBuilder().setPlatform(Platform.android())// 指定android平台的用户//                .setAudience(Audience.all())//你项目中的所有用户.setAudience(Audience.alias(jdPushVo.getAlias()))// 根据别名推送.setNotification(Notification.android(m.get("alert"), m.get("title"), m))// 发送内容,这里不要盲目复制粘贴,这里是我从controller层中拿过来的参数).setOptions(Options.newBuilder().setApnsProduction(false).build())// 这里是指定开发环境,不用设置也没关系// .setMessage(Message.content(parm.get("msg")))//自定义信息.build();try {PushResult pu = jpushClient.sendPush(payload);System.out.println(pu.toString());} catch (APIConnectionException e) {e.printStackTrace();} catch (APIRequestException e) {e.printStackTrace();}}// 极光推送>>iospublic static void jpushIOS(Map<String, String> parm) {PushPayload payload = PushPayload.newBuilder().setPlatform(Platform.ios())// ios平台的用户.setAudience(Audience.all())// 所有用户.setNotification(Notification.newBuilder().addPlatformNotification(IosNotification.newBuilder().setAlert(parm.get("msg")).setBadge(+1).setSound("happy")// 这里是设置提示音(更多可以去官网看看).addExtras(parm).build()).build()).setOptions(Options.newBuilder().setApnsProduction(false).build()).setMessage(Message.newBuilder().setMsgContent(parm.get("msg")).addExtras(parm).build())// 自定义信息.build();try {PushResult pu = jpushClient.sendPush(payload);} catch (APIConnectionException e) {e.printStackTrace();} catch (APIRequestException e) {e.printStackTrace();}}//设置别名public static void setAlias(String deviceTagAlias, String alias) {HashSet<String> tagsToAdd = new HashSet<>();HashSet<String> tagsToRemove = new HashSet<>();try {jpushClient.updateDeviceTagAlias(deviceTagAlias, alias, tagsToAdd, tagsToRemove);} catch (APIConnectionException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (APIRequestException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//删除别名public static void delAlias(String username) {try {jpushClient.deleteAlias(username,null);} catch (APIConnectionException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (APIRequestException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

3、代码思路是这样,首先用户登录成功以后,会调用这个工具类的setAlias方法设置别名,我这里是采用用户名设置的别名,然后参数有String deviceTagAlias, String alias,设备号前端获取到以后传给后端,后端调用此方法为该设备下的该用户设置好别名,然后才能定位到App实现消息推送。

4、当登陆成功后,别名也设置好了,然后就可以进行消息推送了

消息推送的主要步骤就是构建一个推送对象Payload,设置好推送目标(安卓、还是ios、还是所有)、推送单位(所用用户、别名、标签)、推送内容,对象构建完成后,调用sendPush方法就能实现推送了,参数自己根据项目需求进行更改。

5、如果用户退出登录以后,必须把别名信息给删除,如果不删除,用户退出后还会继续在该App上推送消息,就会显得十分恶心,在退出登录接口中调用该方法可以实现别名删除。

6、消息推送的大致功能以及实现,最后看效果图。在手机上安装极光推送开发者测试App。

采用Swagger测试接口:

最后看手机上的消息:

推送功能成功实现,欢迎大家留言讨论。

java集成极光推送实现Android的消息推送相关推荐

  1. 2015最新最全 Android 谷歌消息推送GCM 详细使用教程

    因为项目是非大陆的手机项目,所以当要使用到消息推送的时候,百度了一下,国内的消息方案可以是: 1.百度云推送.也确实很快就可以搭建客户端和服务端,加载他的sdk,大概花了半个小时,就可以在手机端收到推 ...

  2. Android端消息推送总结:实现原理、心跳保活、遇到的问题等

    前言 最近研究Android推送的实现, 研究了两天一夜, 有了一点收获, 写下来既为了分享, 也为了吐槽. 需要说明的是有些东西偏底层硬件和通信行业, 我对这些一窍不通, 只能说说自己的理解. 为什 ...

  3. app消息推送服务器端,系统服务:APP消息推送服务

    APP消息推送服务开通方法 在云表官网-管理控制台中,选择要开通APP消息推送服务的服务器,然后选择要开通APP消息推送服务的应用空间,点击对应应用空间的"应用空间管理". 在进入 ...

  4. java 集成极光推送

    为什么需要推送 现在手机App中,每天都能收到大量的推送,这种推送是让用户了解app最新活动与消息,也是提醒用户参与活动并使用app的一个方法,在app中是必不可少的.公司开发app当然也需要使用一种 ...

  5. java集成极光推送(仅仅极光注册Id字段发送)

    添加依赖 在pom.xml文件的<dependencies></dependencies>标签中,加入下面依赖,且刷新依赖 <!-- 使用极光推送的jar包 --> ...

  6. 基于openfire+smack的Android、消息推送服务

    前言 Java领域的即时通信的解决方案可以考虑openfire+spark+smack.当然也有其他的选择. Openfire 是基于Jabber协议(XMPP)实现的即时通信服务器端版本,目前建议使 ...

  7. android热门消息推送横向测评![转]

    关于这个话题,已经不是什么新鲜事了.对于大多数中小型公司一般都是选择第三方的服务来实现.但是现在已经有很多提供推送服务的公司和产品,如何选择一个适合自己项目的服务呢?它们之间都有什么差别?在此为大家做 ...

  8. Android 生态消息推送平台介绍

    一.手机厂商平台 华为消息推送服务 华为推送(Push)是为开发者提供的消息推送平台,建立了从云端到手机端的消息推送通道,使应用可以将最新信息及时通知用户,从而构筑良好的用户关系,提升用户的感知和活跃 ...

  9. Android App消息推送 实现原理

    https://www.jianshu.com/p/b61a49e0279f 1.消息推送的实质 实际上,是当服务器有新消息需推送给用户时,先发送给应用App,应用App再发送给用户 2. 作用 产品 ...

最新文章

  1. Day 13 Python 一之helloworld
  2. 当double类型数学计算精度偏差解决
  3. CentOS 6.2安装
  4. 2PC到3PC到Paxos到Raft到ISR
  5. 说下Java堆空间结构,及常用的jvm内存分析命令和工具
  6. FullCalendar 七:FullCalendar应用——整合农历节气和节日
  7. Hadoop1——创建虚拟机
  8. 计算机考研哈理工好吗,哈尔滨理工大学考研难吗?一般要什么水平才可以进入?...
  9. 论文阅读-多任务(2021)-YOLOP:用于自动驾驶目标检测与语义分割的实时多任务模型
  10. 2021第十届小美赛-“认证杯”数学中国数学建模国际赛
  11. html焦点自动轮播幻灯片js,js实现幻灯片轮播图
  12. php色子,jQuery+PHP实现的掷色子抽奖游戏实例,jquery色子_PHP教程
  13. C++STL(下)——关联式容器(Associative Containers)与算法
  14. 免费的API-手机号码归属地接口
  15. IOS时间格式问题调试与解决
  16. c1欧洲语言标准是什么水平,CEFR 为什么会成为全球语言标准体系?
  17. 【DB笔试面试733】在Oracle中,RAC中REMOTE_LISTENER的作用是什么?
  18. 如何更改虚拟光驱与物理光驱的盘符
  19. C# Windows桌面应用 ---- 实例:文件读写
  20. DOM中的node(节点)有关的三个属性--nodeType、nodeName、nodeValue

热门文章

  1. Ubuntu安装apex教程
  2. 2023年全国最新二级建造师精选真题及答案50
  3. 易乐游服务器系统,易乐游装在云服务器
  4. mysql比较两张表中两个字段值_如何通过SQL找出2个表里值不同的列的方法
  5. 移动开发中“单位”的那些事儿
  6. 玩转Jetson AGX Orin官方套件
  7. Bert模型(一)安装及问题解决(基本每一步都有问题)
  8. 《脱颖而出——成功网店经营之道》一1.3 两个人的战争:二东之争
  9. python 并发 数据库_python写入mysql数据库
  10. 怎么将图片压缩到50k以内?教你一招将图片缩小的方法