代码地址如下:
http://www.demodashi.com/demo/13700.html

前言

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实现客户端推送

代码地址如下:
http://www.demodashi.com/demo/13700.html

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

java集成jpush实现客户端推送的更多相关文章

  1. Android集成JPush(极光推送)

    目前只是简单的集成 1.在极光推送官网注册用户 2.创建应用 3.配置包名,获得APPKEY 去设置 输入应用包名 确定然后返回查看APPKEY 3.在应用中集成极光推送 用的jcenter自动集成的 ...

  2. Android高效率编码-第三方SDK详解系列(三)——JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送

    Android高效率编码-第三方SDK详解系列(三)--JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送 很久没有更新第三方SDK这个系列了,所以更新一下这几天工作中使用到的推送, ...

  3. pushlet实现服务器端向客户端推送信息

    使用Pushlet来实现服务器端向客户端推送信息 1.   实现方式: 有两种实现方式: 1.         通过配置文件来实现定时的从服务器端向客户端推送信息 2.         通过API主动 ...

  4. 使用Pushlet来实现服务器端向客户端推送信息

        使用Pushlet来实现服务器端向客户端推送信息 1.   实现方式: 有两种实现方式: 1.         通过配置文件来实现定时的从服务器端向客户端推送信息 2.         通过A ...

  5. 使用 SignalR与SSE(Sever sent event)向客户端推送提示信息

    最近有个项目想把c/s的代码转成mvc的,这听起来并不困难. 如果UI和业务逻辑良好分离了的话,不会花太多的功夫,应该多数的内容都能重复利用. 但在实际的操作过程中,发现业务逻辑代码和UI提示全是混在 ...

  6. 服务端向客户端推送消息技术之websocket的介绍

    websocket的介绍 在讲解WebSocket前,我们先来看看下面这种场景,在HTTP协议下,怎么实现. 需求: 在网站中,要实现简单的聊天,这种情况怎么实现呢?如下图: 当发送私信的时候,如果要 ...

  7. java 使用 comet4j 主动向客户端推送信息 简单例子

    [背景] 今天,一个前端的师弟问我怎样做实时聊天窗口,我毫不犹豫地说:在前台定时访问服务端呀!师弟默默地百度了一番,最后告诉我,有一种技术是后服务端动推送信息给客户端的,这种技术的名字叫comet,我 ...

  8. IOS JPush 集成步骤(极光远程推送解决方案,支持android和iOS两个平台)

    ●  什么是JPush ●  一套远程推送解决方案,支持android和iOS两个平台 ●  它能够快捷地为iOS App增加推送功能,减少集成APNs需要的工作量.开发复杂 度 ●  更多的信息,可 ...

  9. Java项目中集成钉钉机器人推送消息提醒

    前言: 项目中有一个需求,当有新订单产生的时候,希望能够及时通知到业务相关人员进行处理,整体考虑了一下,选用了钉钉机器人提醒功能(公司内部主要也是使用钉钉进行通讯). 操作: 主要分为两部分进行处理: ...

随机推荐

  1. [BZOJ4455][ZJOI2016]数星星(容斥DP)

    4455: [Zjoi2016]小星星 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 707  Solved: 419[Submit][Status] ...

  2. 关于lower_bound的优先级重载

    今天才知道$lower\_bound$最后有一个优先级参数…… 首先$lower\_bound$中的优先级和序列优先级必须相同才有效 $lower\_bound$中优先级默认的是小于号,也就是说仅当序 ...

  3. 【差分约束系统】【强连通分量缩点】【拓扑排序】【DAG最短路】CDOJ1638 红藕香残玉簟秋,轻解罗裳,独上兰舟。

    题意: 给定n个点(点权未知)和m条信息:u的权值>=v的权值+w 求点权的极小解和极大解(无解则输出-1) 极小解即每个点的点权可能的最小值 极大解即每个点的点权可能的最大值 题解: 差分约束 ...

  4. bzoj 1787: [Ahoi2008]Meet 紧急集合

    1787: [Ahoi2008]Meet 紧急集合 Description Input Output Sample Input 6 4 1 2 2 3 2 4 4 5 5 6 4 5 6 6 3 1 ...

  5. FutureTask源码分析

    1. 常量和变量 private volatile int state; // 任务状态 private static final int NEW = 0; private static final ...

  6. JAVA EE 中之AJAX 无刷新地区下拉列表三级联动

    JSP页面 <html> <head> <meta http-equiv="Content-Type" content="text/html ...

  7. 搭建MySQL的主从、半同步、主主复制架构

    复制其最终目的是让一台服务器的数据和另外的服务器的数据保持同步,已达到数据冗余或者服务的负载均衡.一台主服务器可以连接多台从服务器,并且从服务器也可以反过来作为主服务器.主从服务器可以位于不同的网络拓 ...

  8. 转载:做ArcEngine的二次开发出现“没有注册类别 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)”

    转自:http://blog.sina.com.cn/s/blog_638e61a40100ynnc.html 出现这个问题主要是因为32位操作系统和64位操作系统存在兼容性问题. 解决方案: 1.鼠 ...

  9. palm os

    在3G展会上,Palm将告别Palm OS操作系统 2009年2月12日消息,据国外媒体报道,周三,Palm CEO埃德•科林根(Ed Colligan)在旧金山的一个投资者会议上表示,Palm将告别 ...

  10. ElementUI使用问题记录:设置路由+iconfont图标+自定义表单验证

    一.关于导航怎么设置路由 1.在el-menu这个标签的属性中添加 router ,官方文档的解释是:启用vue-router 这种模式 2.在el-menu-item标签中的index属性直接书写路 ...