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

来源:互联网 发布:百度清风算法 编辑:程序博客网 时间:2024/05/29 00:34

目前主流的推送,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();}


1 0
原创粉丝点击