您的位置:首页 > 移动开发

[置顶] App推送java服务端_小米推送

2015-09-14 15:21 309 查看
目前主流的推送,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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: