前言
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大师代发,拒绝转载,转载需要作者授权