package com.stylefeng.guns.modular.system.util;
|
|
import cn.jiguang.common.ClientConfig;
|
import cn.jiguang.common.resp.APIConnectionException;
|
import cn.jiguang.common.resp.APIRequestException;
|
import cn.jpush.api.JPushClient;
|
import cn.jpush.api.push.PushResult;
|
import cn.jpush.api.push.model.Message;
|
import cn.jpush.api.push.model.Options;
|
import cn.jpush.api.push.model.Platform;
|
import cn.jpush.api.push.model.PushPayload;
|
import cn.jpush.api.push.model.audience.Audience;
|
import cn.jpush.api.push.model.audience.AudienceTarget;
|
import cn.jpush.api.push.model.notification.AndroidNotification;
|
import cn.jpush.api.push.model.notification.IosNotification;
|
import cn.jpush.api.push.model.notification.Notification;
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import org.apache.http.HttpResponse;
|
import org.apache.http.client.HttpClient;
|
import org.apache.http.client.methods.HttpPost;
|
import org.apache.http.entity.StringEntity;
|
import org.apache.http.impl.client.DefaultHttpClient;
|
import org.apache.http.util.EntityUtils;
|
import sun.misc.BASE64Encoder;
|
|
import java.util.HashMap;
|
import java.util.Map;
|
|
/**
|
* 极光推送
|
* @author suen
|
* 2017年3月23日-上午11:00:57
|
* version 1.0
|
* jdk 1.8
|
*/
|
public class JpushUtil {
|
|
/**
|
* AppKey
|
*/
|
private static String masterSecret = "e4f6f435faefad29db6ba9b2";
|
|
/**
|
* Master Secret
|
*/
|
private static String appKey = "93204c35ded9ba377a14af19";
|
private static String pushUrl = "https://api.jpush.cn/v3/push";
|
private static boolean apns_production = true;
|
private static int time_to_live = 86400;
|
|
/**
|
* 推送
|
*/
|
private static JPushClient jpushClient = new JPushClient(masterSecret, appKey);
|
|
public static void main(String[] args) throws APIConnectionException, APIRequestException {
|
Map<String, Object> map=new HashMap<String, Object>();
|
map.put("sound", 1); //是否有声音 1=否 2=是
|
map.put("vibrate", 1); //是否有震动 1=否 2=是
|
map.put("type", 1); //消息类型 1=互动 2=公告
|
map.put("id", 1); //对象ID
|
//SendPushWithCustomForSh("1", "收到通知了11111!", "反馈", JSON.toJSONString(map));
|
// String result = push(pushUrl,"121",JSON.toJSONString(map),appKey,masterSecret,apns_production,time_to_live);
|
SendPushWithCustomForTransmission("1","测试极光自定义消息","自定义消息",map);
|
}
|
|
/**
|
* 系统消息
|
* @param alias
|
* @param alert
|
* @param androidTitle
|
* @param value
|
*/
|
public static void SendPushWithCustomForSh(String alias, String alert, String androidTitle, String value) {
|
ClientConfig config = ClientConfig.getInstance();
|
config.setPushHostName("https://api.jpush.cn");
|
JPushClient jpushClient = new JPushClient(masterSecret, appKey, 3, null, config);
|
PushPayload payload = PushPayload.newBuilder()
|
.setPlatform(Platform.android_ios())
|
.setAudience(Audience.alias(alias))
|
.setNotification(Notification.newBuilder()
|
.setAlert(alert)
|
.addPlatformNotification(AndroidNotification.newBuilder()
|
.setTitle(androidTitle)
|
.addExtra("action", value)
|
.build())
|
.addPlatformNotification(IosNotification.newBuilder()
|
.incrBadge(1)
|
.setSound("default").setBadge(+1)
|
.addExtra("action", value).build())
|
.build())
|
.setOptions(Options.newBuilder().setApnsProduction(false).build())
|
.build();
|
try {
|
PushResult result = jpushClient.sendPush(payload);
|
System.out.println(result);
|
} catch (APIConnectionException e) {
|
|
} catch (APIRequestException e) {
|
|
}
|
}
|
/**
|
* 透传消息
|
* @param alias 别名
|
* @param alert 内容
|
* @param title 标题
|
* @param map 参数
|
*/
|
public static void SendPushWithCustomForTransmission(String alias, String alert, String title, Map<String, Object> map) {
|
ClientConfig config = ClientConfig.getInstance();
|
config.setPushHostName("https://api.jpush.cn");
|
JPushClient jpushClient = new JPushClient(masterSecret, appKey, 3, null, config);
|
PushPayload payload = PushPayload.newBuilder()
|
|
.setPlatform(Platform.android_ios())
|
|
.setAudience(Audience.alias(alias))
|
|
.setMessage(Message.newBuilder()
|
.setMsgContent(alert)
|
.setContentType("text")
|
.setTitle(title)
|
.addExtra("sound",String.valueOf(map.get("sound")))
|
.addExtra("vibrate",String.valueOf(map.get("vibrate")))
|
.addExtra("type",String.valueOf(map.get("type")))
|
.addExtra("id",String.valueOf(map.get("id")))
|
.build())
|
|
.setOptions(Options.newBuilder().setApnsProduction(false).build())
|
.build();
|
try {
|
PushResult result = jpushClient.sendPush(payload);
|
System.out.println(result);
|
} catch (APIConnectionException e) {
|
|
} catch (APIRequestException e) {
|
|
}
|
}
|
/**
|
* 内容推送
|
* @param registrationId 注册用户ID
|
* @param content 推送内容
|
* @param extra 附加域
|
* @return
|
* @throws APIConnectionException
|
* @throws APIRequestException
|
*/
|
public static PushResult buildPushObject_ios_audienceMore_messageWithExtras(String registrationId, String content, String extra)
|
throws APIConnectionException, APIRequestException {
|
return jpushClient.sendPush(PushPayload.newBuilder().setPlatform(Platform.android_ios())
|
.setAudience(Audience.newBuilder().addAudienceTarget(AudienceTarget.alias(registrationId)).build())
|
.setMessage(Message.newBuilder().setMsgContent(content).addExtra("from", extra).build())
|
.setOptions(Options.newBuilder().setApnsProduction(false).build())
|
.build());
|
|
}
|
/**
|
* 组装极光推送专用json串
|
* @param alias
|
* @param alert
|
* @return json
|
*/
|
public static JSONObject generateJson(String alias,String alert,boolean apns_production,int time_to_live){
|
JSONObject json = new JSONObject();
|
JSONArray platform = new JSONArray();//平台
|
platform.add("android");
|
platform.add("ios");
|
|
JSONObject audience = new JSONObject();//推送目标
|
JSONArray alias1 = new JSONArray();
|
alias1.add(alias);
|
audience.put("alias", alias1);
|
|
JSONObject notification = new JSONObject();//通知内容
|
JSONObject android = new JSONObject();//android通知内容
|
android.put("alert", alert);
|
android.put("builder_id", 1);
|
JSONObject android_extras = new JSONObject();//android额外参数
|
android_extras.put("type", "infomation");
|
android.put("extras", android_extras);
|
|
JSONObject ios = new JSONObject();//ios通知内容
|
ios.put("alert", alert);
|
ios.put("sound", "default");
|
ios.put("badge", "+1");
|
JSONObject ios_extras = new JSONObject();//ios额外参数
|
ios_extras.put("type", "infomation");
|
ios.put("extras", ios_extras);
|
notification.put("android", android);
|
notification.put("ios", ios);
|
|
JSONObject options = new JSONObject();//设置参数
|
options.put("time_to_live", Integer.valueOf(time_to_live));
|
options.put("apns_production", apns_production);
|
|
json.put("platform", platform);
|
json.put("audience", audience);
|
json.put("notification", notification);
|
json.put("options", options);
|
return json;
|
|
}
|
|
/**
|
* 推送方法-调用极光API
|
* @param reqUrl
|
* @param alias
|
* @param alert
|
* @return result
|
*/
|
public static String push(String reqUrl,String alias,String alert,String appKey,String masterSecret,boolean apns_production,int time_to_live){
|
String base64_auth_string = encryptBASE64(appKey + ":" + masterSecret);
|
String authorization = "Basic " + base64_auth_string;
|
return sendPostRequest(reqUrl,generateJson(alias,alert,apns_production,time_to_live).toString(),"UTF-8",authorization);
|
}
|
|
/**
|
* 发送Post请求(json格式)
|
* @param reqURL
|
* @param data
|
* @param encodeCharset
|
* @param authorization
|
* @return result
|
*/
|
@SuppressWarnings({ "resource" })
|
public static String sendPostRequest(String reqURL, String data, String encodeCharset,String authorization){
|
HttpPost httpPost = new HttpPost(reqURL);
|
HttpClient client = new DefaultHttpClient();
|
HttpResponse response = null;
|
String result = "";
|
try {
|
StringEntity entity = new StringEntity(data, encodeCharset);
|
entity.setContentType("application/json");
|
httpPost.setEntity(entity);
|
httpPost.setHeader("Authorization",authorization.trim());
|
response = client.execute(httpPost);
|
result = EntityUtils.toString(response.getEntity(), encodeCharset);
|
} catch (Exception e) {
|
}finally{
|
client.getConnectionManager().shutdown();
|
}
|
return result;
|
}
|
/**
|
* BASE64加密工具
|
*/
|
public static String encryptBASE64(String str) {
|
byte[] key = str.getBytes();
|
BASE64Encoder base64Encoder = new BASE64Encoder();
|
String strs = base64Encoder.encodeBuffer(key);
|
return strs;
|
}
|
}
|