importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONObject;importcom.baidu.yun.core.log.YunLogEvent;importcom.baidu.yun.core.log.YunLogHandler;importcom.baidu.yun.push.auth.PushKeyPair;importcom.baidu.yun.push.client.BaiduPushClient;importcom.baidu.yun.push.constants.BaiduPushConstants;importcom.baidu.yun.push.exception.PushClientException;importcom.baidu.yun.push.exception.PushServerException;importcom.baidu.yun.push.model.PushMsgToSingleDeviceRequest;importcom.baidu.yun.push.model.PushMsgToSingleDeviceResponse;importcom.centit.server.webmgr.baidupush.po.AndroidMessage;importcom.centit.server.webmgr.baidupush.po.IOSMessage;importcom.centit.server.webmgr.baidupush.po.IOSMessageAps;importcom.centit.server.webmgr.baidupush.po.Notification;importcom.centit.server.webmgr.baidupush.po.SendMessage;importcom.centit.server.webmgr.common.DingTalkProperties;/***
* @Version : 1.0
* @Author : li_hao
* @Description : 百度推送
* @Date : 2017年11月9日 下午4:22:04*/
public classNotificationPusher {public static final Log log = LogFactory.getLog(NotificationPusher.class);/*** 推送消息到单个设备*/
public static String pushNotificationToSingleDevice(SendMessage sendMessage, Notification notification) throwsPushClientException, PushServerException {
Integer deviceType=notification.getDeviceType();
String apiKey= null;
String secretKey= null;if(deviceType == 3){
apiKey="你的android_api_key";
secretKey="你的android_secret_key";
}else if(deviceType == 4){
apiKey="你的ios_api_key";
secretKey= "你的ios_secret_key";
}
PushKeyPair pair= newPushKeyPair(apiKey, secretKey);
BaiduPushClient pushClient= newBaiduPushClient(pair, BaiduPushConstants.CHANNEL_REST_URL);
pushClient.setChannelLogHandler(newYunLogHandler() {
@Overridepublic voidonHandle(YunLogEvent event) {
log.info(String.format("推送回调日志:%s", event.getMessage()));
}
});try{
PushMsgToSingleDeviceRequest request= newPushMsgToSingleDeviceRequest();
String message= null;if(deviceType == 3){
message=JSON.toJSONString(sendMessage.getAndroidMessage());
}else if(deviceType == 4){
message=JSON.toJSONString(sendMessage.getIosMessage());
request.addDeployStatus(notification.getDeployStatus());//IOS的部署状态:Developer,2:Production.
}
request.addChannelId(notification.getChannelId());
request.addMsgExpires(notification.getMsgExpires());//设置message的有效时间
request.addMessageType(notification.getMessageType());//消息类型:1:通知,0:透传消息.默认为0注:IOS只有通知.
request.addDeviceType(deviceType); //设备类型:3:android,4:ios
JSONObject jsonMessage=JSONObject.parseObject(message);
request.addMessage(jsonMessage.toString());//发起请求
PushMsgToSingleDeviceResponse response =pushClient.pushMsgToSingleDevice(request);//请求结果解析
log.info(String.format("推送成功信息:msgId=%s,sendTime=", response.getMsgId(), response.getSendTime()));returnresponse.getMsgId();
}catch(PushClientException e) {//ERROROPTTYPE 用于设置异常的处理方式 -- 抛出异常和捕获异常,'true' 表示抛出, 'false' 表示捕获。
if(BaiduPushConstants.ERROROPTTYPE) {throwe;
}else{
log.error(String.format("推送客户端异常:%s",e.getMessage()));
}
}catch(PushServerException e) {if(BaiduPushConstants.ERROROPTTYPE) {throwe;
}else{
log.error(String.format("推送服务端异常:requestId: %d, errorCode: %d, errorMessage: %s", e.getRequestId(), e.getErrorCode(), e.getErrorMsg()));
}
}return null;
}
}