java集成jpush实现客户端推送
前言
java 集成jpush 实现客户端推送
一、准备工作
开发环境:
jdk1.6
Eclipse Luna Service Release 1 (4.4.1)
运行环境:
eclipse
二、jpush 推送说明
jpush推送是国内的服务厂商提供的一站式push服务(同时支持iOS、android),后面也加入了即时通讯的能力供app使用。致力于打造简单、可靠、价格有竞争力的服务(简单功能全免费,高级版才收费),让应用开发商可以聚焦业务开发,push相关的技术实现全部通过极光推送来解决,仅需调用极光推送的api即可
三、推送原理
安卓客户端推送原理
JPush WP Push 包括 1个部分,MPNs 推送(代理)。
红色部分是 MPNs 推送,JPush 代理开发者的应用,向微软 MPNs 服务器推送。由 Microsoft MPNs Server 推送到 WP 设备上。
蓝色部分是 JPush 应用内推送部分,但目前暂不支持应用内消息。

苹果客户端推送原理
从图可以看出,JPush iOS Push 包括 2 个部分,APNs 推送(代理),与 JPush 应用内消息。
红色部分是 APNs 推送,JPush 代理开发者的应用(需要基于开发者提供的应用证书),向苹果 APNs 服务器推送。由 APNs Server 推送到 iOS 设备上。
蓝色部分是 JPush 应用内推送部分,即 App 启动时,内嵌的 JPush SDK 会开启长连接到 JPush Server,从而 JPush Server 可以推送消息到 App 里。

四、代码结构

mysql 表结构

五、服务端程序实现
1、推送基本分为安卓与苹果。
Android("android"),
IOS("ios"),
WinPhone("winphone");
private final String value;
private DeviceType(final String value) {
this.value = value;
}
public String value() {
return this.value;
}
2、定义推送接口推送单个用户、多个用户、单个设备、整个app。
public void pushToUser(String type,String userId, PushEntity pushEntity);
public void pushToUserList(String type,List<String> userIdList, PushEntity pushEntity);
public void pushToDevice(String type,List<String> deviceTokenList, PushEntity pushEntity);
public void pushToApp(String type,PushEntity pushEntity);
3、推送环境区分、安卓不区分开发与生产环境,苹果需要区分。
List<String[]> JpushInfoList = MobilePushService.getJpushKeyInfo(type,pushEntity.getJpushApiMasterSecret(),
pushEntity.getJpushAppKey());
// 如果配置mobile.notify.ios.production=false,则是开发模式
boolean iosMode = true;
// 设置平台
payloadBuilder.setPlatform(deviceType.equals(DeviceType.IOS) ? Platform.ios() : Platform.android());
Map<String, Object> extrasMap = new HashMap<String, Object>();
4、集成jpush api 实现推送功能。
try {
JPushClient jPushClient = new JPushClient(jpushInfo[0], jpushInfo[1], iosMode,
(pushEntity.getJpushTimeToLive() == null ? 86400 : pushEntity.getJpushTimeToLive()));
jPushClient.sendPush(pushPayload);
} catch (Exception e) {
// 个推时如果手机端没有注册用户,不打错误日志
if (e.getMessage().indexOf("\"code\": 1011") == -1) {
logger.error("JPUSH推送消息时发生异常:[" + e.getMessage() + "]", e);
}
}
5、通过mysql配置jpush key与secret 动态更换配置。
// 如果设定了自定义key,则使用自定义,否则进行数据库查询
if (StringUtils.isNotBlank(apiMasterSecret) && StringUtils.isNotBlank(appKey)) {
resultA.add(new String[] { apiMasterSecret, appKey });
} else {
resultList = CptNotifyJpush.dao.findCptNotifyJpush(type);
if (resultList != null && resultList.size() > 0) {
for (CptNotifyJpush result : resultList) {
resultA.add(new String[] {result.getStr("api_master_secret"),result.getStr("app_key") });
}
}
}
六、客户端集成步骤
step1:去极光推送注册账号:https://www.jpush.cn/,并注册应用。
step2:上传apns证书到极光,apns证书的生成步骤参考:
http://docs.jpush.io/client/ios_tutorials/#ios_1
仔细阅读该文档,上传成功后控制台的应用详情里面会显示“已验证”,说明证书有效。
step3:对你的app工程重新配置,使用新的支持apns的provision文件(若此前应用已支持apns,可以不用换),否则后面无法正常获得device token.
step4:集成其sdk,包括一个.a和一个.h文件,最新版本大约是2.1,其sdk中也包含了demo,注意在2.1版本之前需要创建一个plist文件用于保存秘钥信息等,在最新版本不需要此文件。
sdk下载地址:https://www.jpush.cn/common/products#product-download
step5:主要代码修改如下:
appdelegate.h:
static NSString *appKey = @"Your_app_key";
static NSString *channel = @"Your_channel_identifier";
static BOOL isProduction = NO;
七、运行方法
public static void main(String args[]){
JPushService pushService=new JPushService();
PushEntity pushEntity=new PushEntity();
//修改密钥
pushEntity.setJpushApiMasterSecret("0a35d2fabea1df2dfc36d32l");
pushEntity.setJpushAppKey("a344debcf41e5542b291d52f");
pushEntity.setMsgContent("test jpush");
pushEntity.setMsgTitle("test jpush");
pushService.sendNotification2App("",pushEntity, DeviceType.IOS);
} pushEntity.setJpushAppKey("a344debcf41e5542b291d52f");
pushEntity.setMsgContent("test jpush");
pushEntity.setMsgTitle("test jpush");
pushService.sendNotification2App("",pushEntity, DeviceType.IOS);java集成jpush实现客户端推送
注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权
java集成jpush实现客户端推送的更多相关文章
- Android集成JPush(极光推送)
目前只是简单的集成 1.在极光推送官网注册用户 2.创建应用 3.配置包名,获得APPKEY 去设置 输入应用包名 确定然后返回查看APPKEY 3.在应用中集成极光推送 用的jcenter自动集成的 ...
- Android高效率编码-第三方SDK详解系列(三)——JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送
Android高效率编码-第三方SDK详解系列(三)--JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送 很久没有更新第三方SDK这个系列了,所以更新一下这几天工作中使用到的推送, ...
- pushlet实现服务器端向客户端推送信息
使用Pushlet来实现服务器端向客户端推送信息 1. 实现方式: 有两种实现方式: 1. 通过配置文件来实现定时的从服务器端向客户端推送信息 2. 通过API主动 ...
- 使用Pushlet来实现服务器端向客户端推送信息
使用Pushlet来实现服务器端向客户端推送信息 1. 实现方式: 有两种实现方式: 1. 通过配置文件来实现定时的从服务器端向客户端推送信息 2. 通过A ...
- 使用 SignalR与SSE(Sever sent event)向客户端推送提示信息
最近有个项目想把c/s的代码转成mvc的,这听起来并不困难. 如果UI和业务逻辑良好分离了的话,不会花太多的功夫,应该多数的内容都能重复利用. 但在实际的操作过程中,发现业务逻辑代码和UI提示全是混在 ...
- 服务端向客户端推送消息技术之websocket的介绍
websocket的介绍 在讲解WebSocket前,我们先来看看下面这种场景,在HTTP协议下,怎么实现. 需求: 在网站中,要实现简单的聊天,这种情况怎么实现呢?如下图: 当发送私信的时候,如果要 ...
- java 使用 comet4j 主动向客户端推送信息 简单例子
[背景] 今天,一个前端的师弟问我怎样做实时聊天窗口,我毫不犹豫地说:在前台定时访问服务端呀!师弟默默地百度了一番,最后告诉我,有一种技术是后服务端动推送信息给客户端的,这种技术的名字叫comet,我 ...
- IOS JPush 集成步骤(极光远程推送解决方案,支持android和iOS两个平台)
● 什么是JPush ● 一套远程推送解决方案,支持android和iOS两个平台 ● 它能够快捷地为iOS App增加推送功能,减少集成APNs需要的工作量.开发复杂 度 ● 更多的信息,可 ...
- Java项目中集成钉钉机器人推送消息提醒
前言: 项目中有一个需求,当有新订单产生的时候,希望能够及时通知到业务相关人员进行处理,整体考虑了一下,选用了钉钉机器人提醒功能(公司内部主要也是使用钉钉进行通讯). 操作: 主要分为两部分进行处理: ...
随机推荐
- React 中组件的生命周期
先上代码, react 用的是 15.0.1 <!DOCTYPE html> <html> <head> <script src="./build/ ...
- [BZOJ2595]游览计划
斯坦纳树居然不是数据结构... 斯坦纳树应该是类似最小生成树的问题,只不过它允许增加额外的点 比如这道题就是找关于景点的最小生成树,但还要付出最小的代价,加一些额外的格子把景点都连起来 套路是设$f_ ...
- idea自动生成spring实体
创建Spring Boot项目 idea创建新项目 File->New->Project选择Spring Initializr默认使用官方的https://start.spring.io/ ...
- [NOIP2013 花匠] 新人解题报告
本来按照老师的要求,我学OI的第一份解题报告应是在寒假完成的关于数据结构的基础题,但由于身体原因当时未能完成,那么就在省选赛前临时写几篇吧…… 题目描述 花匠栋栋种了一排花,每株花都有自己的高度.花儿 ...
- Codeforces Round #341 (Div. 2) D. Rat Kwesh and Cheese 数学
D. Rat Kwesh and Cheese 题目连接: http://www.codeforces.com/contest/621/problem/D Description Wet Shark ...
- 免费网站监控服务阿里云监控,DNSPod监控,监控宝,360云监控使用对比
网站会因为各种原因而导致宕机,具体表现为服务器没有响应,用户打不开网页,域名解析出错,搜索引擎抓取页面失败,返回各种HTTP错误代码.网站宕机可能带来搜索引擎的惩罚,网站服务器不稳定与百度关系文章中就 ...
- kindeditor在Firefoxt 和 Chrome 下不能取到值的解决方法
默认form模式提交数据的时候,在ie下用户不需要进行任何设置和调用sync函数,因为editor已经自动调用,但是在firefox和 chrome下,用户如果不手动调用sync函数,editor的数 ...
- [典型漏洞分享]一个典型的软件漏洞--memcpy导致的缓冲区溢出
YS VTM模块存在缓冲区溢出漏洞,可导致VTM进程异常退出[高] 问题描述: YS VTM模块开放对外监听端口(8554和8664),并从外部接收网络数据,中间模块调用到memcpy函数对网络数据进 ...
- <摘录>linux 默认的include
#include <linux/module.h> 中的module.h默认是在哪个目录下呢?我在/usr/include/linux下并没有找到这个文件. 另外想问一下,不同内核版本的l ...
- java多线程处理导入数据拆分List集合 同步处理插入数据
原文:https://www.2cto.com/kf/201612/581174.html import org.apache.log4j.Logger; import org.apache.poi. ...