友盟推送 android服务器端

public class UMengPushAndroidImpl implements UMengPushPlatform{
	private Map<String,String> pushParams = new HashMap<>();
	static final Logger logger = Logger.getLogger(UMengPushAndroidImpl.class);
	
	public UMengPushAndroidImpl(){
		pushParams.put("method", Utils.UMENG_METHOD);
		pushParams.put("url", Utils.UMENG_URL);
		pushParams.put("appkey.tech", "555b1ceb67e58xxxxxxx");
		pushParams.put("appMasterSecret.tech", "fb067a95ba074551xxxx");
		pushParams.put("appkey.user", "555b1e2c67e5xxxxx");
		pushParams.put("appMasterSecret.user", "91b7325051d084cxxxx");
	}
	
	public boolean custom(int userType,
			String alias,String alias_type,
			String title,String text,
			Map<String,Object> extraParams){
		Map<String,Object> resMap = new HashMap<>();
		JSONObject data = new JSONObject();
		data.put("appkey", pushParams.get("appkey."+Utils.toUsertypeStr(userType)));
		data.put("timestamp", System.currentTimeMillis()+"");
		data.put("type", "customizedcast");
		data.put("alias", alias);
		data.put("alias_type", alias_type);
		
		JSONObject payload  = new JSONObject();
		payload.put("display_type", "notification");
		data.put("payload", payload);
		
		JSONObject body = new JSONObject();
		body.put("ticker", "ticker");
		body.put("title", title);
		body.put("text", text);
		body.put("after_open", "go_app");
		payload.put("body", body);
		
		if(null!=extraParams&&!extraParams.isEmpty()){
			JSONObject extra = new JSONObject();
			extra.putAll(extraParams);
			payload.put("extra", extra);
		}
		
		JSONObject policy = new JSONObject();
		policy.put("expire_time", Utils.getExpireTime());
		data.put("policy", policy);
		
		data.put("description", "description");
		
		try {
			String post_body = JSON.json(data);
			String sign = Utils.sign(new String[]{
					pushParams.get("method"),
					pushParams.get("url"),
					post_body,
					pushParams.get("appMasterSecret."+Utils.toUsertypeStr(userType))
			});
			
			//{"ret":"SUCCESS","data":{"msg_id":"ul62380143320937907000"}}
			String res = Utils.sendMsg(pushParams.get("url"), 
					sign,
					post_body);
			resMap = JSON.parse(res, Map.class);
			logger.info( "userType:"+Utils.toUsertypeStr(userType)
					+",\nappkey:"+pushParams.get("appkey."+Utils.toUsertypeStr(userType))
					+",appMasterSecret:"+pushParams.get("appMasterSecret."+Utils.toUsertypeStr(userType))
					+",\n"+pushParams.get("url")+"?sign="+sign
					+",\npost_body:"+post_body
					+",\nresMap:"+resMap);
		} catch (IOException|ParseException e) {
			throw new RuntimeException(e);
		}
		return "SUCCESS".equals(resMap.get("ret")+"");
	}
	
	
	public void setPushParams(Map<String,String> pushParams){
		this.pushParams = pushParams;
	}
}


import java.io.IOException;
import java.io.InputStream;
import java.util.Calendar;
import java.util.Locale;
import java.util.Map;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.fluent.Request;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;

public class Utils {
//	public static final String ALIAS_TYPE = "tc_chedashi";
	static final String UMENG_METHOD = "POST";
	static final String UMENG_URL = "http://msg.umeng.com/api/send";
	
	static Calendar calender = Calendar.getInstance(Locale.US);
	static 
	int getYear(){
		return calender.get(Calendar.YEAR);
	}
	
	static String expire_time = "-12-31 12:00:00";
	static
	String getExpireTime(){
		return (getYear()+1)+expire_time;
	}
	
	static 
	String toUsertypeStr(int userType){
		String _userType = "";
		switch(userType){
		case 1:
			_userType = "user";
			break;
		case 2:
			_userType = "tech";
			break;
		default:
			throw new RuntimeException("unknow userType:"+userType);
		}
		return _userType;
	}
	
	static 
	String sign(String...strings ){
//		String sign = String.format("%s%s%s%s", 
//				strings[0],strings[1],
//				strings[2],strings[3]);
//		return DigestUtils.md5Hex(sign).toLowerCase(); 
		try{
			String sign = String.format("%s%s%s%s", 
				strings[0],strings[1],
				strings[2],strings[3]);			
			return DigestUtils.md5Hex(sign.getBytes("utf8"));
		}catch(Exception e){
			throw new RuntimeException(e);
		}
	}
	
	static
	String sendMsg(String url,String sign,String post_body)throws IOException{
		int buff_size = 1024*8;
		byte[] buff = new byte[buff_size];
		HttpEntity entity = 
			Request.Post(String.format("%s?sign=%s", url,sign))
				.connectTimeout(3000)
				.body(new StringEntity(post_body, "UTF-8"))
				.execute().returnResponse().getEntity();
		int contentLen = (int) entity.getContentLength();
        if(contentLen>buff_size) contentLen = buff_size;
        InputStream in = entity.getContent();
        in.read(buff, 0, contentLen);
        in.close();
        return new String(buff,0,contentLen);
	}
}


你可能感兴趣的:(友盟推送 android服务器端)