|  | @@ -5,7 +5,6 @@ import com.alibaba.fastjson.JSONObject;
 | 
	
		
			
				|  |  |  import com.ym.mec.thirdparty.exception.ThirdpartyException;
 | 
	
		
			
				|  |  |  import com.ym.mec.thirdparty.message.MessageSenderPlugin;
 | 
	
		
			
				|  |  |  import com.ym.mec.util.http.HttpUtil;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  import org.apache.commons.codec.binary.Base64;
 | 
	
		
			
				|  |  |  import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  |  import org.springframework.beans.factory.InitializingBean;
 | 
	
	
		
			
				|  | @@ -15,7 +14,7 @@ import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  |  import java.io.IOException;
 | 
	
		
			
				|  |  |  import java.util.Arrays;
 | 
	
		
			
				|  |  |  import java.util.HashMap;
 | 
	
		
			
				|  |  | -import java.util.Map;
 | 
	
		
			
				|  |  | +import java.util.Optional;
 | 
	
		
			
				|  |  |  import java.util.stream.Collectors;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /**
 | 
	
	
		
			
				|  | @@ -24,164 +23,173 @@ import java.util.stream.Collectors;
 | 
	
		
			
				|  |  |  @Service
 | 
	
		
			
				|  |  |  public class JiguangPushPlugin implements MessageSenderPlugin, InitializingBean {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	@Value("${push.jiguang.appKey.student}")
 | 
	
		
			
				|  |  | -	private String studentAppKey;
 | 
	
		
			
				|  |  | -	@Value("${push.jiguang.masterSecret.student}")
 | 
	
		
			
				|  |  | -	private String studentMasterSecret;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	@Value("${push.jiguang.appKey.teacher}")
 | 
	
		
			
				|  |  | -	private String teacherAppKey;
 | 
	
		
			
				|  |  | -	@Value("${push.jiguang.masterSecret.teacher}")
 | 
	
		
			
				|  |  | -	private String teacherMasterSecret;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	@Value("${push.jiguang.appKey.system}")
 | 
	
		
			
				|  |  | -	private String systemAppKey;
 | 
	
		
			
				|  |  | -	@Value("${push.jiguang.masterSecret.system}")
 | 
	
		
			
				|  |  | -	private String systemMasterSecret;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	@Value("${push.jiguang.apns_production:false}")
 | 
	
		
			
				|  |  | -	private boolean apns_production = true; // 推送环境 True 表示推送生产环境,False 表示要推送开发环境
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	@Value("${push.jiguang.time_to_live:86400}")
 | 
	
		
			
				|  |  | -	private int time_to_live = 86400; // 离线保留时长 秒为单位 默认1天 最大10天
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	@Value("${push.jiguang.reqURL:https://api.jpush.cn/v3/push}")
 | 
	
		
			
				|  |  | -	private String reqURL = "https://api.jpush.cn/v3/push";// 请求极光地址
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	public static String getName() {
 | 
	
		
			
				|  |  | -		return "jiguang";
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * 组装推送Json串
 | 
	
		
			
				|  |  | -	 *
 | 
	
		
			
				|  |  | -	 * @param alias 别名推送
 | 
	
		
			
				|  |  | -	 * @param alert 消息
 | 
	
		
			
				|  |  | -	 * @param content 消息内容
 | 
	
		
			
				|  |  | -	 * @return json对象
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	private JSONObject generateJson(String[] alias, String alert, String content, String url,String sound,String channelId) {
 | 
	
		
			
				|  |  | -		JSONObject json = new JSONObject();
 | 
	
		
			
				|  |  | -		JSONArray platform = new JSONArray();// 平台
 | 
	
		
			
				|  |  | -		platform.add("android");
 | 
	
		
			
				|  |  | -		platform.add("ios");
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		JSONObject audience = new JSONObject();// 推送目标
 | 
	
		
			
				|  |  | -		JSONArray aliasJsonArr = new JSONArray();
 | 
	
		
			
				|  |  | -		for (String alia : alias) {
 | 
	
		
			
				|  |  | -			aliasJsonArr.add(alia);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		audience.put("alias", aliasJsonArr);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		JSONObject notification = new JSONObject();// 通知内容
 | 
	
		
			
				|  |  | -		JSONObject android = new JSONObject();// android通知内容
 | 
	
		
			
				|  |  | -		android.put("alert", alert);
 | 
	
		
			
				|  |  | -		android.put("sound", sound.split("\\.")[0]);
 | 
	
		
			
				|  |  | -		JSONObject options = new JSONObject();// 设置参数
 | 
	
		
			
				|  |  | -		if(StringUtils.isNotEmpty(channelId)){
 | 
	
		
			
				|  |  | -			JSONObject thirdParty = new JSONObject();
 | 
	
		
			
				|  |  | -			JSONObject xiaomi = new JSONObject();
 | 
	
		
			
				|  |  | -			xiaomi.put("distribution","secondary_push");
 | 
	
		
			
				|  |  | -			xiaomi.put("channel_id",channelId);
 | 
	
		
			
				|  |  | -			thirdParty.put("xiaomi",xiaomi);
 | 
	
		
			
				|  |  | -			options.put("third_party_channel",thirdParty);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		android.put("builder_id", 1);
 | 
	
		
			
				|  |  | -		JSONObject android_extras = new JSONObject();// android额外参数
 | 
	
		
			
				|  |  | -		android_extras.put("type", "infomation");
 | 
	
		
			
				|  |  | -		android_extras.put("url", url);
 | 
	
		
			
				|  |  | -		android_extras.put("memo", url);
 | 
	
		
			
				|  |  | -		android.put("extras", android_extras);
 | 
	
		
			
				|  |  | -        //2022年5月27日 增加以下参数,是因为安卓无法跳转到APP中
 | 
	
		
			
				|  |  | -        JSONObject intentParam = new JSONObject();
 | 
	
		
			
				|  |  | -//        intentParam.put("url", "intent:#Intent;action=android.intent.action.MAIN;end");
 | 
	
		
			
				|  |  | -        //2022年6月3日 修改参数,安卓通知需要后台修改
 | 
	
		
			
				|  |  | -        intentParam.put("url", "intent:#Intent;action=cn.jiguang.push.customAction;component=com.daya.studaya_android/com.daya.studaya_android.ui.MainActivity;end");
 | 
	
		
			
				|  |  | -        android.put("intent", intentParam);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		JSONObject ios = new JSONObject();// ios通知内容
 | 
	
		
			
				|  |  | -		ios.put("alert", alert);
 | 
	
		
			
				|  |  | -		ios.put("sound", sound);
 | 
	
		
			
				|  |  | -		ios.put("badge", "+1");
 | 
	
		
			
				|  |  | -		JSONObject ios_extras = new JSONObject();// ios额外参数
 | 
	
		
			
				|  |  | -		ios_extras.put("type", "infomation");
 | 
	
		
			
				|  |  | -		ios_extras.put("url", url);
 | 
	
		
			
				|  |  | -		ios_extras.put("memo", url);
 | 
	
		
			
				|  |  | -		ios.put("extras", ios_extras);
 | 
	
		
			
				|  |  | -		notification.put("android", android);
 | 
	
		
			
				|  |  | -		notification.put("ios", ios);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		JSONObject message = new JSONObject();// 通知消息内容
 | 
	
		
			
				|  |  | -		message.put("title", alert);
 | 
	
		
			
				|  |  | -		message.put("msg_content", content);
 | 
	
		
			
				|  |  | -		message.put("content_type","text");
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		options.put("time_to_live", this.time_to_live);
 | 
	
		
			
				|  |  | -		options.put("apns_production", this.apns_production);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		json.put("platform", platform);
 | 
	
		
			
				|  |  | -		json.put("audience", audience);
 | 
	
		
			
				|  |  | -		json.put("notification", notification);
 | 
	
		
			
				|  |  | -		json.put("options", options);
 | 
	
		
			
				|  |  | -		json.put("message", message);
 | 
	
		
			
				|  |  | -		return json;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * 调用极光api
 | 
	
		
			
				|  |  | -	 * @param alias 推送对象别名
 | 
	
		
			
				|  |  | -	 * @param alert 推送消息
 | 
	
		
			
				|  |  | -	 * @param content 推送内容
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	private String push(String[] alias, String alert, String content, String url,String type,String sound,String channelId) {
 | 
	
		
			
				|  |  | -		String base64_auth_string = "";
 | 
	
		
			
				|  |  | -		switch (type){
 | 
	
		
			
				|  |  | -			case "STUDENT":
 | 
	
		
			
				|  |  | -				base64_auth_string = encryptBASE64(this.studentAppKey + ":" + this.studentMasterSecret);
 | 
	
		
			
				|  |  | -				break;
 | 
	
		
			
				|  |  | -			case "TEACHER":
 | 
	
		
			
				|  |  | -				base64_auth_string = encryptBASE64(this.teacherAppKey + ":" + this.teacherMasterSecret);
 | 
	
		
			
				|  |  | -				break;
 | 
	
		
			
				|  |  | -			default:
 | 
	
		
			
				|  |  | -				base64_auth_string = encryptBASE64(this.systemAppKey + ":" + this.systemMasterSecret);
 | 
	
		
			
				|  |  | -				break;
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		String authorization = "Basic " + base64_auth_string;
 | 
	
		
			
				|  |  | -		return sendPostRequest(generateJson(alias, alert, content, url,sound,channelId).toString(), authorization);
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * 发送Post请求(json格式)
 | 
	
		
			
				|  |  | -	 *
 | 
	
		
			
				|  |  | -	 * @param data //封装的json串
 | 
	
		
			
				|  |  | -	 * @param authorization 验签
 | 
	
		
			
				|  |  | -	 * @return result 返回一个json字符串
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	private String sendPostRequest(String data, String authorization) {
 | 
	
		
			
				|  |  | -		String result = "";
 | 
	
		
			
				|  |  | -		HashMap<String, String> reqHeader = new HashMap<>();
 | 
	
		
			
				|  |  | -		reqHeader.put("Authorization", authorization.trim());
 | 
	
		
			
				|  |  | -		try {
 | 
	
		
			
				|  |  | -			result = HttpUtil.postForHttps(this.reqURL, data, reqHeader);
 | 
	
		
			
				|  |  | -		} catch (Exception e) {
 | 
	
		
			
				|  |  | -			throw new ThirdpartyException("HttpUtil Connection Exception", e);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		return result;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 *     * BASE64加密工具
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	private String encryptBASE64(String str) {
 | 
	
		
			
				|  |  | -		byte[] key = str.getBytes();
 | 
	
		
			
				|  |  | -		String strs = Base64.encodeBase64String(key);
 | 
	
		
			
				|  |  | -		return strs;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	@Override
 | 
	
		
			
				|  |  | -	public void afterPropertiesSet() throws Exception {
 | 
	
		
			
				|  |  | -		// 参数检查
 | 
	
		
			
				|  |  | +    @Value("${push.jiguang.appKey.student}")
 | 
	
		
			
				|  |  | +    private String studentAppKey;
 | 
	
		
			
				|  |  | +    @Value("${push.jiguang.masterSecret.student}")
 | 
	
		
			
				|  |  | +    private String studentMasterSecret;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Value("${push.jiguang.appKey.teacher}")
 | 
	
		
			
				|  |  | +    private String teacherAppKey;
 | 
	
		
			
				|  |  | +    @Value("${push.jiguang.masterSecret.teacher}")
 | 
	
		
			
				|  |  | +    private String teacherMasterSecret;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Value("${push.jiguang.appKey.system}")
 | 
	
		
			
				|  |  | +    private String systemAppKey;
 | 
	
		
			
				|  |  | +    @Value("${push.jiguang.masterSecret.system}")
 | 
	
		
			
				|  |  | +    private String systemMasterSecret;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Value("${push.jiguang.apns_production:false}")
 | 
	
		
			
				|  |  | +    private boolean apns_production = true; // 推送环境 True 表示推送生产环境,False 表示要推送开发环境
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Value("${push.jiguang.time_to_live:86400}")
 | 
	
		
			
				|  |  | +    private int time_to_live = 86400; // 离线保留时长 秒为单位 默认1天 最大10天
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Value("${push.jiguang.reqURL:https://api.jpush.cn/v3/push}")
 | 
	
		
			
				|  |  | +    private String reqURL = "https://api.jpush.cn/v3/push";// 请求极光地址
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public static String getName() {
 | 
	
		
			
				|  |  | +        return "jiguang";
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 组装推送Json串
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * @param alias   别名推送
 | 
	
		
			
				|  |  | +     * @param alert   消息
 | 
	
		
			
				|  |  | +     * @param content 消息内容
 | 
	
		
			
				|  |  | +     * @return json对象
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private JSONObject generateJson(String[] alias, String alert, String content, String url, String sound, String channelId, JSONObject androidIntent) {
 | 
	
		
			
				|  |  | +        JSONObject json = new JSONObject();
 | 
	
		
			
				|  |  | +        JSONArray platform = new JSONArray();// 平台
 | 
	
		
			
				|  |  | +        platform.add("android");
 | 
	
		
			
				|  |  | +        platform.add("ios");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        JSONObject audience = new JSONObject();// 推送目标
 | 
	
		
			
				|  |  | +        JSONArray aliasJsonArr = new JSONArray();
 | 
	
		
			
				|  |  | +        for (String alia : alias) {
 | 
	
		
			
				|  |  | +            aliasJsonArr.add(alia);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        audience.put("alias", aliasJsonArr);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        JSONObject notification = new JSONObject();// 通知内容
 | 
	
		
			
				|  |  | +        JSONObject android = new JSONObject();// android通知内容
 | 
	
		
			
				|  |  | +        android.put("alert", alert);
 | 
	
		
			
				|  |  | +        android.put("sound", sound.split("\\.")[0]);
 | 
	
		
			
				|  |  | +        JSONObject options = new JSONObject();// 设置参数
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotEmpty(channelId)) {
 | 
	
		
			
				|  |  | +            JSONObject thirdParty = new JSONObject();
 | 
	
		
			
				|  |  | +            JSONObject xiaomi = new JSONObject();
 | 
	
		
			
				|  |  | +            xiaomi.put("distribution", "secondary_push");
 | 
	
		
			
				|  |  | +            xiaomi.put("channel_id", channelId);
 | 
	
		
			
				|  |  | +            thirdParty.put("xiaomi", xiaomi);
 | 
	
		
			
				|  |  | +            options.put("third_party_channel", thirdParty);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        android.put("builder_id", 1);
 | 
	
		
			
				|  |  | +        JSONObject android_extras = new JSONObject();// android额外参数
 | 
	
		
			
				|  |  | +        android_extras.put("type", "infomation");
 | 
	
		
			
				|  |  | +        android_extras.put("url", url);
 | 
	
		
			
				|  |  | +        android_extras.put("memo", url);
 | 
	
		
			
				|  |  | +        //2022年6月22日 增加 third_url_encode 参数,极光推送数据中带有#号需要转译
 | 
	
		
			
				|  |  | +        android_extras.put("third_url_encode", true);
 | 
	
		
			
				|  |  | +        android.put("extras", android_extras);
 | 
	
		
			
				|  |  | +        Optional.ofNullable(androidIntent)
 | 
	
		
			
				|  |  | +                .ifPresent(intent -> android.put("intent", intent));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        JSONObject ios = new JSONObject();// ios通知内容
 | 
	
		
			
				|  |  | +        ios.put("alert", alert);
 | 
	
		
			
				|  |  | +        ios.put("sound", sound);
 | 
	
		
			
				|  |  | +        ios.put("badge", "+1");
 | 
	
		
			
				|  |  | +        JSONObject ios_extras = new JSONObject();// ios额外参数
 | 
	
		
			
				|  |  | +        ios_extras.put("type", "infomation");
 | 
	
		
			
				|  |  | +        ios_extras.put("url", url);
 | 
	
		
			
				|  |  | +        ios_extras.put("memo", url);
 | 
	
		
			
				|  |  | +        ios.put("extras", ios_extras);
 | 
	
		
			
				|  |  | +        notification.put("android", android);
 | 
	
		
			
				|  |  | +        notification.put("ios", ios);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        JSONObject message = new JSONObject();// 通知消息内容
 | 
	
		
			
				|  |  | +        message.put("title", alert);
 | 
	
		
			
				|  |  | +        message.put("msg_content", content);
 | 
	
		
			
				|  |  | +        message.put("content_type", "text");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        options.put("time_to_live", this.time_to_live);
 | 
	
		
			
				|  |  | +        options.put("apns_production", this.apns_production);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        json.put("platform", platform);
 | 
	
		
			
				|  |  | +        json.put("audience", audience);
 | 
	
		
			
				|  |  | +        json.put("notification", notification);
 | 
	
		
			
				|  |  | +        json.put("options", options);
 | 
	
		
			
				|  |  | +        json.put("message", message);
 | 
	
		
			
				|  |  | +        return json;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 调用极光api
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * @param alias   推送对象别名
 | 
	
		
			
				|  |  | +     * @param alert   推送消息
 | 
	
		
			
				|  |  | +     * @param content 推送内容
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private String push(String[] alias, String alert, String content, String url, String type, String sound, String channelId) {
 | 
	
		
			
				|  |  | +        String base64_auth_string = "";
 | 
	
		
			
				|  |  | +        JSONObject androidIntent = null;
 | 
	
		
			
				|  |  | +        switch (type) {
 | 
	
		
			
				|  |  | +            case "STUDENT":
 | 
	
		
			
				|  |  | +                base64_auth_string = encryptBASE64(this.studentAppKey + ":" + this.studentMasterSecret);
 | 
	
		
			
				|  |  | +                androidIntent = new JSONObject();
 | 
	
		
			
				|  |  | +                //2022年5月27日 增加以下参数,是因为安卓无法跳转到APP中
 | 
	
		
			
				|  |  | +                //intentParam.put("url", "intent:#Intent;action=android.intent.action.MAIN;end");
 | 
	
		
			
				|  |  | +                //2022年6月3日 修改参数,安卓通知需要后台修改
 | 
	
		
			
				|  |  | +                androidIntent.put("url", "intent:#Intent;action=cn.jiguang.push.customAction;component=com.daya.studaya_android/com.daya.studaya_android.ui.MainActivity;end");
 | 
	
		
			
				|  |  | +                break;
 | 
	
		
			
				|  |  | +            case "TEACHER":
 | 
	
		
			
				|  |  | +                base64_auth_string = encryptBASE64(this.teacherAppKey + ":" + this.teacherMasterSecret);
 | 
	
		
			
				|  |  | +                androidIntent = new JSONObject();
 | 
	
		
			
				|  |  | +                //2022年6月22日增加url参数 针对教师端
 | 
	
		
			
				|  |  | +                androidIntent.put("url", "intent:#Intent;action=cn.jiguang.push.customAction;component=com.dayayuemeng.teacher/com.dayayuemeng.teacher.ui.MainActivity;end");
 | 
	
		
			
				|  |  | +                break;
 | 
	
		
			
				|  |  | +            default:
 | 
	
		
			
				|  |  | +                base64_auth_string = encryptBASE64(this.systemAppKey + ":" + this.systemMasterSecret);
 | 
	
		
			
				|  |  | +                break;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        String authorization = "Basic " + base64_auth_string;
 | 
	
		
			
				|  |  | +        JSONObject jsonObject = generateJson(alias, alert, content, url, sound, channelId, androidIntent);
 | 
	
		
			
				|  |  | +        return sendPostRequest(jsonObject.toString(), authorization);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 发送Post请求(json格式)
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * @param data          //封装的json串
 | 
	
		
			
				|  |  | +     * @param authorization 验签
 | 
	
		
			
				|  |  | +     * @return result 返回一个json字符串
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private String sendPostRequest(String data, String authorization) {
 | 
	
		
			
				|  |  | +        String result = "";
 | 
	
		
			
				|  |  | +        HashMap<String, String> reqHeader = new HashMap<>();
 | 
	
		
			
				|  |  | +        reqHeader.put("Authorization", authorization.trim());
 | 
	
		
			
				|  |  | +        try {
 | 
	
		
			
				|  |  | +            result = HttpUtil.postForHttps(this.reqURL, data, reqHeader);
 | 
	
		
			
				|  |  | +        } catch (Exception e) {
 | 
	
		
			
				|  |  | +            throw new ThirdpartyException("HttpUtil Connection Exception", e);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return result;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     *     * BASE64加密工具
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private String encryptBASE64(String str) {
 | 
	
		
			
				|  |  | +        byte[] key = str.getBytes();
 | 
	
		
			
				|  |  | +        String strs = Base64.encodeBase64String(key);
 | 
	
		
			
				|  |  | +        return strs;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public void afterPropertiesSet() throws Exception {
 | 
	
		
			
				|  |  | +        // 参数检查
 | 
	
		
			
				|  |  |  		/*if (StringUtils.isBlank(appKey)) {
 | 
	
		
			
				|  |  |  			throw new RuntimeException("Init parameter [appKey] can not blank");
 | 
	
		
			
				|  |  |  		}
 | 
	
	
		
			
				|  | @@ -191,73 +199,29 @@ public class JiguangPushPlugin implements MessageSenderPlugin, InitializingBean
 | 
	
		
			
				|  |  |  		if (StringUtils.isBlank(reqURL)) {
 | 
	
		
			
				|  |  |  			throw new RuntimeException("Init parameter [reqURL] can not blank");
 | 
	
		
			
				|  |  |  		}*/
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	@Override
 | 
	
		
			
				|  |  | -	public boolean send(String subject, String content, String receiver, String url, String type,String sound,String channelId) throws IOException {
 | 
	
		
			
				|  |  | -		String[] alias = { receiver };
 | 
	
		
			
				|  |  | -		String result = this.push(alias, subject, content, url,type,sound,channelId);
 | 
	
		
			
				|  |  | -		JSONObject json = JSONObject.parseObject(result);
 | 
	
		
			
				|  |  | -		if (json.containsKey("error")) {
 | 
	
		
			
				|  |  | -			JSONObject jsonObject = json.getJSONObject("error");
 | 
	
		
			
				|  |  | -			throw new ThirdpartyException(jsonObject.get("message").toString());
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		return true;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	@Override
 | 
	
		
			
				|  |  | -	public boolean batchSend(String subject, String content, String[] receivers, String url, String type,String sound,String channelId) throws IOException {
 | 
	
		
			
				|  |  | -		String result = this.push(receivers, subject, content, url,type,sound,channelId);
 | 
	
		
			
				|  |  | -		JSONObject json = JSONObject.parseObject(result);
 | 
	
		
			
				|  |  | -		if (json.containsKey("error")) {
 | 
	
		
			
				|  |  | -			JSONObject jsonObject = json.getJSONObject("error");
 | 
	
		
			
				|  |  | -			throw new ThirdpartyException(jsonObject.get("message").toString()+"["+Arrays.stream(receivers).collect(Collectors.joining(","))+"]");
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		return true;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	public void setStudentAppKey(String studentAppKey) {
 | 
	
		
			
				|  |  | -		this.studentAppKey = studentAppKey;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	public void setStudentMasterSecret(String studentMasterSecret) {
 | 
	
		
			
				|  |  | -		this.studentMasterSecret = studentMasterSecret;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	public void setTeacherAppKey(String teacherAppKey) {
 | 
	
		
			
				|  |  | -		this.teacherAppKey = teacherAppKey;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	public void setTeacherMasterSecret(String teacherMasterSecret) {
 | 
	
		
			
				|  |  | -		this.teacherMasterSecret = teacherMasterSecret;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	public String getSystemAppKey() {
 | 
	
		
			
				|  |  | -		return systemAppKey;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	public void setSystemAppKey(String systemAppKey) {
 | 
	
		
			
				|  |  | -		this.systemAppKey = systemAppKey;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	public String getSystemMasterSecret() {
 | 
	
		
			
				|  |  | -		return systemMasterSecret;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	public void setSystemMasterSecret(String systemMasterSecret) {
 | 
	
		
			
				|  |  | -		this.systemMasterSecret = systemMasterSecret;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	public void setApns_production(boolean apns_production) {
 | 
	
		
			
				|  |  | -		this.apns_production = apns_production;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	public void setTime_to_live(int time_to_live) {
 | 
	
		
			
				|  |  | -		this.time_to_live = time_to_live;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	public void setReqURL(String reqURL) {
 | 
	
		
			
				|  |  | -		this.reqURL = reqURL;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public boolean send(String subject, String content, String receiver, String url, String type, String sound, String channelId) throws IOException {
 | 
	
		
			
				|  |  | +        String[] alias = {receiver};
 | 
	
		
			
				|  |  | +        String result = this.push(alias, subject, content, url, type, sound, channelId);
 | 
	
		
			
				|  |  | +        JSONObject json = JSONObject.parseObject(result);
 | 
	
		
			
				|  |  | +        if (json.containsKey("error")) {
 | 
	
		
			
				|  |  | +            JSONObject jsonObject = json.getJSONObject("error");
 | 
	
		
			
				|  |  | +            throw new ThirdpartyException(jsonObject.get("message").toString());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return true;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public boolean batchSend(String subject, String content, String[] receivers, String url, String type, String sound, String channelId) throws IOException {
 | 
	
		
			
				|  |  | +        String result = this.push(receivers, subject, content, url, type, sound, channelId);
 | 
	
		
			
				|  |  | +        JSONObject json = JSONObject.parseObject(result);
 | 
	
		
			
				|  |  | +        if (json.containsKey("error")) {
 | 
	
		
			
				|  |  | +            JSONObject jsonObject = json.getJSONObject("error");
 | 
	
		
			
				|  |  | +            throw new ThirdpartyException(jsonObject.get("message").toString() + "[" + Arrays.stream(receivers).collect(Collectors.joining(",")) + "]");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return true;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  }
 |