App推送java服务端_小米推送

目前主流的推送,jpush,友盟,小米等等,楼主这里用的是小米,当然需要先看小米的api

小米提供的服务端api地址:http://dev.xiaomi.com/doc/?p=533#d5e15


客户端集成好sdk,服务器导入jar包,调小米的方法,然后做个后台界面供运维使用:



App推送java服务端_小米推送_第1张图片


一个第三方的东西,其实做一遍跟做一百遍是一个意思,直接贴代码:

/**
	 * 仅仅推送iOS
	 * @param context
	 * @param timeToSend
	 * @return
	 * @throws IOException
	 * @throws ParseException
	 */
	public static boolean sendIOSAll(String context,Date timeToSend,Map<String, String> extra)throws IOException, ParseException {
		sender = new Sender(appSecret);
		Result result = sender.broadcastAll(iosMessage(context,timeToSend,extra), maxRetryTimes);
		return resultHandle(result);
	}

	/**
	 * iOS推送
	 * @param context 推送内容
	 * @param timeToSend  定时发送消息。timeToSend是以毫秒为单位的时间戳。注:仅支持七天内的定时消息。
	 * @return
	 */
	protected static Message iosMessage(String context,Date timeToSend,Map<String, String> extra) {
		return iosMessage(context, null, null,timeToSend, extra);
	}

	/**
	 * iOS开始推送
	 * @param context
	 * @param soundType 可选项,自定义消息铃声。
	 * @param badge 可选项,自定义通知数字角标。
	 * @param timeToSend
	 * @param extras 可选项,自定义键值对。控制客户端的行为。注:至多可以设置10个key-value键值对。
	 * @return
	 */
	protected static Message iosMessage(String context, String soundType,Integer badge, Date timeToSend, Map<String, String> extras) {
		IOSBuilder builderIOS = IOSBuilder().description(context);

		if (StringUtils.isNotEmpty(soundType)){
			builderIOS.soundURL(soundType); 
		}

		if (badge != null){
			builderIOS.badge(badge);
		}

		if(timeToSend != null){
			builderIOS.timeToSend(timeToSend.getTime());
		}

		if (extras != null && !extras.isEmpty()) {
			for (Map.Entry<String, String> entry : extras.entrySet()) {
				builderIOS.extra(entry.getKey(), entry.getValue());
			}
		}

		return builderIOS.build();
	}

/**
	 * 仅仅推送Android
	 * @param title
	 * @param context
	 * @param timeToSend
	 * @return
	 * @throws IOException
	 * @throws ParseException
	 */
	public static boolean sendAndroidAll(String title, String context,Date timeToSend,Map<String, String> map,String alias)throws IOException, ParseException {
		sender = new Sender(appSecretAndroid);

		Result result = null;
		if(!StringUtils.isEmpty(alias)){//单个推送:类似iOS的测试推送
			result = sender.sendToAlias(androidMessage(title, context,timeToSend,map), alias, maxRetryTimes);
		}else{
			result = sender.broadcastAll(androidMessage(title, context,timeToSend,map),maxRetryTimes);
		}

		return resultHandle(result);
	}

	/**
	 * Android推送
	 * @param title
	 * @param context
	 * @param timeToSend
	 * @return
	 */
	protected static Message androidMessage(String title, String context,Date timeToSend,  Map<String, String> extras) {
		return androidMessage(title, context, context,timeToSend,extras);
	}

	/**
	 * Android开始推送
	 * @param title
	 * @param payload
	 * @param context
	 * @param timeToSend
	 * @param extras
	 * @return
	 */
	protected static Message androidMessage(String title, String payload,String context,Date timeToSend,  Map<String, String> extras) {
		Builder builder = builder().title(title).payload(payload)
				.description(context).restrictedPackageName(packageName)
				.passThrough(PASSDEFAULT)
				.notifyType(DEFAULT);

		if(timeToSend != null){
			builder.timeToSend(timeToSend.getTime());
		}

		if (extras != null && !extras.isEmpty()) {
			for (Map.Entry<String, String> entry : extras.entrySet()) {
				builder.extra(entry.getKey(), entry.getValue());
			}
		}
		return builder.build();
	}

try{
			Integer deviceType = msg.getDeviceType(); //设备类型 0 :全设备 1:android 2:IOS

			//开始构造定向推送
			Map<String, String> extra = new HashMap<String, String>();

			if (deviceType != null && msg.getDeviceType() == DeviceType_Android) {
				setProduAndroidFlag();
				
				//安卓没有测试环境,用单个的标记位控制是否推送一个还是推送所有
				String alias = "";
				if(!msg.isPushModeAndroid()&&!StringUtils.isEmpty(msg.getRegId())){
					alias = msg.getRegId();
				}
				
				if("2".equals(msg.getClickAppMode())&&!StringUtils.isEmpty(msg.getURL())){//1:直接打开应用,进首页;2:进入指定的H5页面;
					extra.put("class", "com.shop.splash.SplashActivity");
					extra.put("property", "{\"urlStr\":\""+msg.getURL()+"\"}");
				}
				
				return XiaomiUtils.sendAndroidAll(msg.getTitle(), msg.getContent(),msg.getStime(),extra,alias);
			} else if (deviceType != null && msg.getDeviceType() == DeviceType_IOS) {
				//控制是推正式环境还是测试环境
				setProductionMode(msg);

				if("2".equals(msg.getClickAppMode())&&!StringUtils.isEmpty(msg.getURL())){
					extra.put("class", "DWebDetailController");
					extra.put("property", "{\"urlStr\":\""+msg.getURL()+"\"}");
				}

				return XiaomiUtils.sendIOSAll(msg.getContent(),msg.getStime(),extra);
			} else{
				setProduAndroidFlag();
				//安卓没有测试环境,用单个的标记位控制是否推送一个还是推送所有
				String alias = "";
				if(!msg.isPushModeAndroid()&&!StringUtils.isEmpty(msg.getRegId())){
					alias = msg.getRegId();
				}
				
				if("2".equals(msg.getClickAppMode())&&!StringUtils.isEmpty(msg.getURL())){//1:直接打开应用,进首页;2:进入指定的H5页面;
					extra = new HashMap<String, String>();
					extra.put("class", "com.shop.splash.SplashActivity");
					extra.put("property", "{\"urlStr\":\""+msg.getURL()+"\"}");
				}
				
				boolean flagA = XiaomiUtils.sendAndroidAll(msg.getTitle(), msg.getContent(),msg.getStime(),extra,alias);
				
				//控制是推正式环境还是测试环境
				setProductionMode(msg);

				if("2".equals(msg.getClickAppMode())&&!StringUtils.isEmpty(msg.getURL())){
					extra = new HashMap<String, String>();
					extra.put("class", "DWebDetailController");
					extra.put("property", "{\"urlStr\":\""+msg.getURL()+"\"}");
				}

				boolean flagI =  XiaomiUtils.sendIOSAll(msg.getContent(),msg.getStime(),extra);
				
				if(flagA&&flagI){
					return true;
				}else{
					return false;
				}
			}
		}catch(Exception ex){
			ex.printStackTrace();
		}


你可能感兴趣的:(小米推送,app推送服务端)