极光推送Jpush之RestAPI使用实例
2015-11-13 18:02
591 查看
前言:极光推送是国内比较专业的推送服务企业,听说很多写App的童孩都喜欢用激光的推送,我这里根据JpushAPI写了一个web端向客户端推送的实例程序,以资参考。
2.2客户接口实现
2.3司机接口
2.4司机接口实现
2.5Junit测试
里面有无关的测试,看的时候可以忽略掉:
package com.wlyd.jyxt;
import java.util.Date;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import cn.jpush.api.push.model.Platform;
import cn.jpush.api.push.model.PushPayload;
import cn.jpush.api.push.model.audience.Audience;
import cn.jpush.api.push.model.notification.Notification;
import com.wlyd.jyxt.persistence.beans.ylxt.YlPushMessage;
import com.wlyd.jyxt.service.push.JPushForCustomerService;
import com.wlyd.jyxt.service.push.JPushForDriverService;
import com.wlyd.jyxt.service.push.JPushService;
/**
* @packge com.wlyd.jyxt.JPushServiceTest
* @date 2015年9月18日 下午3:23:25
* @author pengjunlin
* @comment REST API测试
* @update
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class JPushServiceTest {
@Autowired
JPushService jPushService;
@Autowired
JPushForCustomerService jPushForCustomerService;
@Autowired
JPushForDriverService jPushForDriverService;
/**
*
* @MethodName: testPush
* @Description: 推送alert通知 by jsonString
* @throws
*/
@Test
public void testPush(){
String jsonParams="{\""+"platform"+"\":"+"\""+"all"+"\","+"\""+"audience"+"\":"+"\""+"all"+"\","+"\""+"notification"+"\":{"+"\""+"alert"+"\":"+"\""+"Hi,JPush!"+"\"}"+"}";
System.out.println(jsonParams);
String result=jPushService.pushAndroidMsg(jsonParams);
System.out.println("推送返回结果:");
System.out.println(result);
}
/**
* @MethodName: testPushPayload
* @Description: 推送alert通知by PushPayload
* @throws
*/
@Test
public void testPushPayload(){
Platform platform = Platform.all();
Audience audience = Audience.all();
Notification notifcation = Notification.alert("alert");
PushPayload pushPayload=PushPayload.newBuilder().setPlatform(platform).setAudience(audience).setNotification(notifcation).build();
String result=jPushService.pushAndroidMsgByPushPayload(pushPayload);
System.out.println("推送返回结果:");
System.out.println(result);
}
/**
*
* @MethodName: testPushMessageByRegistrationIdForCustomer
* @Description: 推送消息并保持到JYXT
* @throws
*/
@Test
public void testPushMessageByRegistrationIdForCustomer(){
YlPushMessage pushMessage=new YlPushMessage();
pushMessage.setYpmReceiveCode("YL019");
pushMessage.setYpmMasterCode(""+System.currentTimeMillis());
pushMessage.setYpmContent("尊敬的客户朋友:成都-上海 线路的运力需求,发布成功");
pushMessage.setYpmPushTime(new Date());
pushMessage.setYpmDeviceToken("shiwl111");
pushMessage.setYpmSuccessState(1);
pushMessage.setYpmAcceptState(1);
pushMessage.setYpmPushState(1);
String result=jPushForCustomerService.pushMsgToRegistrationId(pushMessage, "成都-上海", pushMessage.getYpmContent());
System.out.println("推送返回结果:");
System.out.println(result);
}
/**
*
* @MethodName: testPushMessageByTagForCustomer
* @Description: 推送消息并保持到JYXT
* @throws
*/
@Test
public void testPushMessageByTagForCustomer(){
YlPushMessage pushMessage=new YlPushMessage();
pushMessage.setYpmReceiveCode("YL019");
pushMessage.setYpmMasterCode(""+System.currentTimeMillis());
pushMessage.setYpmContent("尊敬的客户朋友:成都-上海 线路的运力需求,发布成功");
pushMessage.setYpmPushTime(new Date());
pushMessage.setYpmDeviceToken("shiwl111");
pushMessage.setYpmSuccessState(1);
pushMessage.setYpmAcceptState(1);
pushMessage.setYpmPushState(1);
String result=jPushForCustomerService.pushMsgByTag(pushMessage, "成都-上海", pushMessage.getYpmContent());
System.out.println("推送返回结果:");
System.out.println(result);
}
/**
*
* @MethodName: testPushMessageByAliasForCustomer
* @Description: 推送消息并保持到JYXT
* @throws
*/
@Test
public void testPushMessageByAliasForCustomer(){
YlPushMessage pushMessage=new YlPushMessage();
pushMessage.setYpmReceiveCode("YL019");
pushMessage.setYpmMasterCode(""+System.currentTimeMillis());
pushMessage.setYpmContent("尊敬的客户朋友:成都-上海 线路的运力需求,发布成功");
pushMessage.setYpmPushTime(new Date());
pushMessage.setYpmDeviceToken("account");
pushMessage.setYpmSuccessState(1);
pushMessage.setYpmAcceptState(1);
pushMessage.setYpmPushState(1);
String result=jPushForCustomerService.pushMsgByAlias(pushMessage, "成都-上海", pushMessage.getYpmContent());
System.out.println("推送返回结果:");
System.out.println(result);
}
/**
*
* @MethodName: testPushBrodcastForCustomer
* @Description: 推送消息并保持到JYXT
* @throws
*/
@Test
public void testPushBrodcastForCustomer(){
String result=jPushForCustomerService.pushMsgBroadCast("成都-上海", "尊敬的客户朋友:成都-上海 线路的运力需求,发布成功");
System.out.println("推送返回结果:");
System.out.println(result);
}
/**
*
* @MethodName: testPushMessageByRegistrationIdForDriver
* @Description: 推送消息并保持到JYXT
* @throws
*/
@Test
public void testPushMessageByRegistrationIdForDriver(){
YlPushMessage pushMessage=new YlPushMessage();
pushMessage.setYpmReceiveCode("YL001YL150916005");
pushMessage.setYpmMasterCode(""+System.currentTimeMillis());
pushMessage.setYpmContent("尊敬的司机朋友:成都-上海 线路的运力需求,正在抢单");
pushMessage.setYpmPushTime(new Date());
pushMessage.setYpmDeviceToken("shiwl111");
pushMessage.setYpmSuccessState(1);
pushMessage.setYpmAcceptState(1);
pushMessage.setYpmPushState(0);
String result=jPushForDriverService.pushMsgToRegistrationId(pushMessage, "成都-上海", pushMessage.getYpmContent());
System.out.println("推送返回结果:");
System.out.println(result);
}
/**
*
* @MethodName: testPushMessageByTagForDriver
* @Description: 推送消息并保持到JYXT
* @throws
*/
@Test
public void testPushMessageByTagForDriver(){
YlPushMessage pushMessage=new YlPushMessage();
pushMessage.setYpmReceiveCode("YL001YL150916005");
pushMessage.setYpmMasterCode(""+System.currentTimeMillis());
pushMessage.setYpmContent("尊敬的司机朋友:成都-上海 线路的运力需求,正在抢单");
pushMessage.setYpmPushTime(new Date());
pushMessage.setYpmDeviceToken("shiwl111");
pushMessage.setYpmSuccessState(1);
pushMessage.setYpmAcceptState(1);
pushMessage.setYpmPushState(0);
String result=jPushForDriverService.pushMsgByTag(pushMessage, "成都-上海", pushMessage.getYpmContent());
System.out.println("推送返回结果:");
System.out.println(result);
}
/**
*
* @MethodName: testPushMessageByAliasForDriver
* @Description: 推送消息并保持到JYXT
* @throws
*/
@Test
public void testPushMessageByAliasForDriver(){
YlPushMessage pushMessage=new YlPushMessage();
pushMessage.setYpmReceiveCode("WS001YL151010005");
pushMessage.setYpmMasterCode(""+System.currentTimeMillis());
pushMessage.setYpmContent("尊敬的司机朋友:成都-上海 线路的运力需求,正在抢单");
pushMessage.setYpmPushTime(new Date());
pushMessage.setYpmDeviceToken("13882287884");
pushMessage.setYpmSuccessState(1);
pushMessage.setYpmAcceptState(1);
pushMessage.setYpmPushState(0);
for (int i = 0; i < 3; i++) {
String result=jPushForDriverService.pushMsgByAlias(pushMessage, "成都-上海", pushMessage.getYpmContent());
System.out.println("推送返回结果:");
System.out.println(result);
}
}
}
1.App管理信息配置文件
jpush.properties# Jpush android application masterSecret**********************FOR TEST SAMPLE jpush.masterSecret=9ba713ec2eadbea8d4e32616 # Jpush android application appKey jpush.appKey=7b6c694575694606de9c5591 # Jpush android application masterSecret**********************FOR CUSTOMER APP jpush.customer.masterSecret=cf972b8899b698365293dbcc # Jpush android application appKey jpush.customer.appKey=a25636c0fd5fc7e9bffaf83d # Jpush android application masterSecret**********************FOR DRIVER APP jpush.driver.masterSecret=46e9c9e746e06a414206ab7c # Jpush android application appKey jpush.driver.appKey=abc69df6995402f0d117e8c3 #Jpush rest API address jpush.jpushApi=https://api.jpush.cn #Push support client platform value can be "all" or ["android", "ios"] jpush.platform=all # set 0 means does not storage offline messages,default 86400==1 day,max value limit to 10 days. jpush.options.time_to_live=86400 # apns way is to real environment or not.if not set this value means in real environment. jpush.options.apns_production=true
2.推送接口定义和调用
2.1客户接口package com.wlyd.jyxt.service.push; import java.util.List; import com.wlyd.jyxt.persistence.beans.ylxt.YlPushMessage; /** * * @packge com.wlyd.jyxt.service.push.JPushForCustomerService * @date 2015年9月29日 下午3:23:35 * @author pengjunlin * @comment 客户运力需求方App推送接口 * @update */ public interface JPushForCustomerService { /** * * @MethodName: pushMsgBroadCast * @Description: 推送广播消息【后台不记录广播消息】 * @param pushMessage * @param title * @param alert * @return * @throws */ public String pushMsgBroadCast(String title,String alert); /** * * @MethodName: pushMsgToRegistrationId * @Description: 【单个推送】推送消息到用户注册ID(deviceToken) * @param pushMessage * @param title * @param alert * @return * @throws */ public String pushMsgToRegistrationId(YlPushMessage pushMessage,String title,String alert); /** * * @MethodName: pushMsgToRegistrationIds * @Description: 【批量推送】推送消息到用户注册ID(deviceToken)List * @param pushMessages * @param title * @param alert * @return * @throws */ public String pushMsgToRegistrationIds(List<YlPushMessage> pushMessages,String title,String alert); /** * * @MethodName: pushMsgByTag * @Description: 【单个推送】推送消息到用户标签(deviceToken) * @param pushMessage * @param title * @param alert * @return * @throws */ public String pushMsgByTag(YlPushMessage pushMessage,String title,String alert); /** * * @MethodName: pushMsgByTags * @Description: 【批量推送】推送消息到用户标签(deviceToken)List * @param pushMessages * @param title * @param alert * @return * @throws */ public String pushMsgByTags(List<YlPushMessage> pushMessages,String title,String alert); /** * * @MethodName: pushMsgByAlias * @Description: 【单个推送】推送消息到用户手机号别名(deviceToken) * @param pushMessage * @param title * @param alert * @return * @throws */ public String pushMsgByAlias(YlPushMessage pushMessage,String title,String alert); /** * * @MethodName: pushMsgByAlias * @Description: 【批量推送】推送消息到用户手机号别名(deviceToken)List * @param pushMessages * @param title * @param alert * @return * @throws */ public String pushMsgByAlias(List<YlPushMessage> pushMessages,String title,String alert); }
2.2客户接口实现
package com.wlyd.jyxt.service.push.impl; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import cn.jpush.api.common.resp.APIConnectionException; import cn.jpush.api.common.resp.APIRequestException; import cn.jpush.api.push.PushClient; import cn.jpush.api.push.PushResult; import cn.jpush.api.push.model.Platform; import cn.jpush.api.push.model.PushPayload; import cn.jpush.api.push.model.audience.Audience; import cn.jpush.api.push.model.notification.Notification; import com.alibaba.fastjson.JSON; import com.wlyd.jyxt.persistence.beans.ylxt.YlPushMessage; import com.wlyd.jyxt.service.push.JPushForCustomerService; import com.wlyd.jyxt.service.push.YlPushMessageService; /** * * @packge com.wlyd.jyxt.service.push.impl.JPushForCustomerServiceImpl * @date 2015年9月29日 下午3:22:14 * @author pengjunlin * @comment 客户运力需求方App推送接口实现 * @update */ @Service public class JPushForCustomerServiceImpl implements JPushForCustomerService{ /** * JPush REST API */ @Value("${jpush.jpushApi}") private String jpushApi=""; /** * APP MASTER_SECRET */ @Value("${jpush.customer.masterSecret}") private String MASTER_SECRET=""; /** * APP APP_KEY */ @Value("${jpush.customer.appKey}") private String APP_KEY=""; /** * PLATFORM:推送消息平台设置 */ @Value("${jpush.platform}") public String PLATFORM=""; /** * OPTIONS_TIME_TO_LIVE:离线消息保存时间 */ @Value("${jpush.options.time_to_live}") public long OPTIONS_TIME_TO_LIVE=86400; /** * OPTIONS_TIME_TO_LIVE:推送测试环境 */ @Value("${jpush.options.apns_production}") public boolean OPTIONS_APNS_PRODUCTION=false; private static PushClient pushClient = null; @Autowired YlPushMessageService pushMessageService; /** * @MethodName: getInstance * @Description: 获取推送客户端对象实例 * @return * @throws */ public synchronized PushClient getInstance() { if (pushClient == null) { pushClient = new PushClient(MASTER_SECRET, APP_KEY); pushClient.setBaseUrl(jpushApi); pushClient.setDefaults(OPTIONS_APNS_PRODUCTION, OPTIONS_TIME_TO_LIVE); } return pushClient; } @Override public String pushMsgBroadCast(String title, String alert) { PushResult result = null; try { Platform platform = Platform.all(); Audience audience = Audience.all(); Notification notifcation = Notification.android(alert, title, null); PushPayload pushPayload=PushPayload.newBuilder().setPlatform(platform).setAudience(audience).setNotification(notifcation).build(); result = getInstance().sendPush(pushPayload); } catch (APIConnectionException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (APIRequestException e) { // TODO Auto-generated catch block e.printStackTrace(); } return JSON.toJSONString(result); } @Override public String pushMsgToRegistrationId(YlPushMessage pushMessage,String title,String alert) { PushResult result = null; try { Platform platform = Platform.all(); Audience audience = Audience.registrationId(pushMessage.getYpmDeviceToken()); Notification notifcation = Notification.android(alert, title, null); PushPayload pushPayload=PushPayload.newBuilder().setPlatform(platform).setAudience(audience).setNotification(notifcation).build(); result = getInstance().sendPush(pushPayload); } catch (APIConnectionException e) { e.printStackTrace(); } catch (APIRequestException e) { e.printStackTrace(); }finally{ //保存推送消息 Date pushDate=new Date(); int pushSuccess=result.getResponseCode()==200?0:1; pushMessage.setYpmContent(alert+":"+ title); pushMessage.setYpmSuccessState(pushSuccess); pushMessage.setYpmPushTime(pushDate); // 接收消息状态:0:成功,1:未接收,2:拒收 pushMessage.setYpmAcceptState(1); pushMessageService.insert(pushMessage); } return JSON.toJSONString(result); } @Override public String pushMsgToRegistrationIds(List<YlPushMessage> pushMessages, String title, String alert) { PushResult result = null; try { Platform platform = Platform.all(); // 获取发送设备的标识 List<String> registrationIds=new ArrayList<String>(); for (int i = 0,j=pushMessages.size(); i < j; i++) { registrationIds.add(pushMessages.get(i).getYpmDeviceToken()); } Audience audience = Audience.registrationId(registrationIds); Notification notifcation = Notification.android(alert, title, null); PushPayload pushPayload=PushPayload.newBuilder().setPlatform(platform).setAudience(audience).setNotification(notifcation).build(); result = getInstance().sendPush(pushPayload); } catch (APIConnectionException e) { e.printStackTrace(); } catch (APIRequestException e) { e.printStackTrace(); }finally{ //保存推送消息 Date pushDate=new Date(); int pushSuccess=result.getResponseCode()==200?0:1; for (int i = 0,j=pushMessages.size(); i < j; i++) { pushMessages.get(i).setYpmContent(alert+":"+ title); pushMessages.get(i).setYpmSuccessState(pushSuccess); pushMessages.get(i).setYpmPushTime(pushDate); // 接收消息状态:0:成功,1:未接收,2:拒收 pushMessages.get(i).setYpmAcceptState(1); } pushMessageService.batchInsertPushMsg(pushMessages); } return JSON.toJSONString(result); } @Override public String pushMsgByTag(YlPushMessage pushMessage, String title, String alert) { PushResult result = null; try { Platform platform = Platform.all(); Audience audience = Audience.tag(pushMessage.getYpmDeviceToken()); Notification notifcation = Notification.android(alert, title, null); PushPayload pushPayload=PushPayload.newBuilder().setPlatform(platform).setAudience(audience).setNotification(notifcation).build(); result = getInstance().sendPush(pushPayload); } catch (APIConnectionException e) { e.printStackTrace(); } catch (APIRequestException e) { e.printStackTrace(); }finally{ //保存推送消息 Date pushDate=new Date(); int pushSuccess=result.getResponseCode()==200?0:1; pushMessage.setYpmContent(alert+":"+ title); pushMessage.setYpmSuccessState(pushSuccess); pushMessage.setYpmPushTime(pushDate); // 接收消息状态:0:成功,1:未接收,2:拒收 pushMessage.setYpmAcceptState(1); pushMessageService.insert(pushMessage); } return JSON.toJSONString(result); } @Override public String pushMsgByTags(List<YlPushMessage> pushMessages, String title, String alert) { PushResult result = null; try { Platform platform = Platform.all(); // 获取发送设备的标识 List<String> tags=new ArrayList<String>(); for (int i = 0,j=pushMessages.size(); i < j; i++) { tags.add(pushMessages.get(i).getYpmDeviceToken()); } Audience audience = Audience.tag(tags); Notification notifcation = Notification.android(alert, title, null); PushPayload pushPayload=PushPayload.newBuilder().setPlatform(platform).setAudience(audience).setNotification(notifcation).build(); result = getInstance().sendPush(pushPayload); } catch (APIConnectionException e) { e.printStackTrace(); } catch (APIRequestException e) { e.printStackTrace(); }finally{ //保存推送消息 Date pushDate=new Date(); int pushSuccess=result.getResponseCode()==200?0:1; for (int i = 0,j=pushMessages.size(); i < j; i++) { pushMessages.get(i).setYpmContent(alert+":"+ title); pushMessages.get(i).setYpmSuccessState(pushSuccess); pushMessages.get(i).setYpmPushTime(pushDate); // 接收消息状态:0:成功,1:未接收,2:拒收 pushMessages.get(i).setYpmAcceptState(1); } pushMessageService.batchInsertPushMsg(pushMessages); } return JSON.toJSONString(result); } @Override public String pushMsgByAlias(YlPushMessage pushMessage, String title, String alert) { PushResult result = null; try { Platform platform = Platform.all(); Audience audience = Audience.alias(pushMessage.getYpmDeviceToken()); Notification notifcation = Notification.android(alert, title, null); PushPayload pushPayload=PushPayload.newBuilder().setPlatform(platform).setAudience(audience).setNotification(notifcation).build(); result = getInstance().sendPush(pushPayload); } catch (APIConnectionException e) { e.printStackTrace(); } catch (APIRequestException e) { e.printStackTrace(); }finally{ //保存推送消息 Date pushDate=new Date(); int pushSuccess=result.getResponseCode()==200?0:1; pushMessage.setYpmContent(alert+":"+ title); pushMessage.setYpmSuccessState(pushSuccess); pushMessage.setYpmPushTime(pushDate); // 接收消息状态:0:成功,1:未接收,2:拒收 pushMessage.setYpmAcceptState(1); pushMessageService.insert(pushMessage); } return JSON.toJSONString(result); } @Override public String pushMsgByAlias(List<YlPushMessage> pushMessages, String title, String alert) { PushResult result = null; try { Platform platform = Platform.all(); // 获取发送设备的标识 List<String> alias=new ArrayList<String>(); for (int i = 0,j=pushMessages.size(); i < j; i++) { alias.add(pushMessages.get(i).getYpmDeviceToken()); } Audience audience = Audience.alias(alias); Notification notifcation = Notification.android(alert, title, null); PushPayload pushPayload=PushPayload.newBuilder().setPlatform(platform).setAudience(audience).setNotification(notifcation).build(); result = getInstance().sendPush(pushPayload); } catch (APIConnectionException e) { e.printStackTrace(); } catch (APIRequestException e) { e.printStackTrace(); }finally{ //保存推送消息 Date pushDate=new Date(); int pushSuccess=result.getResponseCode()==200?0:1; for (int i = 0,j=pushMessages.size(); i < j; i++) { pushMessages.get(i).setYpmContent(alert+":"+ title); pushMessages.get(i).setYpmSuccessState(pushSuccess); pushMessages.get(i).setYpmPushTime(pushDate); // 接收消息状态:0:成功,1:未接收,2:拒收 pushMessages.get(i).setYpmAcceptState(1); } pushMessageService.batchInsertPushMsg(pushMessages); } return JSON.toJSONString(result); } }
2.3司机接口
package com.wlyd.jyxt.service.push; import java.util.List; import com.wlyd.jyxt.persistence.beans.ylxt.YlPushMessage; /** * * @packge com.wlyd.jyxt.service.push.JPushForDriverService * @date 2015年9月29日 下午3:24:27 * @author pengjunlin * @comment 司机运力提供方App推送接口 * @update */ public interface JPushForDriverService { /** * * @MethodName: pushMsgBroadCast * @Description: 推送广播消息【后台不记录广播消息】 * @param pushMessage * @param title * @param alert * @return * @throws */ public String pushMsgBroadCast(String title,String alert); /** * * @MethodName: pushMsgToRegistrationId * @Description: 【单个推送】推送消息到用户注册ID(deviceToken) * @param pushMessage * @param title * @param alert * @return * @throws */ public String pushMsgToRegistrationId(YlPushMessage pushMessage,String title,String alert); /** * * @MethodName: pushMsgToRegistrationIds * @Description: 【批量推送】推送消息到用户注册ID(deviceToken)List * @param pushMessages * @param title * @param alert * @return * @throws */ public String pushMsgToRegistrationIds(List<YlPushMessage> pushMessages,String title,String alert); /** * * @MethodName: pushMsgByTag * @Description: 【单个推送】推送消息到用户手机号(deviceToken) * @param pushMessage * @param title * @param alert * @return * @throws */ public String pushMsgByTag(YlPushMessage pushMessage,String title,String alert); /** * * @MethodName: pushMsgByTags * @Description: 【批量推送】推送消息到用户手机号(deviceToken)List * @param pushMessages * @param title * @param alert * @return * @throws */ public String pushMsgByTags(List<YlPushMessage> pushMessages,String title,String alert); /** * * @MethodName: pushMsgByAlias * @Description: 【单个推送】推送消息到用户手机号别名(deviceToken) * @param pushMessage * @param title * @param alert * @return * @throws */ public String pushMsgByAlias(YlPushMessage pushMessage,String title,String alert); /** * * @MethodName: pushMsgByAlias * @Description: 【批量推送】推送消息到用户手机号别名(deviceToken)List * @param pushMessages * @param title * @param alert * @return * @throws */ public String pushMsgByAlias(List<YlPushMessage> pushMessages,String title,String alert); }
2.4司机接口实现
package com.wlyd.jyxt.service.push.impl; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import sun.util.logging.resources.logging; import cn.jpush.api.common.resp.APIConnectionException; import cn.jpush.api.common.resp.APIRequestException; import cn.jpush.api.push.PushClient; import cn.jpush.api.push.PushResult; import cn.jpush.api.push.model.Platform; import cn.jpush.api.push.model.PushPayload; import cn.jpush.api.push.model.audience.Audience; import cn.jpush.api.push.model.notification.Notification; import com.alibaba.fastjson.JSON; import com.wlyd.jyxt.persistence.beans.ylxt.YlPushMessage; import com.wlyd.jyxt.service.push.JPushForDriverService; import com.wlyd.jyxt.service.push.YlPushMessageService; import com.wlyd.jyxt.util.Log; import com.wlyd.jyxt.util.Tools; /** * * @packge com.wlyd.jyxt.service.push.impl.JPushForDriverServiceImpl * @date 2015年9月29日 下午3:23:12 * @author pengjunlin * @comment 司机运力提供方App推送接口实现 * @update */ @Service public class JPushForDriverServiceImpl implements JPushForDriverService { /** * JPush REST API */ @Value("${jpush.jpushApi}") private String jpushApi=""; /** * APP MASTER_SECRET */ @Value("${jpush.driver.masterSecret}") private String MASTER_SECRET=""; /** * APP APP_KEY */ @Value("${jpush.driver.appKey}") private String APP_KEY=""; /** * PLATFORM:推送消息平台设置 */ @Value("${jpush.platform}") public String PLATFORM=""; /** * OPTIONS_TIME_TO_LIVE:离线消息保存时间 */ @Value("${jpush.options.time_to_live}") public long OPTIONS_TIME_TO_LIVE=86400; /** * OPTIONS_TIME_TO_LIVE:推送测试环境 */ @Value("${jpush.options.apns_production}") public boolean OPTIONS_APNS_PRODUCTION=false; private static PushClient pushClient = null; @Autowired YlPushMessageService pushMessageService; /** * @MethodName: getInstance * @Description: 获取推送客户端对象实例 * @return * @throws */ public synchronized PushClient getInstance() { if (pushClient == null) { pushClient = new PushClient(MASTER_SECRET, APP_KEY); pushClient.setBaseUrl(jpushApi); pushClient.setDefaults(OPTIONS_APNS_PRODUCTION, OPTIONS_TIME_TO_LIVE); } return pushClient; } @Override public String pushMsgBroadCast(String title, String alert) { PushResult result = null; try { Platform platform = Platform.all(); Audience audience = Audience.all(); Notification notifcation = Notification.android(alert, title, null); PushPayload pushPayload=PushPayload.newBuilder().setPlatform(platform).setAudience(audience).setNotification(notifcation).build(); result = getInstance().sendPush(pushPayload); } catch (APIConnectionException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (APIRequestException e) { // TODO Auto-generated catch block e.printStackTrace(); } return JSON.toJSONString(result); } @Override public String pushMsgToRegistrationId(YlPushMessage pushMessage,String title,String alert) { PushResult result = null; try { Platform platform = Platform.all(); Audience audience = Audience.registrationId(pushMessage.getYpmDeviceToken()); Notification notifcation = Notification.android(alert, title, null); PushPayload pushPayload=PushPayload.newBuilder().setPlatform(platform).setAudience(audience).setNotification(notifcation).build(); result = getInstance().sendPush(pushPayload); } catch (APIConnectionException e) { e.printStackTrace(); } catch (APIRequestException e) { e.printStackTrace(); }finally{ //保存推送消息 Date pushDate=new Date(); int pushSuccess=result.getResponseCode()==200?0:1; pushMessage.setYpmContent(alert+":"+ title); pushMessage.setYpmSuccessState(pushSuccess); pushMessage.setYpmPushTime(pushDate); // 接收消息状态:0:成功,1:未接收,2:拒收 pushMessage.setYpmAcceptState(1); pushMessageService.insert(pushMessage); } return JSON.toJSONString(result); } @Override public String pushMsgToRegistrationIds(List<YlPushMessage> pushMessages, String title, String alert) { PushResult result = null; try { Platform platform = Platform.all(); // 获取发送设备的标识 List<String> registrationIds=new ArrayList<String>(); for (int i = 0,j=pushMessages.size(); i < j; i++) { registrationIds.add(pushMessages.get(i).getYpmDeviceToken()); } Audience audience = Audience.registrationId(registrationIds); Notification notifcation = Notification.android(alert, title, null); PushPayload pushPayload=PushPayload.newBuilder().setPlatform(platform).setAudience(audience).setNotification(notifcation).build(); result = getInstance().sendPush(pushPayload); } catch (APIConnectionException e) { e.printStackTrace(); } catch (APIRequestException e) { e.printStackTrace(); }finally{ //保存推送消息 Date pushDate=new Date(); int pushSuccess=result.getResponseCode()==200?0:1; for (int i = 0,j=pushMessages.size(); i < j; i++) { pushMessages.get(i).setYpmContent(alert+":"+ title); pushMessages.get(i).setYpmSuccessState(pushSuccess); pushMessages.get(i).setYpmPushTime(pushDate); // 接收消息状态:0:成功,1:未接收,2:拒收 pushMessages.get(i).setYpmAcceptState(1); } pushMessageService.batchInsertPushMsg(pushMessages); } return JSON.toJSONString(result); } @Override public String pushMsgByTag(YlPushMessage pushMessage, String title, String alert) { PushResult result = null; try { Platform platform = Platform.all(); Audience audience = Audience.tag(pushMessage.getYpmDeviceToken()); Notification notifcation = Notification.android(alert, title, null); PushPayload pushPayload=PushPayload.newBuilder().setPlatform(platform).setAudience(audience).setNotification(notifcation).build(); result = getInstance().sendPush(pushPayload); } catch (APIConnectionException e) { e.printStackTrace(); } catch (APIRequestException e) { e.printStackTrace(); }finally{ //保存推送消息 Date pushDate=new Date(); int pushSuccess=result.getResponseCode()==200?0:1; pushMessage.setYpmContent(alert+":"+ title); pushMessage.setYpmSuccessState(pushSuccess); pushMessage.setYpmPushTime(pushDate); // 接收消息状态:0:成功,1:未接收,2:拒收 pushMessage.setYpmAcceptState(1); pushMessageService.insert(pushMessage); } return JSON.toJSONString(result); } @Override public String pushMsgByTags(List<YlPushMessage> pushMessages, String title, String alert) { PushResult result = null; try { Platform platform = Platform.all(); // 获取发送设备的标识 List<String> tags=new ArrayList<String>(); for (int i = 0,j=pushMessages.size(); i < j; i++) { tags.add(pushMessages.get(i).getYpmDeviceToken()); } Audience audience = Audience.tag(tags); Notification notifcation = Notification.android(alert, title, null); PushPayload pushPayload=PushPayload.newBuilder().setPlatform(platform).setAudience(audience).setNotification(notifcation).build(); result = getInstance().sendPush(pushPayload); } catch (APIConnectionException e) { e.printStackTrace(); } catch (APIRequestException e) { e.printStackTrace(); }finally{ //保存推送消息 Date pushDate=new Date(); int pushSuccess=result.getResponseCode()==200?0:1; for (int i = 0,j=pushMessages.size(); i < j; i++) { pushMessages.get(i).setYpmContent(alert+":"+ title); pushMessages.get(i).setYpmSuccessState(pushSuccess); pushMessages.get(i).setYpmPushTime(pushDate); // 接收消息状态:0:成功,1:未接收,2:拒收 pushMessages.get(i).setYpmAcceptState(1); } pushMessageService.batchInsertPushMsg(pushMessages); } return JSON.toJSONString(result); } @Override public String pushMsgByAlias(YlPushMessage pushMessage, String title, String alert) { PushResult result = null; try { Platform platform = Platform.all(); Audience audience = Audience.alias(pushMessage.getYpmDeviceToken()); Notification notifcation = Notification.android(alert, title, null); PushPayload pushPayload=PushPayload.newBuilder().setPlatform(platform).setAudience(audience).setNotification(notifcation).build(); result = getInstance().sendPush(pushPayload); } catch (APIConnectionException e) { e.printStackTrace(); } catch (APIRequestException e) { e.printStackTrace(); }finally{ //保存推送消息 Date pushDate=new Date(); int pushSuccess=result.getResponseCode()==200?0:1; pushMessage.setYpmContent(alert+":"+ title); pushMessage.setYpmSuccessState(pushSuccess); pushMessage.setYpmPushTime(pushDate); // 接收消息状态:0:成功,1:未接收,2:拒收 pushMessage.setYpmAcceptState(1); pushMessageService.insert(pushMessage); } return JSON.toJSONString(result); } @Override public String pushMsgByAlias(List<YlPushMessage> pushMessages, String title, String alert) { PushResult result = null; try { Platform platform = Platform.all(); // 获取发送设备的标识 List<String> alias=new ArrayList<String>(); for (int i = 0,j=pushMessages.size(); i < j; i++) { alias.add(pushMessages.get(i).getYpmDeviceToken()); } Audience audience = Audience.alias(alias); Notification notifcation = Notification.android(alert, title, null); PushPayload pushPayload=PushPayload.newBuilder().setPlatform(platform).setAudience(audience).setNotification(notifcation).build(); result = getInstance().sendPush(pushPayload); } catch (APIConnectionException e) { e.printStackTrace(); } catch (APIRequestException e) { e.printStackTrace(); }finally{ //保存推送消息 Date pushDate=new Date(); int pushSuccess=result.getResponseCode()==200?0:1; for (int i = 0,j=pushMessages.size(); i < j; i++) { pushMessages.get(i).setYpmContent(alert+":"+ title); pushMessages.get(i).setYpmSuccessState(pushSuccess); pushMessages.get(i).setYpmPushTime(pushDate); // 接收消息状态:0:成功,1:未接收,2:拒收 pushMessages.get(i).setYpmAcceptState(1); } pushMessageService.batchInsertPushMsg(pushMessages); } return JSON.toJSONString(result); } }
2.5Junit测试
里面有无关的测试,看的时候可以忽略掉:
package com.wlyd.jyxt;
import java.util.Date;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import cn.jpush.api.push.model.Platform;
import cn.jpush.api.push.model.PushPayload;
import cn.jpush.api.push.model.audience.Audience;
import cn.jpush.api.push.model.notification.Notification;
import com.wlyd.jyxt.persistence.beans.ylxt.YlPushMessage;
import com.wlyd.jyxt.service.push.JPushForCustomerService;
import com.wlyd.jyxt.service.push.JPushForDriverService;
import com.wlyd.jyxt.service.push.JPushService;
/**
* @packge com.wlyd.jyxt.JPushServiceTest
* @date 2015年9月18日 下午3:23:25
* @author pengjunlin
* @comment REST API测试
* @update
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class JPushServiceTest {
@Autowired
JPushService jPushService;
@Autowired
JPushForCustomerService jPushForCustomerService;
@Autowired
JPushForDriverService jPushForDriverService;
/**
*
* @MethodName: testPush
* @Description: 推送alert通知 by jsonString
* @throws
*/
@Test
public void testPush(){
String jsonParams="{\""+"platform"+"\":"+"\""+"all"+"\","+"\""+"audience"+"\":"+"\""+"all"+"\","+"\""+"notification"+"\":{"+"\""+"alert"+"\":"+"\""+"Hi,JPush!"+"\"}"+"}";
System.out.println(jsonParams);
String result=jPushService.pushAndroidMsg(jsonParams);
System.out.println("推送返回结果:");
System.out.println(result);
}
/**
* @MethodName: testPushPayload
* @Description: 推送alert通知by PushPayload
* @throws
*/
@Test
public void testPushPayload(){
Platform platform = Platform.all();
Audience audience = Audience.all();
Notification notifcation = Notification.alert("alert");
PushPayload pushPayload=PushPayload.newBuilder().setPlatform(platform).setAudience(audience).setNotification(notifcation).build();
String result=jPushService.pushAndroidMsgByPushPayload(pushPayload);
System.out.println("推送返回结果:");
System.out.println(result);
}
/**
*
* @MethodName: testPushMessageByRegistrationIdForCustomer
* @Description: 推送消息并保持到JYXT
* @throws
*/
@Test
public void testPushMessageByRegistrationIdForCustomer(){
YlPushMessage pushMessage=new YlPushMessage();
pushMessage.setYpmReceiveCode("YL019");
pushMessage.setYpmMasterCode(""+System.currentTimeMillis());
pushMessage.setYpmContent("尊敬的客户朋友:成都-上海 线路的运力需求,发布成功");
pushMessage.setYpmPushTime(new Date());
pushMessage.setYpmDeviceToken("shiwl111");
pushMessage.setYpmSuccessState(1);
pushMessage.setYpmAcceptState(1);
pushMessage.setYpmPushState(1);
String result=jPushForCustomerService.pushMsgToRegistrationId(pushMessage, "成都-上海", pushMessage.getYpmContent());
System.out.println("推送返回结果:");
System.out.println(result);
}
/**
*
* @MethodName: testPushMessageByTagForCustomer
* @Description: 推送消息并保持到JYXT
* @throws
*/
@Test
public void testPushMessageByTagForCustomer(){
YlPushMessage pushMessage=new YlPushMessage();
pushMessage.setYpmReceiveCode("YL019");
pushMessage.setYpmMasterCode(""+System.currentTimeMillis());
pushMessage.setYpmContent("尊敬的客户朋友:成都-上海 线路的运力需求,发布成功");
pushMessage.setYpmPushTime(new Date());
pushMessage.setYpmDeviceToken("shiwl111");
pushMessage.setYpmSuccessState(1);
pushMessage.setYpmAcceptState(1);
pushMessage.setYpmPushState(1);
String result=jPushForCustomerService.pushMsgByTag(pushMessage, "成都-上海", pushMessage.getYpmContent());
System.out.println("推送返回结果:");
System.out.println(result);
}
/**
*
* @MethodName: testPushMessageByAliasForCustomer
* @Description: 推送消息并保持到JYXT
* @throws
*/
@Test
public void testPushMessageByAliasForCustomer(){
YlPushMessage pushMessage=new YlPushMessage();
pushMessage.setYpmReceiveCode("YL019");
pushMessage.setYpmMasterCode(""+System.currentTimeMillis());
pushMessage.setYpmContent("尊敬的客户朋友:成都-上海 线路的运力需求,发布成功");
pushMessage.setYpmPushTime(new Date());
pushMessage.setYpmDeviceToken("account");
pushMessage.setYpmSuccessState(1);
pushMessage.setYpmAcceptState(1);
pushMessage.setYpmPushState(1);
String result=jPushForCustomerService.pushMsgByAlias(pushMessage, "成都-上海", pushMessage.getYpmContent());
System.out.println("推送返回结果:");
System.out.println(result);
}
/**
*
* @MethodName: testPushBrodcastForCustomer
* @Description: 推送消息并保持到JYXT
* @throws
*/
@Test
public void testPushBrodcastForCustomer(){
String result=jPushForCustomerService.pushMsgBroadCast("成都-上海", "尊敬的客户朋友:成都-上海 线路的运力需求,发布成功");
System.out.println("推送返回结果:");
System.out.println(result);
}
/**
*
* @MethodName: testPushMessageByRegistrationIdForDriver
* @Description: 推送消息并保持到JYXT
* @throws
*/
@Test
public void testPushMessageByRegistrationIdForDriver(){
YlPushMessage pushMessage=new YlPushMessage();
pushMessage.setYpmReceiveCode("YL001YL150916005");
pushMessage.setYpmMasterCode(""+System.currentTimeMillis());
pushMessage.setYpmContent("尊敬的司机朋友:成都-上海 线路的运力需求,正在抢单");
pushMessage.setYpmPushTime(new Date());
pushMessage.setYpmDeviceToken("shiwl111");
pushMessage.setYpmSuccessState(1);
pushMessage.setYpmAcceptState(1);
pushMessage.setYpmPushState(0);
String result=jPushForDriverService.pushMsgToRegistrationId(pushMessage, "成都-上海", pushMessage.getYpmContent());
System.out.println("推送返回结果:");
System.out.println(result);
}
/**
*
* @MethodName: testPushMessageByTagForDriver
* @Description: 推送消息并保持到JYXT
* @throws
*/
@Test
public void testPushMessageByTagForDriver(){
YlPushMessage pushMessage=new YlPushMessage();
pushMessage.setYpmReceiveCode("YL001YL150916005");
pushMessage.setYpmMasterCode(""+System.currentTimeMillis());
pushMessage.setYpmContent("尊敬的司机朋友:成都-上海 线路的运力需求,正在抢单");
pushMessage.setYpmPushTime(new Date());
pushMessage.setYpmDeviceToken("shiwl111");
pushMessage.setYpmSuccessState(1);
pushMessage.setYpmAcceptState(1);
pushMessage.setYpmPushState(0);
String result=jPushForDriverService.pushMsgByTag(pushMessage, "成都-上海", pushMessage.getYpmContent());
System.out.println("推送返回结果:");
System.out.println(result);
}
/**
*
* @MethodName: testPushMessageByAliasForDriver
* @Description: 推送消息并保持到JYXT
* @throws
*/
@Test
public void testPushMessageByAliasForDriver(){
YlPushMessage pushMessage=new YlPushMessage();
pushMessage.setYpmReceiveCode("WS001YL151010005");
pushMessage.setYpmMasterCode(""+System.currentTimeMillis());
pushMessage.setYpmContent("尊敬的司机朋友:成都-上海 线路的运力需求,正在抢单");
pushMessage.setYpmPushTime(new Date());
pushMessage.setYpmDeviceToken("13882287884");
pushMessage.setYpmSuccessState(1);
pushMessage.setYpmAcceptState(1);
pushMessage.setYpmPushState(0);
for (int i = 0; i < 3; i++) {
String result=jPushForDriverService.pushMsgByAlias(pushMessage, "成都-上海", pushMessage.getYpmContent());
System.out.println("推送返回结果:");
System.out.println(result);
}
}
}
3.题外话mybatis批量操作
批量修改、批量删除、批量插入<!-- unAccepted --> <update id="batchUpdateAcceptStateToUnaccepted" parameterType="java.util.List"> UPDATE yl_push_message SET YPM_ACCEPT_STATE = 1 where YPM_ID in <foreach collection="list" item="item" index="index" open="(" separator="," close=")" > #{item} </foreach> </update> <!-- refuse to accept --> <update id="batchUpdateAcceptStateToRefuseAccept" parameterType="java.util.List"> UPDATE yl_push_message SET YPM_ACCEPT_STATE = 2 where YPM_ID in <foreach collection="list" item="item" index="index" open="(" separator="," close=")" > #{item} </foreach> </update> <!-- batch delete push msg --> <delete id="batchDeletePushMsg" parameterType="com.wlyd.jyxt.util.CondOrderLimit"> DELETE FROM yl_push_message WHERE ypm_master_code IN (SELECT c.YMC_CODE from yl_master_car c where c.YMC_STATE in (2,3,4,5)) and ypm_receive_code=#{conditions.driverCode,jdbcType=VARCHAR} and YPM_ID in <foreach collection="conditions.ypmIds" index="index" item="item" open="(" separator="," close=")"> #{item} </foreach> </delete> <!-- batch insert push msg --> <insert id="batchInsertPushMsg" parameterType="java.util.List" > insert into yl_push_message (YPM_RECEIVE_CODE, YPM_PUSH_STATE, YPM_MASTER_CODE,YPM_CONTENT, YPM_PUSH_TIME, YPM_SUCCESS_STATE,YPM_DEVICE_TOKEN, YPM_ACCEPT_STATE) values <foreach collection="list" item="item" index="index" separator="," > ( #{item.ypmReceiveCode}, #{item.ypmPushState}, #{item.ypmMasterCode}, #{item.ypmContent}, #{item.ypmPushTime}, #{item.ypmSuccessState}, #{item.ypmDeviceToken}, #{item.ypmAcceptState} ) </foreach> </insert>
相关文章推荐
- HTML事件
- 常用的宏定义整理
- JQuery中对Select的option项的添加、删除、取值
- grid:RadGridView 页面设置单元格字体颜色
- oracle 拆分输出dbms_output.put_line longValue解决
- 《Programming WPF》翻译 第7章 2.图形
- 《Programming WPF》翻译 第7章 1.图形基础
- java.lang.UnsupportedClassVersionError: Bad version number in .class file异常的处理方法
- PLSQL流程控制
- Redis内存使用优化与存储
- Linear Filtering and Prediction
- 《Programming WPF》翻译 第6章 5.我们进行到哪里了?
- php 处理上百万条的数据库如何提高处理查询速度
- 如何使用SAS Switch 技术 (第一部分 基本部署)
- centos中部署java项目
- 卡尔曼滤波 -- 从推导到应用(一) 到 (二)
- shuxue
- jQuery select显示部分选项
- 《Programming WPF》翻译 第6章 4.应用程序全球化
- angular.js学习笔记--概念总结