package cn.jpush.api.schedule;
|
|
import cn.jiguang.common.ClientConfig;
|
import cn.jiguang.common.ServiceHelper;
|
import cn.jiguang.common.connection.HttpProxy;
|
import cn.jiguang.common.connection.NativeHttpClient;
|
import cn.jiguang.common.resp.APIConnectionException;
|
import cn.jiguang.common.resp.APIRequestException;
|
import cn.jiguang.common.resp.ResponseWrapper;
|
import cn.jiguang.common.utils.Preconditions;
|
import cn.jiguang.common.utils.StringUtils;
|
import cn.jpush.api.push.CIDResult;
|
import cn.jpush.api.push.PushClient;
|
import cn.jpush.api.schedule.model.SchedulePayload;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
|
public class ScheduleClient {
|
|
private static final Logger LOG = LoggerFactory.getLogger(ScheduleClient.class);
|
private final NativeHttpClient _httpClient;
|
|
private String hostName;
|
private String schedulePath;
|
|
// If not present, true by default.
|
private int apnsProduction;
|
|
// If not present, the default value is 86400(s) (one day)
|
private long timeToLive;
|
|
public ScheduleClient(String masterSecret, String appkey) {
|
this(masterSecret, appkey, null, ClientConfig.getInstance());
|
}
|
|
/**
|
* This will be removed in the future. Please use ClientConfig{jiguang-common cn.jiguang.common.ClientConfig#setMaxRetryTimes} instead of this constructor.
|
* @param masterSecret API access secret of the appKey.
|
* @param appKey The KEY of one application on JPush.
|
* @param maxRetryTimes The mas retry times.
|
*
|
*/
|
@Deprecated
|
public ScheduleClient(String masterSecret, String appKey, int maxRetryTimes) {
|
this(masterSecret, appKey, maxRetryTimes, null);
|
}
|
|
/**
|
* This will be removed in the future. Please use ClientConfig{jiguang-common cn.jiguang.common.ClientConfig#setMaxRetryTimes} instead of this constructor.
|
* @param masterSecret API access secret of the appKey.
|
* @param appKey The KEY of one application on JPush.
|
* @param maxRetryTimes The mas retry times.
|
* @param proxy The proxy, if there is no proxy, should be null.
|
*/
|
@Deprecated
|
public ScheduleClient(String masterSecret, String appKey, int maxRetryTimes, HttpProxy proxy) {
|
ServiceHelper.checkBasic(appKey, masterSecret);
|
|
ClientConfig conf = ClientConfig.getInstance();
|
conf.setMaxRetryTimes(maxRetryTimes);
|
|
hostName = (String) conf.get(ClientConfig.SCHEDULE_HOST_NAME);
|
schedulePath = (String) conf.get(ClientConfig.SCHEDULE_PATH);
|
apnsProduction = (Integer) conf.get(ClientConfig.APNS_PRODUCTION);
|
timeToLive = (Long) conf.get(ClientConfig.TIME_TO_LIVE);
|
|
String authCode = ServiceHelper.getBasicAuthorization(appKey, masterSecret);
|
this._httpClient = new NativeHttpClient(authCode, proxy, conf);
|
}
|
|
/**
|
* Create a Schedule Client with custom configuration.
|
* @param masterSecret API access secret of the appKey.
|
* @param appKey The KEY of one application on JPush.
|
* @param proxy The proxy, if there is no proxy, should be null.
|
* @param conf The client configuration. Can use ClientConfig.getInstance() as default.
|
*/
|
public ScheduleClient(String masterSecret, String appKey, HttpProxy proxy, ClientConfig conf) {
|
ServiceHelper.checkBasic(appKey, masterSecret);
|
hostName = (String) conf.get(ClientConfig.SCHEDULE_HOST_NAME);
|
schedulePath = (String) conf.get(ClientConfig.SCHEDULE_PATH);
|
apnsProduction = (Integer) conf.get(ClientConfig.APNS_PRODUCTION);
|
timeToLive = (Long) conf.get(ClientConfig.TIME_TO_LIVE);
|
|
String authCode = ServiceHelper.getBasicAuthorization(appKey, masterSecret);
|
this._httpClient = new NativeHttpClient(authCode, proxy, conf);
|
}
|
|
public ScheduleResult createSchedule(SchedulePayload payload, String masterSecret,
|
String appKey) throws APIConnectionException, APIRequestException {
|
|
Preconditions.checkArgument(null != payload, "payload should not be null");
|
|
if (apnsProduction > 0) {
|
payload.resetPushApnsProduction(true);
|
} else if(apnsProduction == 0) {
|
payload.resetPushApnsProduction(false);
|
}
|
|
if (timeToLive >= 0) {
|
payload.resetPushTimeToLive(timeToLive);
|
}
|
|
// 调用getCidList方法来获取cid并赋值到payload中
|
String cid = payload.getCid();
|
if (cid == null) {
|
PushClient pushClient = new PushClient(masterSecret, appKey);
|
CIDResult cidResult = pushClient.getCidList(1 , "schedule");
|
payload.setCid(cidResult.cidlist.get(0));
|
}
|
|
|
ResponseWrapper response = _httpClient.sendPost(hostName + schedulePath, payload.toString());
|
return ScheduleResult.fromResponse(response, ScheduleResult.class);
|
}
|
|
public ScheduleListResult getScheduleList(int page) throws APIConnectionException, APIRequestException{
|
|
Preconditions.checkArgument(page > 0, "page should more than 0.");
|
|
ResponseWrapper response = _httpClient.sendGet(hostName + schedulePath + "?page=" + page);
|
return ScheduleListResult.fromResponse(response, ScheduleListResult.class);
|
}
|
|
public ScheduleResult getSchedule(String scheduleId) throws APIConnectionException, APIRequestException{
|
|
Preconditions.checkArgument(StringUtils.isNotEmpty(scheduleId), "scheduleId should not be empty");
|
|
ResponseWrapper response = _httpClient.sendGet(hostName + schedulePath + "/" + scheduleId);
|
return ScheduleResult.fromResponse(response, ScheduleResult.class);
|
}
|
|
public ScheduleMsgIdsResult getScheduleMsgIds(String scheduleId) throws APIConnectionException, APIRequestException{
|
|
Preconditions.checkArgument(StringUtils.isNotEmpty(scheduleId), "scheduleId should not be empty");
|
|
ResponseWrapper response = _httpClient.sendGet(hostName + schedulePath + "/" + scheduleId + "/msg_ids");
|
return ScheduleResult.fromResponse(response, ScheduleMsgIdsResult.class);
|
}
|
|
public ScheduleResult updateSchedule(String scheduleId, SchedulePayload payload) throws APIConnectionException, APIRequestException{
|
|
Preconditions.checkArgument(StringUtils.isNotEmpty(scheduleId), "scheduleId should not be empty");
|
Preconditions.checkArgument(null != payload, "payload should not be null");
|
|
if (apnsProduction > 0) {
|
payload.resetPushApnsProduction(true);
|
} else if(apnsProduction == 0) {
|
payload.resetPushApnsProduction(false);
|
}
|
|
if (timeToLive >= 0) {
|
payload.resetPushTimeToLive(timeToLive);
|
}
|
|
ResponseWrapper response = _httpClient.sendPut(hostName + schedulePath + "/" + scheduleId,
|
payload.toString());
|
return ScheduleResult.fromResponse(response, ScheduleResult.class);
|
}
|
|
public void deleteSchedule(String scheduleId) throws APIConnectionException, APIRequestException{
|
|
Preconditions.checkArgument(StringUtils.isNotEmpty(scheduleId), "scheduleId should not be empty");
|
|
_httpClient.sendDelete(hostName + schedulePath + "/" + scheduleId);
|
}
|
|
|
}
|