目前主流的推送,jpush,友盟,小米等等,楼主这里用的是小米,当然需要先看小米的api
小米提供的服务端api地址:http://dev.xiaomi.com/doc/?p=533#d5e15
客户端集成好sdk,服务器导入jar包,调小米的方法,然后做个后台界面供运维使用:
一个第三方的东西,其实做一遍跟做一百遍是一个意思,直接贴代码:
/** * 仅仅推送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(); }