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